From a4487bbe452557c2da4bcd722083672a5b63ab89 Mon Sep 17 00:00:00 2001
From: "quentin.fasler" <quentin.fasler@etu.hesge.ch>
Date: Fri, 9 Feb 2024 23:23:56 +0100
Subject: [PATCH] user

---
 .../demobdd/controller/UserController.java    | 37 +++++++++++++++
 .../java/com/hepia/demobdd/entity/User.java   | 47 +++++++++++++++++++
 .../demobdd/repository/UserRepository.java    | 11 +++++
 src/main/resources/application.properties     |  6 +++
 .../db/migration/V1__Init_user_table.sql      |  5 ++
 src/main/resources/docker-compose.yml         | 22 +++++++++
 6 files changed, 128 insertions(+)
 create mode 100644 src/main/java/com/hepia/demobdd/controller/UserController.java
 create mode 100644 src/main/java/com/hepia/demobdd/entity/User.java
 create mode 100644 src/main/java/com/hepia/demobdd/repository/UserRepository.java
 create mode 100644 src/main/resources/db/migration/V1__Init_user_table.sql
 create mode 100644 src/main/resources/docker-compose.yml

diff --git a/src/main/java/com/hepia/demobdd/controller/UserController.java b/src/main/java/com/hepia/demobdd/controller/UserController.java
new file mode 100644
index 0000000..09f88bc
--- /dev/null
+++ b/src/main/java/com/hepia/demobdd/controller/UserController.java
@@ -0,0 +1,37 @@
+package com.hepia.demobdd.controller;
+
+import com.hepia.demobdd.entity.User;
+import com.hepia.demobdd.repository.UserRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/users")
+public class UserController {
+
+    @Autowired
+    private UserRepository userRepository;
+
+    @GetMapping
+    public List<User> getAllUsers() {
+        return userRepository.findAll();
+    }
+
+    @GetMapping("/{id}")
+    public User getUserById(@PathVariable Long id) {
+        return userRepository.findById(id).orElse(null);
+    }
+
+    @GetMapping("/search")
+    public List<User> getUserByName(@RequestParam String name) {
+        return userRepository.findByName(name);
+    }
+
+    @PostMapping
+    public User createUser(@RequestBody User user) {
+        return userRepository.save(user);
+    }
+
+}
diff --git a/src/main/java/com/hepia/demobdd/entity/User.java b/src/main/java/com/hepia/demobdd/entity/User.java
new file mode 100644
index 0000000..14dc2cf
--- /dev/null
+++ b/src/main/java/com/hepia/demobdd/entity/User.java
@@ -0,0 +1,47 @@
+package com.hepia.demobdd.entity;
+
+import jakarta.persistence.Id;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+
+@Entity
+public class User {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+    private String name;
+    private String email;
+
+    //#region getters
+
+    public Long getId() {
+        return id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+    //#endregion
+
+    //#region setters
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+    //#endregion
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/hepia/demobdd/repository/UserRepository.java b/src/main/java/com/hepia/demobdd/repository/UserRepository.java
new file mode 100644
index 0000000..774ea2c
--- /dev/null
+++ b/src/main/java/com/hepia/demobdd/repository/UserRepository.java
@@ -0,0 +1,11 @@
+package com.hepia.demobdd.repository;
+
+import com.hepia.demobdd.entity.User;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+public interface UserRepository extends JpaRepository<User, Long> {
+    List<User> findByName(String name);
+
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 8b13789..c0a7fae 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1 +1,7 @@
+spring.datasource.url=jdbc:mariadb://localhost:3308/demo-bdd
+spring.datasource.username=root
+spring.datasource.password=root
+spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
 
+spring.flyway.enabled=true
+spring.flyway.baseline-on-migrate=true
\ No newline at end of file
diff --git a/src/main/resources/db/migration/V1__Init_user_table.sql b/src/main/resources/db/migration/V1__Init_user_table.sql
new file mode 100644
index 0000000..36ccb6b
--- /dev/null
+++ b/src/main/resources/db/migration/V1__Init_user_table.sql
@@ -0,0 +1,5 @@
+CREATE TABLE user (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    name VARCHAR(255),
+    email VARCHAR(255)
+);
diff --git a/src/main/resources/docker-compose.yml b/src/main/resources/docker-compose.yml
new file mode 100644
index 0000000..e06a834
--- /dev/null
+++ b/src/main/resources/docker-compose.yml
@@ -0,0 +1,22 @@
+version: '3.1'
+
+services:
+  db:
+    image: mariadb:10.6
+    restart: always
+    environment:
+      MYSQL_ROOT_PASSWORD: root
+    volumes:
+      - mariadb_data:/var/lib/mysql
+      - mariadb_tmp:/tmp
+    ports:
+      - 3308:3306
+
+  phpmyadmin:
+    image: phpmyadmin
+    restart: always
+    ports:
+      - 8082:80
+volumes:
+  mariadb_data:
+  mariadb_tmp:
\ No newline at end of file
-- 
GitLab