From fff38727261a3d6a394b551f73cd7aef3987a472 Mon Sep 17 00:00:00 2001
From: Laurine <lenetlaurine@gmail.com>
Date: Fri, 6 Oct 2023 08:58:19 +0200
Subject: [PATCH] 8.1 BDD getUsers

---
 docker-compose.yml                            | 11 ++++++++
 initdb/1_TABLES.sql                           |  7 +++++
 initdb/2_DEFAULT_ENTRIES.sql                  |  8 ++++++
 pom.xml                                       |  6 +++++
 .../example/livecodingjavaspring/User.java    |  2 ++
 .../example/livecodingjavaspring/UserDao.java | 26 +++++++++++++------
 6 files changed, 52 insertions(+), 8 deletions(-)
 create mode 100644 docker-compose.yml
 create mode 100644 initdb/1_TABLES.sql
 create mode 100644 initdb/2_DEFAULT_ENTRIES.sql

diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..803ae8d
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,11 @@
+version: '3.1'
+services:
+  database:
+    container_name: api_database
+    image: postgres
+    environment:
+      POSTGRES_USER : user
+      POSTGRES_PASSWORD: pwd
+      POSTGRES_DB: db-name
+    ports:
+      - "5432:5432"
diff --git a/initdb/1_TABLES.sql b/initdb/1_TABLES.sql
new file mode 100644
index 0000000..3440d84
--- /dev/null
+++ b/initdb/1_TABLES.sql
@@ -0,0 +1,7 @@
+create table users
+(
+    id         SERIAL PRIMARY KEY,
+    first_name TEXT not null,
+    last_name  TEXT not null,
+    age  int null
+)
diff --git a/initdb/2_DEFAULT_ENTRIES.sql b/initdb/2_DEFAULT_ENTRIES.sql
new file mode 100644
index 0000000..5f637dd
--- /dev/null
+++ b/initdb/2_DEFAULT_ENTRIES.sql
@@ -0,0 +1,8 @@
+INSERT INTO users (id, first_name, last_name, age) VALUES (1, 'Laurine', 'LE NET', 22);
+INSERT INTO users (id, first_name, last_name, age) VALUES (2, 'Pilou', 'BERTRAND', 24);
+INSERT INTO users (id, first_name, last_name, age) VALUES (3, 'Alain', 'CONNU', 26);
+INSERT INTO users (id, first_name, last_name, age) VALUES (4, 'Aurélie', 'BIENCEQUETAECRIT', 20);
+INSERT INTO users (id, first_name, last_name, age) VALUES (5, 'Barack', 'AFFRITTE', 22);
+INSERT INTO users (id, first_name, last_name, age) VALUES (6, 'Camille', 'ONETTE', 23);
+INSERT INTO users (id, first_name, last_name, age) VALUES (7, 'Jean', 'TENRIEN', 22);
+INSERT INTO users (id, first_name, last_name, age) VALUES (8, 'Lara', 'TATOUILLE', 24);
diff --git a/pom.xml b/pom.xml
index 4c162b0..878037c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -36,6 +36,12 @@
 		    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
 		    <version>2.1.0</version>
 		</dependency>
+		<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
+		<dependency>
+		    <groupId>org.postgresql</groupId>
+		    <artifactId>postgresql</artifactId>
+		    <version>42.6.0</version>
+		</dependency>
 
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
diff --git a/src/main/java/com/example/livecodingjavaspring/User.java b/src/main/java/com/example/livecodingjavaspring/User.java
index 6d101f4..630fccd 100644
--- a/src/main/java/com/example/livecodingjavaspring/User.java
+++ b/src/main/java/com/example/livecodingjavaspring/User.java
@@ -1,8 +1,10 @@
 package com.example.livecodingjavaspring;
 
+import lombok.Builder;
 import lombok.Data;
 
 @Data
+@Builder
 public class User {
     private String firstName;
     private String lastName;
diff --git a/src/main/java/com/example/livecodingjavaspring/UserDao.java b/src/main/java/com/example/livecodingjavaspring/UserDao.java
index dbc6edc..599d882 100644
--- a/src/main/java/com/example/livecodingjavaspring/UserDao.java
+++ b/src/main/java/com/example/livecodingjavaspring/UserDao.java
@@ -2,22 +2,32 @@ package com.example.livecodingjavaspring;
 
 import org.springframework.stereotype.Service;
 
+import java.sql.*;
 import java.util.ArrayList;
 import java.util.List;
+
 @Service
 public class UserDao {
+    private static final String FETCH_ALL_USERS_QUERY = "SELECT * FROM users";
 
     public List<User> getUsers() {
         List<User> users = new ArrayList<>();
-        users.add(new User("Laurine", "LE NET", 22));
-        users.add(new User("Pilou", "BERTRAND", 24));
-        users.add(new User("Alain", "CONNU", 26));
-        users.add(new User("Aurélie", "BIENCEQUETAECRIT", 20));
-        users.add(new User("Barack", "AFFRITTE", 22));
-        users.add(new User("Camille", "ONETTE", 23));
-        users.add(new User("Jean", "TENRIEN", 22));
-        users.add(new User("Lara", "TATOUILLE", 24));
+        try (Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost/db-name", "user", "pwd");
+             PreparedStatement preparedStatement = connection.prepareStatement(FETCH_ALL_USERS_QUERY)) {
+            ResultSet resultSet = preparedStatement.executeQuery();
+            while (resultSet.next()) {
+                User user = User.builder()
+                        .firstName(resultSet.getString("first_name"))
+                        .lastName(resultSet.getString("last_name"))
+                        .age(resultSet.getInt("age"))
+                        .build();
+                users.add(user);
+            }
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }
         return users;
+
     }
 
     public List<User> addUser(List<User> users, User user) {
-- 
GitLab