feature/clear-video #125

Merged
Nora merged 10 commits from feature/clear-video into develop 2026-08-02 10:12:15 +00:00
Owner
No description provided.
Revérifie l'existence de l'Artwork via ArtworkRepository::get() après le
rendu (lent) et avant la boucle save : si l'œuvre a été purgée entre-temps,
supprime les vidéos fraîchement uploadées (AssetStorage::delete, no-op sur
objet absent) et retourne sans persister — best-effort TOCTOU, filet réel = T03.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Nouvelle méthode sur le port + adaptateur Doctrine : LEFT JOIN artwork_video ×
artwork WHERE a.id IS NULL, triée par (artwork_id, format_code), lignes typées
(@var list<array{…}>) pour PHPStan niveau 9. Test d'intégration SQLite en
mémoire enrichi d'une table artwork minimale pour le JOIN. Réutilisera
deleteByArtwork() en T03 — pas de deleteOrphans() dédié.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Use case calqué sur PurgeRejectedArtworks : findOrphans() → delete assets par
videoPath (avant les lignes, no-op idempotent sur objet absent), dédup des
artworkId puis deleteByArtwork() une fois par id distinct, retourne le nombre
de lignes purgées. Pas de transaction (rejouable). Filet réel du TOCTOU T01.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Le corps ajouté en T02 dérivait du format mago (appel new ArtworkVideo(...)
sur une ligne). mago fmt le reflow multi-lignes → gate CI fmt --check vert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Nouveau champ int $orphanVideos sur DashboardMetrics (groupe Exploitation,
args nommés) + DashboardMetricsProvider::orphanVideoCount() calqué sur
failedMessages() mais sans catch TableNotFoundException (artwork/artwork_video
existent post-migration) : COUNT(*) artwork_video LEFT JOIN artwork WHERE
a.id IS NULL. Test fonctionnel sur la vraie Postgres de test (insert + tearDown).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Calquée sur purgeRejected : injection PurgeOrphanArtworkVideos (autowired),
const CSRF admin_purge_orphan_videos, action POST-only CSRF-gardée qui délègue
au use case, flashe le nombre supprimé et redirige vers la console. 4 tests
fonctionnels (succès POST direct token valide / token invalide 403 / GET 405 /
anonyme redirigé login). Le bouton submitForm arrive en T06.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
T06: tuile dashboard « Vidéos orphelines » + bouton de purge
All checks were successful
CI / Renderer - tests + lint JS (pull_request) Successful in 4m42s
CI / PHP - tests + static + lint (pull_request) Successful in 7m26s
3436e34e66
Tuile data-kpi="orphan-videos" calquée sur purge-rejected : compteur
metrics.orphanVideos (classe --alert si > 0) et formulaire POST CSRF-gardé
(confirm()) vers admin_action_purge_orphan_videos, bouton « Supprimer les
vidéos orphelines ». Le test succès de T05 pilote désormais le vrai bouton
via submitForm (plus de plomberie CSRF manuelle).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
fix timeout
All checks were successful
CI / Renderer - tests + lint JS (pull_request) Successful in 2m34s
CI / PHP - tests + static + lint (pull_request) Successful in 3m35s
a3a9b1a2a6
Nora merged commit 0d111559b7 into develop 2026-08-02 10:12:15 +00:00
Nora deleted branch feature/clear-video 2026-08-02 10:12:15 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Nora/ArtAutomatic!125
No description provided.