From e9ca6193d0d0b70a7885fdcfe6f03cce0e4cae9f Mon Sep 17 00:00:00 2001
From: Laurine <lenetlaurine@gmail.com>
Date: Mon, 11 Sep 2023 18:44:07 +0200
Subject: [PATCH] add controllers

---
 back-skeleton/pom.xml                         |  6 ++++
 .../takima/backskeleton/DAO/StudentDao.java   | 14 ++++++++
 .../controllers/StudentController.java        | 33 +++++++++++++++++
 .../takima/backskeleton/models/Course.java    | 18 ++++++----
 .../com/takima/backskeleton/models/Major.java |  7 +++-
 .../takima/backskeleton/models/Student.java   |  9 +++--
 .../backskeleton/services/StudentService.java | 35 +++++++++++++++++++
 7 files changed, 110 insertions(+), 12 deletions(-)
 create mode 100644 back-skeleton/src/main/java/com/takima/backskeleton/DAO/StudentDao.java
 create mode 100644 back-skeleton/src/main/java/com/takima/backskeleton/controllers/StudentController.java
 create mode 100644 back-skeleton/src/main/java/com/takima/backskeleton/services/StudentService.java

diff --git a/back-skeleton/pom.xml b/back-skeleton/pom.xml
index 6621302..d63e530 100644
--- a/back-skeleton/pom.xml
+++ b/back-skeleton/pom.xml
@@ -16,6 +16,7 @@
 	<properties>
 		<java.version>17</java.version>
 		<lombok.version>1.18.20</lombok.version>
+		<springdoc.version>2.2.0</springdoc.version>
 	</properties>
 	<dependencies>
 		<dependency>
@@ -43,6 +44,11 @@
 			<version>${lombok.version}</version>
 			<scope>provided</scope>
 		</dependency>
+		<dependency>
+			<groupId>org.springdoc</groupId>
+			<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
+			<version>${springdoc.version}</version>
+		</dependency>
 	</dependencies>
 
 	<build>
diff --git a/back-skeleton/src/main/java/com/takima/backskeleton/DAO/StudentDao.java b/back-skeleton/src/main/java/com/takima/backskeleton/DAO/StudentDao.java
new file mode 100644
index 0000000..3b12b1e
--- /dev/null
+++ b/back-skeleton/src/main/java/com/takima/backskeleton/DAO/StudentDao.java
@@ -0,0 +1,14 @@
+package com.takima.backskeleton.DAO;
+
+import com.takima.backskeleton.models.Student;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface StudentDao extends JpaRepository<Student, Long> {
+    @Query("SELECT s FROM Student s JOIN s.courses c WHERE c.id= :courseId AND s.major.id = :majorId ")
+    List<Student> findByMajorIdAndCourseId(int majorId, int courseId);
+}
diff --git a/back-skeleton/src/main/java/com/takima/backskeleton/controllers/StudentController.java b/back-skeleton/src/main/java/com/takima/backskeleton/controllers/StudentController.java
new file mode 100644
index 0000000..f82a41c
--- /dev/null
+++ b/back-skeleton/src/main/java/com/takima/backskeleton/controllers/StudentController.java
@@ -0,0 +1,33 @@
+package com.takima.backskeleton.controllers;
+
+import com.takima.backskeleton.models.Student;
+import com.takima.backskeleton.services.StudentService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@CrossOrigin
+@RequestMapping("students")
+@RestController
+@RequiredArgsConstructor
+public class StudentController {
+    private final StudentService studentService;
+    @GetMapping("")
+    public List<Student> listStudents(@RequestParam(required = false) Integer majorId, @RequestParam(required = false) Integer courseId) {
+        if (majorId != null && courseId !=null) {
+            return studentService.searchByMajorAndCourse(majorId, courseId);
+        }
+        return studentService.findAll();
+    }
+
+    @DeleteMapping("/{id}")
+    public void deleteStudent(@PathVariable Long id) {
+        studentService.deleteById(id);
+    }
+
+    @PostMapping("")
+    public void addStudent(@RequestBody Student student) {
+        studentService.addStudent(student);
+    }
+}
diff --git a/back-skeleton/src/main/java/com/takima/backskeleton/models/Course.java b/back-skeleton/src/main/java/com/takima/backskeleton/models/Course.java
index a420a69..c0ed9ab 100644
--- a/back-skeleton/src/main/java/com/takima/backskeleton/models/Course.java
+++ b/back-skeleton/src/main/java/com/takima/backskeleton/models/Course.java
@@ -1,19 +1,25 @@
 package com.takima.backskeleton.models;
 
-import jakarta.persistence.Entity;
-import jakarta.persistence.GeneratedValue;
-import jakarta.persistence.GenerationType;
-import jakarta.persistence.Id;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
+import jakarta.persistence.*;
 import lombok.Builder;
+import lombok.Getter;
 import lombok.NoArgsConstructor;
 
-@Entity(name = "courses")
+import java.util.List;
+
+@Entity
+@Table(name = "courses")
 @NoArgsConstructor
+@Getter
 public class Course {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
     private String name;
     private Integer hours;
-
+    @ManyToMany(mappedBy = "courses")
+    @JsonIgnore
+    List<Student> students;
 }
diff --git a/back-skeleton/src/main/java/com/takima/backskeleton/models/Major.java b/back-skeleton/src/main/java/com/takima/backskeleton/models/Major.java
index 6224e27..57a2e8a 100644
--- a/back-skeleton/src/main/java/com/takima/backskeleton/models/Major.java
+++ b/back-skeleton/src/main/java/com/takima/backskeleton/models/Major.java
@@ -1,12 +1,16 @@
 package com.takima.backskeleton.models;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import jakarta.persistence.*;
 import lombok.Builder;
+import lombok.Getter;
 import lombok.NoArgsConstructor;
 
 import java.util.List;
 
-@Entity(name = "majors")
+@Entity
+@Table(name = "majors")
+@Getter
 @NoArgsConstructor
 public class Major {
     @Id
@@ -15,6 +19,7 @@ public class Major {
     private String name;
     private String description;
     @OneToMany(mappedBy = "major")
+    @JsonIgnore
     private List<Student> students;
 
 }
diff --git a/back-skeleton/src/main/java/com/takima/backskeleton/models/Student.java b/back-skeleton/src/main/java/com/takima/backskeleton/models/Student.java
index af85a47..7193fb9 100644
--- a/back-skeleton/src/main/java/com/takima/backskeleton/models/Student.java
+++ b/back-skeleton/src/main/java/com/takima/backskeleton/models/Student.java
@@ -1,12 +1,14 @@
 package com.takima.backskeleton.models;
 
 import jakarta.persistence.*;
+import lombok.Getter;
 
 import java.time.Instant;
 import java.util.List;
 
 @Entity
-@Table(name= "students")
+@Table(name = "students")
+@Getter
 public class Student {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -16,7 +18,7 @@ public class Student {
     @Column(name = "last_name")
     private String lastName;
     private Instant birthdate;
-    @ManyToMany(mappedBy="student")
+    @ManyToMany
     @JoinTable(
             name = "student_course",
             joinColumns = @JoinColumn(name = "student_id"),
@@ -74,7 +76,4 @@ public class Student {
             return new Student(this);
         }
     }
-
-
-
 }
diff --git a/back-skeleton/src/main/java/com/takima/backskeleton/services/StudentService.java b/back-skeleton/src/main/java/com/takima/backskeleton/services/StudentService.java
new file mode 100644
index 0000000..e63d921
--- /dev/null
+++ b/back-skeleton/src/main/java/com/takima/backskeleton/services/StudentService.java
@@ -0,0 +1,35 @@
+package com.takima.backskeleton.services;
+
+import com.takima.backskeleton.DAO.StudentDao;
+import com.takima.backskeleton.models.Student;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Component
+@RequiredArgsConstructor
+public class StudentService {
+    private final StudentDao studentDao;
+
+    public List<Student> findAll() {
+        Iterable<Student> it = studentDao.findAll();
+        List <Student> users = new ArrayList<>();
+        it.forEach(users::add);
+        return users ;
+    }
+
+    public void deleteById(Long id) {
+        studentDao.deleteById(id);
+    }
+
+    public void addStudent(Student student) {
+        studentDao.save(student);
+
+    }
+
+    public List<Student> searchByMajorAndCourse(int majorId, int courseId) {
+        return studentDao.findByMajorIdAndCourseId(majorId, courseId);
+    }
+}
-- 
GitLab