diff --git a/back-skeleton/pom.xml b/back-skeleton/pom.xml index 6621302882fbfa0a590f8822b56e2806c602417a..d63e5302b76f69ae97195623daf5e7439bee2e5c 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 0000000000000000000000000000000000000000..3b12b1eedb6ddad993baec07dcc574e0c8932b13 --- /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 0000000000000000000000000000000000000000..f82a41cedae018c6e0be7afa2f593530d65d4f07 --- /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 a420a6951fd0eed71c043f84ec0732a0746f95fc..c0ed9abf02c1eb6ee7cf45ad79bad5797fdcfe45 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 6224e27fd4a751d23a6bb84fd9471d3c132ed616..57a2e8afd6037730b5f1acb106ad248c27e27bde 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 af85a479e153a086545282eb9a47ea6f388bce4e..7193fb907d30ffe27ba9ad925273f98447c05851 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 0000000000000000000000000000000000000000..e63d921b3a4e79fff3a9256b029a31f8f3acbfb8 --- /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); + } +}