@@ -46,7 +46,7 @@ On peut constater un certain nombre de changements par rapport au TP précédent
...
@@ -46,7 +46,7 @@ On peut constater un certain nombre de changements par rapport au TP précédent
3. Une classe `BDDFactory` est fournie qui gère la connexion à la base de donnée
3. Une classe `BDDFactory` est fournie qui gère la connexion à la base de donnée
4. La configuration de l'affichage des logs est maintenant géré par un fichier de configuration externe `logging.properties`
4. La configuration de l'affichage des logs est maintenant géré par un fichier de configuration externe `logging.properties`
## Un petit test manuel pour démarrer...
## Test manuel et découverte du code
Avant de commencer à compléter le code fournit, nous allons tester un petit peu :
Avant de commencer à compléter le code fournit, nous allons tester un petit peu :
Dans un terminal, lancez le serveur avec la commande `mvn compile exec:java`.
Dans un terminal, lancez le serveur avec la commande `mvn compile exec:java`.
...
@@ -76,3 +76,36 @@ Content-Length: 100
...
@@ -76,3 +76,36 @@ Content-Length: 100
[{"description":"tester la création","id":"4ba24fd7-5856-4678-8f9e-84802e3334dd","nom":"tâche 1"}]
[{"description":"tester la création","id":"4ba24fd7-5856-4678-8f9e-84802e3334dd","nom":"tâche 1"}]
~~~
~~~
On peut également vérifier la présence de nos données dans la base de données (̀ sqlite`) :
~~~
$ sqlite3 /tmp/peter_todo.db
SQLite version 3.33.0 2020-08-14 13:23:32
Enter ".help" for usage hints.
sqlite> select * from taches;
4ba24fd7-5856-4678-8f9e-84802e3334dd|tâche 1|tester la création
~~~
Les opérations de manipulation de la table `taches` sont définies dans la classe `TacheDAO` avec des annotations (JDBI)[https://jdbi.org/#_sql_objects] :
~~~java
public interface TacheDAO {
@SqlUpdate("create table if not exists taches (id varchar(128) primary key, nom varchar not null, description varchar)")
void createTable();
@SqlUpdate("drop table if exists taches")
void dropTable();
@SqlUpdate("insert into taches (id, nom, description) values (:id, :nom, :description)")
int insert(@BindBean Tache tache);
@SqlQuery("select * from taches")
@RegisterBeanMapper(Tache.class)
List<Tache> getAll();
}
~~~
Ce DAO est utilisé dans la classe `Tache` qui représente une tâche particulière. Les tâches sont manipulées via la classe `TodoService`.
Si vous regardez le code de la classe `Tache`, vous constaterez que nous avons choisi d'identifier les tâches au moyen un identifiant unique ((UUID)[https://fr.wikipedia.org/wiki/Universally_unique_identifier]). Comme ce type n'est pas géré nativement par JDBI, nous avons dû utiliser une (mécanisme d'extension)[https://jdbi.org/#_custom_arguments] permettant la conversion entre le type `java.util.UUID` et `String` (classes `UUIDArgument` et `UUIDArgumentFactory`).