renault-digital-2020

Cities

Installation

En utilisant MySQL:

En utilisant Postgresql

Démarrer le serveur

Configurer la bdd dans application.yml avec la bdd choisie. Démarrer le serveur Spring Boot (http://localhost:8008):

# Linux & MacOS
./gradlew bootRun

# Windows
gradlew bootRun

Exécuter les tests

Des tests unitaires vérifie que vos endpoints REST fonctionnent correctement. Pour les exécuter :

# Linux & MacOS
./gradlew test

# Windows
gradlew test

Exercice

Pour travailler les relations, les transactions, et revoir les contrôleurs, nous allons développer l’application “cities”, qui met en relation des pays, régions, et villes. Des utilisateurs peuvent “follow” des villes :

ER diagram

Le backend est à développer en TDD : chaque test unitaire vérifie le bon fonctionnement des différentes parties. Lors de la journée en commun du mercredi, nous allons ajouter le frontend nécessaire pour appeler le backend.

Partie 0 - Language - Échauffement

Un énuméré Language a été créé et sera utile pour les pays plus tard. Créer un REST controlleur avec les URLs suivants:

Vérification :

Partie 1 - Country - Introduction

Créer une nouvelle entitée Country avec les propriétés suivantes :

Créer un REST controlleur avec les URLs suivants:

Dans CitiesApplication, ajouter du contenu au démarrage de l’application :

id language name
1001 “FR” “France”
1002 “EN” “Canada”
1003 “JA” “Japan”

Partie 2 - Region - Mapping bidirectionnel

Créer une nouvelle entitée Region avec les propriétés suivantes :

Dans Country ajouter les propriétés suivantes (implémentation d’un mapping “bidirectionel”, voir https://docs.oracle.com/cd/E19798-01/821-1841/bnbqj/index.html) :

Créer un REST controlleur avec les URLs suivants :

Puisque la Region a une clef étrangère qui référence un Country, vous allez devoir insérer le pays avant, dans une transaction:

Dans CitiesApplication, ajouter du contenu au démarrage de l’application :

id name country_id
2001 “IDF” 1001
2002 “Québec” 1002

Questions :

Partie 3 - City - Mapping bidirectionnel

Ajouter les mêmes fonctionnalités que pour région sur un nouvel entité City.

Dans CitiesApplication, ajouter du contenu au démarrage de l’application :

id name region_id
3001 “Paris” 2001
3002 “Montreuil” 2001
3003 “Montréal” 2002
3004 “Laval” 2002

Partie 4 - User - Association ManyToMany

Créer une nouvelle entité User. Un utilisateur pourra “suivre” une ville (si vous n’avez pas fait la partie 3, un utilisateur pourra suivre une région) :

Afin d’implémenter followedCity, il faut créer une table de jointure, nommée “user_city”, qui a 2 colonnes:

Créer un REST controlleur avec les URLs suivants :

Dans CitiesApplication, ajouter du contenu au démarrage de l’application :

Table “user” :

id name
4001 “Alex”

Table “user_city” :

user_id city_id
4001 3001
4001 3002

Partie 5 - @Valid - Validation

Dans cette partie, nous allons valider les entité au niveau des entités et de la bdd.

Pour les entités :

Pour la BDD :

drop table city if exists
drop table country if exists
drop table region if exists
drop table user if exists
create table city (id integer generated by default as identity, name varchar(255), primary key (id))
create table country (id integer generated by default as identity, language varchar(255), name varchar(512) not null, primary key (id))
create table region (id integer generated by default as identity, name varchar(255), country_id integer, primary key (id))
create table user (id integer generated by default as identity, primary key (id))
alter table region add constraint FK7vb2cqcnkr9391hfn72louxkq foreign key (country_id) references country

Partie 6 - Approfondissement

Dans cette partie, nous allons approfondir certains sujets :

Outline content (draft)