diff --git a/src/main/java/classfit/example/classfit/scoreReport/domain/ScoreReport.java b/src/main/java/classfit/example/classfit/scoreReport/domain/ScoreReport.java index 48550e81..26d94211 100644 --- a/src/main/java/classfit/example/classfit/scoreReport/domain/ScoreReport.java +++ b/src/main/java/classfit/example/classfit/scoreReport/domain/ScoreReport.java @@ -15,6 +15,7 @@ import jakarta.persistence.Table; import java.time.LocalDate; import lombok.AccessLevel; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @@ -23,6 +24,8 @@ @Table(name = "score_report") @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter +@Builder +@AllArgsConstructor public class ScoreReport extends BaseEntity { @Id @@ -61,21 +64,11 @@ public class ScoreReport extends BaseEntity { @Column(name = "include_average") private Boolean includeAverage; + @Column(name = "report_created_by") + private String reportCreatedBy; + - @Builder - public ScoreReport(SubClass subClass, MainClass mainClass, String reportName, Student student, - String overallOpinion, LocalDate startDate, - LocalDate endDate,boolean includeAverage) { - this.subClass = subClass; - this.mainClass = mainClass; - this.reportName = reportName; - this.student = student; - this.overallOpinion = overallOpinion; - this.startDate = startDate; - this.endDate = endDate; - this.includeAverage = includeAverage; - } public void updateStudentOpinion(String studentOpinion) { this.studentOpinion = studentOpinion; diff --git a/src/main/java/classfit/example/classfit/scoreReport/domain/ScoreReportRepository.java b/src/main/java/classfit/example/classfit/scoreReport/domain/ScoreReportRepository.java index 87429404..2a7599ae 100644 --- a/src/main/java/classfit/example/classfit/scoreReport/domain/ScoreReportRepository.java +++ b/src/main/java/classfit/example/classfit/scoreReport/domain/ScoreReportRepository.java @@ -14,34 +14,40 @@ public interface ScoreReportRepository extends JpaRepository { @Query("SELECT new classfit.example.classfit.scoreReport.dto.process.ReportExam(" + - "e.id, e.examPeriod, e.mainClass.mainClassName, e.subClass.subClassName, e.examName,e.createdAt) " + + "e.id, e.examPeriod, e.mainClass.mainClassName, e.subClass.subClassName, e.examName, e.createdAt) " + "FROM Exam e " + "WHERE FUNCTION('DATE', e.createdAt) BETWEEN :startDate AND :endDate " + "AND e.mainClass.id = :mainClassId " + "AND e.subClass.id = :subClassId " + + "AND e.mainClass.academy.id = :academyId " + "ORDER BY e.createdAt ASC") List findExamsByCreatedAtBetween( @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate, @Param("mainClassId") Long mainClassId, - @Param("subClassId") Long subClassId); + @Param("subClassId") Long subClassId, + @Param("academyId") Long academyId); @Query(""" SELECT sr FROM ScoreReport sr WHERE sr.mainClass.id = :mainClassId AND sr.subClass.id = :subClassId -""") - List findAllReportsByMainClassAndSubClass(@Param("mainClassId") Long mainClassId, - @Param("subClassId") Long subClassId); - + AND sr.mainClass.academy.id = :academyId + """) + List findAllReportsByMainClassAndSubClass( + @Param("mainClassId") Long mainClassId, + @Param("subClassId") Long subClassId, + @Param("academyId") Long academyId); - @Query("SELECT sr FROM ScoreReport sr WHERE sr.id = :studentReportId") - Optional findByStudentReportId(@Param("studentReportId") Long studentReportId); + @Query("SELECT sr FROM ScoreReport sr WHERE sr.id = :studentReportId " + + "AND sr.mainClass.academy.id = :academyId") + Optional findByStudentReportId( + @Param("studentReportId") Long studentReportId, + @Param("academyId") Long academyId); @Query("SELECT r FROM ScoreReport r " + - "WHERE r.mainClass.academy = :academy") - List findAllByAcademy(@Param("academy") Academy academy); - + "WHERE r.mainClass.academy.id = :academyId") + List findAllByAcademy(@Param("academyId") Long academyId); } diff --git a/src/main/java/classfit/example/classfit/scoreReport/dto/request/CreateReportRequest.java b/src/main/java/classfit/example/classfit/scoreReport/dto/request/CreateReportRequest.java index 4a39c4e6..66920baa 100644 --- a/src/main/java/classfit/example/classfit/scoreReport/dto/request/CreateReportRequest.java +++ b/src/main/java/classfit/example/classfit/scoreReport/dto/request/CreateReportRequest.java @@ -2,6 +2,7 @@ import classfit.example.classfit.category.domain.MainClass; import classfit.example.classfit.category.domain.SubClass; +import classfit.example.classfit.member.domain.Member; import classfit.example.classfit.scoreReport.domain.ScoreReport; import classfit.example.classfit.student.domain.Student; import jakarta.validation.constraints.NotNull; @@ -17,13 +18,14 @@ public record CreateReportRequest(Long mainClassId, Long subClassId, String repo @NotNull(message = "종합 의견을 입력해주세요.") String overallOpinion) { - public ScoreReport toEntity(SubClass subClass, MainClass mainClass,Student student) { + public ScoreReport toEntity(SubClass subClass, MainClass mainClass,Student student, Member member) { return ScoreReport.builder() .subClass(subClass) .mainClass(mainClass) .student(student) .reportName(reportName) .overallOpinion(overallOpinion) + .reportCreatedBy(member.getName()) .build(); } } diff --git a/src/main/java/classfit/example/classfit/scoreReport/dto/response/CreateReportResponse.java b/src/main/java/classfit/example/classfit/scoreReport/dto/response/CreateReportResponse.java index d8cab7ce..fba7295f 100644 --- a/src/main/java/classfit/example/classfit/scoreReport/dto/response/CreateReportResponse.java +++ b/src/main/java/classfit/example/classfit/scoreReport/dto/response/CreateReportResponse.java @@ -9,6 +9,6 @@ public record CreateReportResponse( boolean includeAverage ,Long mainClassId, Long subClassId, List studentList, String reportName, LocalDate startDate, LocalDate endDate, - List examIdList, String overallOpinion) { + List examIdList, String overallOpinion,String reportCreatedBy) { } diff --git a/src/main/java/classfit/example/classfit/scoreReport/dto/response/FindAllReportResponse.java b/src/main/java/classfit/example/classfit/scoreReport/dto/response/FindAllReportResponse.java index 39371ac5..1429d17a 100644 --- a/src/main/java/classfit/example/classfit/scoreReport/dto/response/FindAllReportResponse.java +++ b/src/main/java/classfit/example/classfit/scoreReport/dto/response/FindAllReportResponse.java @@ -3,7 +3,7 @@ import java.time.LocalDate; public record FindAllReportResponse(Long studentReportId, Long studentId, String studentName, - String reportName, String memberName, + String reportName, String ReportCreatedByName, LocalDate createAt) { } diff --git a/src/main/java/classfit/example/classfit/scoreReport/dto/response/FindReportResponse.java b/src/main/java/classfit/example/classfit/scoreReport/dto/response/FindReportResponse.java index 462e359e..3bf2e3b1 100644 --- a/src/main/java/classfit/example/classfit/scoreReport/dto/response/FindReportResponse.java +++ b/src/main/java/classfit/example/classfit/scoreReport/dto/response/FindReportResponse.java @@ -3,7 +3,7 @@ import java.time.LocalDate; public record FindReportResponse(Long studentReportId, Long studentId, String studentName, - String reportName, String memberName, + String reportName, String reportCreatedByName, LocalDate createAt) { } diff --git a/src/main/java/classfit/example/classfit/scoreReport/service/ScoreReportService.java b/src/main/java/classfit/example/classfit/scoreReport/service/ScoreReportService.java index cd73459c..1301c3e2 100644 --- a/src/main/java/classfit/example/classfit/scoreReport/service/ScoreReportService.java +++ b/src/main/java/classfit/example/classfit/scoreReport/service/ScoreReportService.java @@ -83,16 +83,7 @@ public CreateReportResponse createReport(@AuthMember Member member, for (ClassStudent classStudent : studentsInSubClass) { Student student = classStudent.getStudent(); - ScoreReport report = ScoreReport.builder() - .mainClass(mainClass) - .subClass(subClass) - .includeAverage(request.includeAverage()) - .student(student) - .reportName(request.reportName()) - .overallOpinion(request.overallOpinion()) - .startDate(request.startDate()) - .endDate(request.endDate()) - .build(); + ScoreReport report = request.toEntity(subClass, mainClass, student, member); scoreReportRepository.save(report); allStudents.add(new StudentList(report.getId(), student.getId(), student.getName())); @@ -126,7 +117,7 @@ public List showReportExam(@AuthMember Member member, LocalDate star Long subClassId) { validateAcademy(member, member.getAcademy().getId()); List reports = scoreReportRepository.findExamsByCreatedAtBetween(startDate, - endDate, mainClassId, subClassId); + endDate, mainClassId, subClassId,member.getAcademy().getId()); return reports.stream() .map(report -> new ReportExam( report.examId(), @@ -151,7 +142,7 @@ public List findReport(@AuthMember Member member, Long mainC () -> new ClassfitException("서브 클래스를 찾을 수 없어요.", HttpStatus.NOT_FOUND)); validateAcademy(member, mainClass.getAcademy().getId()); List studentReports = scoreReportRepository.findAllReportsByMainClassAndSubClass( - mainClassId, subClassId); + mainClassId, subClassId,member.getAcademy().getId()); return studentReports.stream() .map(report -> new FindReportResponse( @@ -167,13 +158,12 @@ public List findReport(@AuthMember Member member, Long mainC @Transactional(readOnly = true) public List findAllReport(@AuthMember Member member) { - Long academyId = member.getAcademy().getId(); Academy academy = academyRepository.findById(academyId) .orElseThrow(() -> new ClassfitException("학원을 찾을 수 없어요.", HttpStatus.NOT_FOUND)); - List scoreReports = scoreReportRepository.findAllByAcademy(academy); + List scoreReports = scoreReportRepository.findAllByAcademy(academyId); return scoreReports.stream() .map(report -> new FindAllReportResponse( @@ -181,13 +171,14 @@ public List findAllReport(@AuthMember Member member) { report.getStudent().getId(), report.getStudent().getName(), report.getReportName(), - report.getMainClass().getAcademy().getMembers().getFirst().getName(), + report.getReportCreatedBy(), report.getCreatedAt().toLocalDate() )) .collect(Collectors.toList()); } + @Transactional public void deleteReport(@AuthMember Member member, Long studentReportId) { validateAcademy(member, member.getAcademy().getId());