Lancer le projet
Cette page fait passer d'un dépôt fraîchement cloné à une API qui répond sur http://localhost:4000, avec des comptes de démonstration.
Prérequis
| Outil | Version | Pour |
|---|---|---|
| Elixir | 1.17 | le langage (mix, la commande qui fait tout) |
| Erlang/OTP | 26 | la machine virtuelle sur laquelle tourne Elixir |
| PostgreSQL | 17 | la base de données |
Installer Elixir
Le plus simple est un gestionnaire de versions comme mise ou asdf, qui installe Erlang et Elixir aux bonnes versions. Sinon, suis le guide officiel.
Pour PostgreSQL, un conteneur suffit. L'API de développement attend l'utilisateur postgres avec le mot de passe postgres sur localhost (voir config/dev.exs) :
docker run -d --name timemanager-postgres \
-e POSTGRES_PASSWORD=postgres -p 5432:5432 postgres:17Première installation
cd timemanager-api
mix setupmix setup enchaîne quatre étapes (alias défini dans mix.exs) :
deps.get: télécharge les bibliothèques ;ecto.create: crée la basetimemanager_dev;ecto.migrate: crée les tables, migration par migration ;run priv/repo/seeds.exs: crée le premier General Manager, seulement si tu donnes ses identifiants (voir ci-dessous).
Créer des comptes
Les identifiants ne sont jamais écrits dans le code : ils viennent de variables d'environnement.
Le premier General Manager, le seul compte créé avec un mot de passe (tous les autres sont invités par e-mail) :
ADMIN_EMAIL=admin@gotham.gov ADMIN_PASSWORD='Un mot de passe solide!' \
mix run priv/repo/seeds.exsLes données de démonstration : les personnes, équipes et heures des maquettes Figma (Renee Montoya, Barbara Gordon…), avec plusieurs semaines d'heures. Chaque compte de démo reçoit le même mot de passe :
DEMO_PASSWORD='Un mot de passe solide!' mix run priv/repo/demo_seeds.exsMot de passe
Un mot de passe choisi doit faire 12 caractères au moins, avec une majuscule et un caractère spécial. Les données de démo refusent de tourner en production.
Démarrer l'API
mix phx.serverL'API répond sur http://localhost:4000. Le code se recharge tout seul à chaque enregistrement, sauf après un changement de dépendances (mix.lock) : il faut alors arrêter et relancer le serveur.
| Adresse | Ce qu'on y trouve |
|---|---|
http://localhost:4000/api/docs | Swagger : toutes les routes, avec un formulaire pour les essayer |
http://localhost:4000/api/openapi | la même description, en JSON (pour Postman, Insomnia…) |
http://localhost:4000/dev/mailbox | les e-mails « envoyés » en développement : rien ne part vraiment |
http://localhost:4000/dev/dashboard | le tableau de bord de Phoenix (processus, requêtes, mémoire) |
Lancer les tests
mix testLes tests utilisent leur propre base, timemanager_test, créée et migrée automatiquement. Chaque test tourne dans une transaction annulée à la fin : aucune donnée ne reste, et l'ordre des tests n'a pas d'importance.
Une date figée pour les tests
Certaines règles dépendent de la date du jour (« une correction porte sur les 4 dernières semaines »). Pour que les tests passent quel que soit le jour où on les lance, ils utilisent un « aujourd'hui » figé au 12 octobre 2026 (config :timemanager, :fixed_today dans config/test.exs).
Les commandes utiles
| Commande | Effet |
|---|---|
mix phx.server | démarre l'API |
iex -S mix phx.server | la même chose, avec une console Elixir pour essayer des fonctions |
mix test | lance tous les tests |
mix test test/timemanager/clocks_test.exs | un seul fichier de tests |
mix test --failed | relance seulement ceux qui ont échoué |
mix ecto.migrate | applique les nouvelles migrations |
mix ecto.gen.migration nom | crée une migration vide à remplir |
mix ecto.reset | efface la base de dev et la recrée (perte de toutes les données) |
mix format chemin/du/fichier.ex | met en forme un fichier (voir Conventions) |
Si ça ne marche pas
| Symptôme | Cause probable |
|---|---|
connection refused vers la base | PostgreSQL n'est pas lancé, ou pas sur le port 5432 |
database "timemanager_dev" does not exist | mix ecto.create n'a pas été lancé |
erreur 500 « could not compile » après un git pull | une dépendance a changé : mix deps.get, puis relancer le serveur |
| impossible de se connecter avec un compte de démo | demo_seeds.exs n'a pas été lancé, ou avec un autre DEMO_PASSWORD |