Add movie runtime, bulk OMDb refresh, and first-time setup

- Add runtime field to Movie model and display formatted duration (e.g., 2h 22min) on movie cards
- Add bulk "Refresh OMDb" button in admin panel for selected movies
- Add runtime field to movie edit modal in admin panel
- Implement first-time setup flow: show admin creation form on login page when no admin exists
- Block registration page until initial setup is complete

Co-Authored-By: Claude Opus 4.5 <[email protected]>
This commit is contained in:
Mathieu Moran
2026-02-01 10:08:15 -05:00
co-authored by Claude Opus 4.5
parent 087f4f4023
commit 6186f3a051
10 changed files with 391 additions and 54 deletions
+34 -1
View File
@@ -47,7 +47,40 @@
</button>
<div class="container">
<div class="card p-4" style="max-width: 400px; margin: auto;">
<!-- First-time setup card (hidden by default) -->
<div id="setup-card" class="card p-4 d-none" style="max-width: 450px; margin: auto;">
<div class="text-center mb-3">
<img src="img/logo.png" class="logo-invert" style="width: 80%;" alt="Pool Oscars">
</div>
<div class="alert alert-info mb-3">
<strong>Première installation</strong><br>
Aucun administrateur n'existe. Créez le premier compte admin pour commencer.
</div>
<form id="setup-form">
<div class="mb-3">
<label for="setup-name" class="form-label">Nom</label>
<input type="text" class="form-control" id="setup-name" placeholder="Votre nom" required>
</div>
<div class="mb-3">
<label for="setup-email" class="form-label">Courriel</label>
<input type="email" class="form-control" id="setup-email" placeholder="[email protected]" required>
</div>
<div class="mb-3">
<label for="setup-password" class="form-label">Mot de passe</label>
<input type="password" class="form-control" id="setup-password" minlength="6" required>
<div class="form-text">Minimum 6 caractères</div>
</div>
<div class="mb-3">
<label for="setup-password-confirm" class="form-label">Confirmer le mot de passe</label>
<input type="password" class="form-control" id="setup-password-confirm" minlength="6" required>
</div>
<div id="setup-error" class="alert alert-danger d-none" role="alert"></div>
<button type="submit" class="btn btn-warning w-100">Créer le compte admin</button>
</form>
</div>
<!-- Normal login card -->
<div id="login-card" class="card p-4" style="max-width: 400px; margin: auto;">
<div class="text-center mb-4">
<img src="img/logo.png" class="logo-invert" style="width: 80%;" alt="Pool Oscars">
</div>