Skip to content

Commit

Permalink
Feature: 세션 수정 시 기존 출결이 존재하지 않는 경우 새로 생성 (#135)
Browse files Browse the repository at this point in the history
* feat: 세션 수정 시 기존 출결 객체가 존재하지 않으면 생성

* feat: 세션 세부 정보 반환 시 위경도 값 반환

* refactor: 디테일 반환 메서드명 변경
  • Loading branch information
Youthhing authored Aug 22, 2024
1 parent c585f6c commit 0f35afc
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public ResponseEntity<Void> updateAttendance(@RequestBody @Valid UpdateAttendanc
@Operation(summary = "세션 시간 반환 API")
@GetMapping("/info")
public ResponseEntity<AttendanceTimeResponse> findAttendanceTimeInfo(@RequestParam("sessionId") Long sessionId) {
return ResponseEntity.status(HttpStatus.OK).body(attendanceService.findAttendanceTimeInfo(sessionId));
return ResponseEntity.status(HttpStatus.OK).body(attendanceService.getAttendanceDetailInfo(sessionId));
}

@Operation(summary = "회원 출결사항 기간 단위 조회 API")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
package org.cotato.csquiz.api.attendance.dto;

import java.time.LocalDateTime;
import java.time.LocalTime;
import org.cotato.csquiz.domain.attendance.embedded.Location;
import org.cotato.csquiz.domain.attendance.entity.Attendance;

public record AttendanceTimeResponse(
Long sessionId,
LocalTime attendanceDeadLine,
LocalTime lateDeadLine
LocalTime lateDeadLine,
Location location
) {
public static AttendanceTimeResponse of(Long sessionId, LocalDateTime attendanceDeadLine, LocalDateTime lateDeadLine) {

public static AttendanceTimeResponse from(Attendance attendance) {
return new AttendanceTimeResponse(
sessionId,
attendanceDeadLine.toLocalTime(),
lateDeadLine.toLocalTime()
attendance.getSessionId(),
attendance.getAttendanceDeadLine().toLocalTime(),
attendance.getLateDeadLine().toLocalTime(),
attendance.getLocation()
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,10 @@ public AttendancesResponse findAttendancesByGenerationId(final Long generationId
}

@Transactional(readOnly = true)
public AttendanceTimeResponse findAttendanceTimeInfo(Long sessionId) {
Attendance findAttendance = attendanceRepository.findBySessionId(sessionId)
public AttendanceTimeResponse getAttendanceDetailInfo(final Long sessionId) {
Attendance attendance = attendanceRepository.findBySessionId(sessionId)
.orElseThrow(() -> new EntityNotFoundException("해당 출석을 찾을 수 없습니다"));

return AttendanceTimeResponse.of(sessionId,
findAttendance.getAttendanceDeadLine(),
findAttendance.getLateDeadLine());
return AttendanceTimeResponse.from(attendance);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,9 @@ public void updateSession(UpdateSessionRequest request) {

public void updateSessionDate(Session session, LocalDate newDate, AttendanceDeadLineDto newDeadline) {
Attendance findAttendance = attendanceRepository.findBySessionId(session.getId())
.orElseThrow(() -> new EntityNotFoundException("해당 세션의 출석이 존재하지 않습니다"));
.orElseGet(() -> Attendance.builder()
.session(session)
.build());


// 날짜가 바뀌지 않았고, 출결 시간이 모두 동일한 경우
Expand All @@ -144,6 +146,7 @@ public void updateSessionDate(Session session, LocalDate newDate, AttendanceDead
LocalDateTime newLateDeadline = LocalDateTime.of(newDate, newDeadline.lateDeadLine());
findAttendance.updateDeadLine(newAttendanceDeadline, newLateDeadline);

attendanceRepository.save(findAttendance);
attendanceRecordService.updateAttendanceStatus(findAttendance);
}

Expand Down

0 comments on commit 0f35afc

Please sign in to comment.