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