80 lines
2.5 KiB
Markdown
80 lines
2.5 KiB
Markdown
# Jurassic Land
|
|
|
|
Test technique pour B-Appli.
|
|
|
|
Réalisé en utilisant le framework PHP Laravel. Testé avec une base SQLite.
|
|
|
|
## Compte-rendu
|
|
|
|
Fonctionnalités :
|
|
- Création d'un enclos
|
|
- Modification du nom d'un enclos
|
|
- Modification de l'état d'un enclos
|
|
- Enregistrement des changements d'état des enclos (ouvertures et fermetures)
|
|
- Listing des enclos avec leurs status
|
|
- Suppression d'un enclos
|
|
|
|
À faire :
|
|
- Listing des ouvertures/fermetures
|
|
- Styler les pages correctement (css, bootstrap)
|
|
- Gérer les erreurs de validation de façon user-friendly (reporter l'erreur dans l'interface, catcher les exceptions)
|
|
- Ajout d'une ouverture aléatoire pour modéliser l'ouverture par les vélociraptors
|
|
- Brancher le système d'authentification de Laravel
|
|
|
|
|
|
## Remarques
|
|
|
|
Codé en environ 2h30. C'était pour moi l'occasion de découvrir Laravel.
|
|
|
|
|
|
L'implémentation utilise au maximum les facilités offertes par Laravel : ORM,
|
|
migrations de base de données, routage d'un modèle.
|
|
|
|
La modélisation est très simple :
|
|
- un modèle Paddock (`app/Paddock.php`), qui modélise un enclos : id, nom, état
|
|
(booléen isClosed) ;
|
|
- un modèle PaddockStateChange (`app/PaddockStateChange.php`), qui modélise un
|
|
changement d'état (ouverture/fermeture). On utilise le fait que l'ORM de
|
|
laravel stocke automatiquement des timestamps de création et mise à jour pour
|
|
stocker la date d'ouverture/fermeture de l'enclos ;
|
|
- Paddock et PaddockStateChange sont liés par une relation hasMany ;
|
|
- le controlleur PaddockController (`app/Http/Controller/PaddockController.php`)
|
|
est dérivé du squelette créé automatiquement par Laravel ;
|
|
- ce qui permet de router toutes les actions CRUD classiques en une ligne dans
|
|
`routes/web.php` ;
|
|
- les fichiers de migration sont dans `database/migrations`
|
|
(create_paddock_table, add_unique_constraint_on_paddock_names,
|
|
create_paddock_state_changes).
|
|
|
|
|
|
Propriétés :
|
|
* un enclos est identifié de manière unique par son nom : assuré par une
|
|
contrainte d'intégrité sur la colonne de la base de données.
|
|
* enclos fermé par défaut (valeur par défaut dans le modèle)
|
|
|
|
|
|
## Installation et test
|
|
|
|
|
|
Pré-requis : installation de Laravel
|
|
|
|
```
|
|
composer global require laravel/installer
|
|
```
|
|
|
|
|
|
Clonage et mise en route :
|
|
|
|
```
|
|
git clone http://git.dromaludaire.info/benjamin/bappli-jurassic-land.git
|
|
cd bappli-jurassic-land
|
|
composer update
|
|
cp .env.example .env
|
|
php artisan key:generate
|
|
touch database/database.sqlite
|
|
php artisan migrate
|
|
php artisan serve
|
|
```
|
|
|
|
Et l'application est ensuite disponible sur <http://localhost:8000>
|