Skip to content

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 ​

OutilVersionPour
Elixir1.17le langage (mix, la commande qui fait tout)
Erlang/OTP26la machine virtuelle sur laquelle tourne Elixir
PostgreSQL17la 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) :

bash
docker run -d --name timemanager-postgres \
  -e POSTGRES_PASSWORD=postgres -p 5432:5432 postgres:17

Première installation ​

bash
cd timemanager-api
mix setup

mix setup enchaîne quatre étapes (alias défini dans mix.exs) :

  1. deps.get : télécharge les bibliothèques ;
  2. ecto.create : crée la base timemanager_dev ;
  3. ecto.migrate : crée les tables, migration par migration ;
  4. 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) :

bash
ADMIN_EMAIL=admin@gotham.gov ADMIN_PASSWORD='Un mot de passe solide!' \
  mix run priv/repo/seeds.exs

Les 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 :

bash
DEMO_PASSWORD='Un mot de passe solide!' mix run priv/repo/demo_seeds.exs

Mot 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 ​

bash
mix phx.server

L'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.

AdresseCe qu'on y trouve
http://localhost:4000/api/docsSwagger : toutes les routes, avec un formulaire pour les essayer
http://localhost:4000/api/openapila même description, en JSON (pour Postman, Insomnia…)
http://localhost:4000/dev/mailboxles e-mails « envoyés » en développement : rien ne part vraiment
http://localhost:4000/dev/dashboardle tableau de bord de Phoenix (processus, requêtes, mémoire)

Lancer les tests ​

bash
mix test

Les 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 ​

CommandeEffet
mix phx.serverdémarre l'API
iex -S mix phx.serverla même chose, avec une console Elixir pour essayer des fonctions
mix testlance tous les tests
mix test test/timemanager/clocks_test.exsun seul fichier de tests
mix test --failedrelance seulement ceux qui ont échoué
mix ecto.migrateapplique les nouvelles migrations
mix ecto.gen.migration nomcrée une migration vide à remplir
mix ecto.resetefface la base de dev et la recrée (perte de toutes les données)
mix format chemin/du/fichier.exmet en forme un fichier (voir Conventions)

Si ça ne marche pas ​

SymptômeCause probable
connection refused vers la basePostgreSQL n'est pas lancé, ou pas sur le port 5432
database "timemanager_dev" does not existmix ecto.create n'a pas été lancé
erreur 500 « could not compile » après un git pullune dépendance a changé : mix deps.get, puis relancer le serveur
impossible de se connecter avec un compte de démodemo_seeds.exs n'a pas été lancé, ou avec un autre DEMO_PASSWORD