Skip to content

Commit

Permalink
24-25-Server-Assignment_04
Browse files Browse the repository at this point in the history
  • Loading branch information
KiwoongKim-1227 committed Nov 7, 2024
1 parent 667d1c2 commit ceed138
Show file tree
Hide file tree
Showing 20 changed files with 80 additions and 130 deletions.
Original file line number Diff line number Diff line change
@@ -1,45 +1,37 @@
package com.example.kiwoong.controller;

import com.example.kiwoong.dto.Enrolment.request.EnrolmentRequestDto;
import com.example.kiwoong.dto.Enrolment.response.EnrolmentInfoResponseDto;
import com.example.kiwoong.dto.Enrolment.response.EnrolmentListResponseDto;
import com.example.kiwoong.service.EnrolmentService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/enrolments")
@RequiredArgsConstructor
@RequestMapping("/enrolment")
public class EnrolmentController {

private final EnrolmentService enrolmentService;

// 수강 신청
@PostMapping("/register")
public ResponseEntity<Void> registerEnrolment(@RequestParam Long studentId, @RequestParam Long coursesId) {
enrolmentService.enrolment(studentId, coursesId);
return ResponseEntity.ok().build(); // 200 OK 응답
@PostMapping
public ResponseEntity<EnrolmentInfoResponseDto> save(@RequestBody EnrolmentRequestDto enrolmentRequestDto){
return new ResponseEntity<>(enrolmentService.save(enrolmentRequestDto), HttpStatus.CREATED);
}

// 강의별 학생 조회
@GetMapping("/students/{coursesId}")
public ResponseEntity<List<EnrolmentInfoResponseDto>> getStudentsByCourses(@PathVariable Long coursesId) {
List<EnrolmentInfoResponseDto> response = enrolmentService.getStudentsByCourses(coursesId);
return ResponseEntity.ok(response); // 학생 리스트 반환
@GetMapping("{id}")
public ResponseEntity<EnrolmentInfoResponseDto> findByEnrolmentId(@PathVariable(name="id") Long id){
return new ResponseEntity<>(enrolmentService.findByEnrolmentId(id), HttpStatus.OK);
}

// 학생별 강의 조회
@GetMapping("/courses/{studentId}")
public ResponseEntity<List<EnrolmentInfoResponseDto>> getCoursesByStudent(@PathVariable Long studentId) {
List<EnrolmentInfoResponseDto> response = enrolmentService.getCoursesByStudent(studentId);
return ResponseEntity.ok(response); // 강의 리스트 반환
@DeleteMapping("{id}")
public ResponseEntity<EnrolmentInfoResponseDto> deleteByEnrolmentId(@PathVariable(name="id") Long id){
enrolmentService.deleteByEnrolmentId(id);
return new ResponseEntity<>(HttpStatus.OK);
}

// 수강 신청 취소
@DeleteMapping("/cancel")
public ResponseEntity<Void> cancelLectureRegistration(@RequestParam Long studentId, @RequestParam Long lectureId) {
enrolmentService.cancelEnrolment(studentId, lectureId);
return ResponseEntity.ok().build(); // 200 OK 응답
@GetMapping
public ResponseEntity<EnrolmentListResponseDto> findAllEnrolmentId(){
return new ResponseEntity<>(enrolmentService.findAllEnrolmentId(), HttpStatus.OK);
}
}
9 changes: 5 additions & 4 deletions Kiwoong/src/main/java/com/example/kiwoong/domain/Courses.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

@Entity
@Getter
@NoArgsConstructor
Expand All @@ -26,9 +29,8 @@ public class Courses {
@Column(name = "courses_room")
private String room;

@ManyToOne
@JoinColumn(name = "student_id")
private Student student;
@OneToMany(mappedBy = "courses", cascade = CascadeType.ALL)
private List<Enrolment> enrolments = new ArrayList<>();

public void update(CoursesRequestDto dto) {
if (dto.getId() != null) {
Expand All @@ -51,6 +53,5 @@ public Courses(Long id, String name, String day, String room, Student student){
this.name = name;
this.day = day;
this.room = room;
this.student = student;
}
}
12 changes: 5 additions & 7 deletions Kiwoong/src/main/java/com/example/kiwoong/domain/Enrolment.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,14 @@ public class Enrolment {
@JoinColumn(name = "student_id")
private Student student;

@Getter
@ManyToOne
@JoinColumn(name = "courses_id")
private Courses courses;

private Enrolment(Student student, Courses courses) {
this.student = student;
this.courses = courses;
}
public static Enrolment of(Student student, Courses courses) {
return new Enrolment(student, courses);
public static Enrolment createEnrolment(Student student, Courses courses) {
Enrolment enrolment = new Enrolment();
enrolment.student = student;
enrolment.courses = courses;
return enrolment;
}
}
11 changes: 7 additions & 4 deletions Kiwoong/src/main/java/com/example/kiwoong/domain/Student.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,13 @@ public class Student {
//fetch는 불러오는 방식 설정
//cascade all은 persist(부모와 자식을 한번에 영속화)와 remove(persist로 저장해놓은 엔티티 제거)를 모두 해줌
//orphanRemoval = true 는 고아 객체를 자동으로 지워줌
@OneToMany(mappedBy = "student", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<Courses> courses = new ArrayList<>();
@OneToMany(mappedBy = "student", cascade = CascadeType.ALL)
private List<Enrolment> enrolments = new ArrayList<>();

public void update(StudentRequestDto dto) {
if (dto.getId() != null) {
this.id = dto.getId();
}
if (dto.getStudentNumber() != null) {
this.studentNumber = dto.getStudentNumber();
}
Expand All @@ -51,11 +54,11 @@ public void update(StudentRequestDto dto) {
}

@Builder
public Student(Long studentNumber, String name, Long age, String major, List<Courses> courses){
public Student(Long id, Long studentNumber, String name, Long age, String major){
this.id = id;
this.studentNumber = studentNumber;
this.name = name;
this.age = age;
this.major = major;
this.courses = courses;
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
package com.example.kiwoong.dto.Enrolment.request;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@Getter
@NoArgsConstructor
public class EnrolmentRequestDto {

private Long studentId;

private Long courseId;

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,39 +16,20 @@
@Builder
public class EnrolmentInfoResponseDto {
private Long enrolmentId;
private Long studentId;
private Long coursesId;
private String studentName;
private Long studentId; // 학생 ID
private String studentName; // 학생 이름
private Long courseId; // 강의 ID
private String courseName;
private List<EnrolmentInfoResponseDto> students;
private List<EnrolmentInfoResponseDto> courses;

public EnrolmentInfoResponseDto(String studentName, Long studentId, String courseName, Long coursesId) {
this.studentName = studentName;
this.studentId = studentId;
this.courseName = courseName;
this.coursesId = coursesId;

}

public EnrolmentInfoResponseDto(List<EnrolmentInfoResponseDto> students, List<EnrolmentInfoResponseDto> courses) {
this.students = students;
this.courses = courses;
}


public static EnrolmentInfoResponseDto from(Student student) {
return new EnrolmentInfoResponseDto(student.getName(), student.getId(), null, null);
}
public static EnrolmentInfoResponseDto from(Student student, Courses courses) {
return new EnrolmentInfoResponseDto(student.getName(), student.getId(), courses.getName(), courses.getId());
}
public static EnrolmentInfoResponseDto from(Enrolment enrolment) {
return EnrolmentInfoResponseDto.builder()
.enrolmentId(enrolment.getId())
.studentId(enrolment.getStudent().getId())
.coursesId(enrolment.getCourses().getId())
.studentName(enrolment.getStudent().getName())
.courseId(enrolment.getCourses().getId())
.courseName(enrolment.getCourses().getName())
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@
@Builder
@AllArgsConstructor
public class CoursesInfoResponseDto {
private Long id;
private String name;
private String day;
private String room;

public static CoursesInfoResponseDto from(Courses courses) {
return CoursesInfoResponseDto.builder()
.id(courses.getId())
.name(courses.getName())
.day(courses.getDay())
.room(courses.getRoom())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,15 @@
@AllArgsConstructor
public class StudentRequestDto {

private Long id;
private Long studentNumber;

private String name;

private Long age;

private String major;

public Student toEntity() {
return Student.builder()
.id(id)
.studentNumber(studentNumber)
.name(name)
.age(age)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,19 @@
@Builder
@AllArgsConstructor
public class StudentInfoResponseDto {
private Long id;
private Long studentNumber;
private String name;
private Long age;
private String major;
private List<Courses> courses;

public static StudentInfoResponseDto from(Student student) {
return StudentInfoResponseDto.builder()
.id(student.getId())
.studentNumber(student.getStudentNumber())
.name(student.getName())
.age(student.getAge())
.major(student.getMajor())
.courses(student.getCourses())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,4 @@
import java.util.List;

public interface CoursesRepository extends JpaRepository<Courses, Long> {
@Query("SELECT c FROM Courses c WHERE c.name = :name")
List<Courses> findCoursesByName(@Param("name") String name);//강의 이름으로 검색

//JPQL로 in절을 사용하였습니다
//@Param은 매개변수가 어떤 컬럼과 매칭될지 정해줌.
@Query("SELECT c FROM Courses c WHERE c.name in :namePart")
List<Courses> findByNameContaining(@Param("name")String namePart); //이름 일부로 검색

//'화'로 검색할 수 도 있고 '화요일'로 검색할 수도 있어 in을 사용했는데 더 좋은 방법이 있을까요?
@Query("SELECT c FROM Courses c WHERE c.day in :dayPart")
List<Courses> findByDayContaining(@Param("day")String dayPart); //날짜로 검색
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package com.example.kiwoong.repository;

import com.example.kiwoong.domain.Enrolment;
import com.example.kiwoong.dto.Enrolment.request.EnrolmentRequestDto;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface EnrolmentRepository extends JpaRepository<Enrolment, Long> {
boolean existsByStudent_IdAndCourses_Id(Long studentId, Long coursesId);
boolean existsByStudent_IdAndCourses_Id(Long studentId, Long courseId);
void deleteByStudent_IdAndCourses_Id(Long studentId, Long coursesId);
List<Enrolment> findByCourses_Id(Long coursesId);

Expand Down
Loading

0 comments on commit ceed138

Please sign in to comment.