From 2aee975756ae708ab6ec604523959e9c06d648cf Mon Sep 17 00:00:00 2001
From: thib <thibault.capt@hes-so.ch>
Date: Thu, 20 Feb 2025 18:17:02 +0100
Subject: [PATCH] (feat): finish simple backend

---
 .../backend/controller/TodoController.java    | 31 ++++++++++++++++---
 .../{entity/TodoEntity.java => Todo.java}     | 16 ++++++----
 .../com/hepia/backend/domain/model/Todo.java  | 17 ----------
 .../backend/repository/TodoRepository.java    |  6 ++++
 4 files changed, 42 insertions(+), 28 deletions(-)
 rename todo-workspace/backend/src/main/java/com/hepia/backend/domain/{entity/TodoEntity.java => Todo.java} (68%)
 delete mode 100644 todo-workspace/backend/src/main/java/com/hepia/backend/domain/model/Todo.java
 create mode 100644 todo-workspace/backend/src/main/java/com/hepia/backend/repository/TodoRepository.java

diff --git a/todo-workspace/backend/src/main/java/com/hepia/backend/controller/TodoController.java b/todo-workspace/backend/src/main/java/com/hepia/backend/controller/TodoController.java
index 88d8bea..408aeea 100644
--- a/todo-workspace/backend/src/main/java/com/hepia/backend/controller/TodoController.java
+++ b/todo-workspace/backend/src/main/java/com/hepia/backend/controller/TodoController.java
@@ -1,17 +1,38 @@
 package com.hepia.backend.controller;
 
+import com.hepia.backend.domain.Todo;
+import com.hepia.backend.repository.TodoRepository;
 import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+import static org.springframework.http.HttpStatus.CREATED;
 
 @RestController
 @RequestMapping("/todos")
 @RequiredArgsConstructor
 public class TodoController {
+    private final TodoRepository todoRepository;
 
     @GetMapping
-    public String getTodos() {
-        return "Hello World!";
+    public ResponseEntity<List<Todo>> getAll() {
+        List<Todo> todos = todoRepository.findAll();
+        return ResponseEntity.ok(todos);
+    }
+
+    @PostMapping
+    public ResponseEntity<Todo> create(@RequestBody Todo todo) {
+        Todo saved = todoRepository.save(todo);
+        return ResponseEntity.status(CREATED).body(saved);
+    }
+
+    @DeleteMapping("/{id}")
+    public ResponseEntity<Void> delete(@PathVariable Long id) {
+        todoRepository.deleteById(id);
+        return ResponseEntity.noContent().build();
     }
 }
diff --git a/todo-workspace/backend/src/main/java/com/hepia/backend/domain/entity/TodoEntity.java b/todo-workspace/backend/src/main/java/com/hepia/backend/domain/Todo.java
similarity index 68%
rename from todo-workspace/backend/src/main/java/com/hepia/backend/domain/entity/TodoEntity.java
rename to todo-workspace/backend/src/main/java/com/hepia/backend/domain/Todo.java
index c56c0c5..f720a89 100644
--- a/todo-workspace/backend/src/main/java/com/hepia/backend/domain/entity/TodoEntity.java
+++ b/todo-workspace/backend/src/main/java/com/hepia/backend/domain/Todo.java
@@ -1,20 +1,24 @@
-package com.hepia.backend.domain.entity;
+package com.hepia.backend.domain;
 
 import jakarta.persistence.*;
 import lombok.*;
+import org.hibernate.annotations.CreationTimestamp;
 
 @Entity
-@Getter
-@Setter
-@Builder
+@Table(name = "todos")
+@Data
 @AllArgsConstructor
 @NoArgsConstructor
-@Table(name = "todos")
-public class TodoEntity {
+@Builder
+public class Todo {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
+
     private String name;
+
     private boolean completed;
+
+    @CreationTimestamp
     private String createdAt;
 }
diff --git a/todo-workspace/backend/src/main/java/com/hepia/backend/domain/model/Todo.java b/todo-workspace/backend/src/main/java/com/hepia/backend/domain/model/Todo.java
deleted file mode 100644
index 473b54c..0000000
--- a/todo-workspace/backend/src/main/java/com/hepia/backend/domain/model/Todo.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.hepia.backend.domain.model;
-
-import lombok.*;
-
-import java.time.LocalDateTime;
-
-@Getter
-@Setter
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-public class Todo {
-    private Long id;
-    private String name;
-    private boolean completed;
-    private LocalDateTime createdAt;
-}
diff --git a/todo-workspace/backend/src/main/java/com/hepia/backend/repository/TodoRepository.java b/todo-workspace/backend/src/main/java/com/hepia/backend/repository/TodoRepository.java
new file mode 100644
index 0000000..d8779a8
--- /dev/null
+++ b/todo-workspace/backend/src/main/java/com/hepia/backend/repository/TodoRepository.java
@@ -0,0 +1,6 @@
+package com.hepia.backend.repository;
+
+import com.hepia.backend.domain.Todo;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface TodoRepository extends JpaRepository<Todo, Long> {}
-- 
GitLab