Conversation
Walkthrough체크인 엔드포인트와 서비스 메서드를 제거하고, 시간 필드를 LocalDateTime에서 LocalTime으로 변경하며, 시간 윈도우를 초 단위(seconds)에서 분 단위(minutes)로 변환합니다. 라운드 기반 체크인 흐름으로의 전환을 완료하고 DTO 필드명을 단순화합니다. Changes
Sequence Diagram(s)sequenceDiagram
participant Client
participant RoundController
participant RoundService
participant DB
Client->>RoundController: POST /rounds/{roundId}/check-in
RoundController->>RoundService: checkInByRound(roundId, userId)
rect rgb(200, 220, 255)
Note over RoundService: 라운드 기반 체크인<br/>(현재 흐름)
RoundService->>DB: 라운드 조회
RoundService->>DB: 출석 확인 (중복 체크)
RoundService->>RoundService: isLate() 판정<br/>(라운드 시작시간 + 5분)
RoundService->>DB: 출석 레코드 저장
end
RoundService-->>RoundController: AttendanceResponse
RoundController-->>Client: 200 OK
sequenceDiagram
participant System
participant AttendanceSession
participant Attendance
Note over System: 세션 시간 모델 변경
rect rgb(255, 230, 200)
Note over AttendanceSession: 기존 (제거됨)<br/>startsAt: LocalDateTime<br/>windowSeconds: Integer (초)
end
rect rgb(200, 255, 220)
Note over AttendanceSession: 신규<br/>defaultStartTime: LocalTime<br/>allowedMinutes: Integer (분)
AttendanceSession->>AttendanceSession: getEndTime()<br/> = defaultStartTime + allowedMinutes
AttendanceSession->>Attendance: isCheckInAvailableForRound(currentTime)
end
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes
Possibly related PRs
Suggested reviewers
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Tip 📝 Customizable high-level summaries are now available in beta!You can now customize how CodeRabbit generates the high-level summary in your pull requests — including its content, structure, tone, and formatting.
Example instruction:
Note: This feature is currently in beta for Pro-tier users, and pricing will be announced later. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
backend/src/main/java/org/sejongisc/backend/attendance/service/AttendanceSessionService.java (1)
87-108: 정렬 순서를 명시적으로 지정하는 것을 권장합니다.주석에는 "생성 순으로 정렬"이라고 명시되어 있지만, 코드는
findAll()만 호출하여 레포지토리의 기본 정렬에 의존하고 있습니다. UI에서 특정 순서를 기대한다면 명시적으로 정렬 기준을 지정하는 것이 좋습니다.다음과 같이 명시적 정렬을 추가할 수 있습니다:
List<AttendanceSession> sessions = attendanceSessionRepository.findAllByOrderByCreatedAtDesc();또는 레포지토리 메서드가 없다면:
List<AttendanceSession> sessions = attendanceSessionRepository.findAll(); sessions.sort((a, b) -> b.getCreatedAt().compareTo(a.getCreatedAt()));
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (8)
backend/src/main/java/org/sejongisc/backend/attendance/controller/AttendanceController.java(0 hunks)backend/src/main/java/org/sejongisc/backend/attendance/dto/AttendanceRoundResponse.java(3 hunks)backend/src/main/java/org/sejongisc/backend/attendance/dto/AttendanceSessionRequest.java(3 hunks)backend/src/main/java/org/sejongisc/backend/attendance/entity/Attendance.java(1 hunks)backend/src/main/java/org/sejongisc/backend/attendance/entity/AttendanceSession.java(3 hunks)backend/src/main/java/org/sejongisc/backend/attendance/service/AttendanceService.java(0 hunks)backend/src/main/java/org/sejongisc/backend/attendance/service/AttendanceSessionService.java(9 hunks)backend/src/test/java/org/sejongisc/backend/attendance/controller/AttendanceRoundControllerTest.java(8 hunks)
💤 Files with no reviewable changes (2)
- backend/src/main/java/org/sejongisc/backend/attendance/service/AttendanceService.java
- backend/src/main/java/org/sejongisc/backend/attendance/controller/AttendanceController.java
🔇 Additional comments (11)
backend/src/test/java/org/sejongisc/backend/attendance/controller/AttendanceRoundControllerTest.java (1)
79-80: DTO 필드명 변경에 맞춰 테스트가 올바르게 업데이트되었습니다.빌더 메서드와 JSON 경로 단언문이 모두 새로운 필드명(
id,date)으로 일관되게 수정되었습니다.Also applies to: 94-95, 128-129, 141-141, 154-155, 162-163, 195-196, 210-210, 322-323
backend/src/main/java/org/sejongisc/backend/attendance/dto/AttendanceRoundResponse.java (2)
71-72: 엔티티-DTO 매핑이 올바르게 구현되었습니다.엔티티의
getRoundId(),getRoundDate()메서드를 새로운 DTO 필드(id,date)에 정확하게 매핑하고 있습니다.
29-29: 공개 API 필드명 변경에 대한 Breaking Change가 확인되었습니다.내부 코드 검증 결과,
AttendanceRoundResponse의 필드명 변경(roundId→id,roundDate→date)이 의도적으로 구현되었으며,fromEntity()메서드에서 엔티티 메서드를 올바르게 매핑하고 있습니다.그러나 이는 여전히 공개 API 소비자에게 영향을 주는 Breaking Change입니다. 이 API를 사용하는 외부 클라이언트(프론트엔드, 외부 서비스 등)가 JSON 응답 필드명 변경을 반영해야 합니다. 다음을 확인해주세요:
- API 버전 관리 전략 (기존 v1 유지 vs 새 v2 사용)
- 클라이언트 마이그레이션 일정 및 공지
- 적절한 API 문서 업데이트
backend/src/main/java/org/sejongisc/backend/attendance/entity/Attendance.java (1)
71-92: 지각 판단 로직이 올바르게 구현되었습니다.라운드 기반과 세션 기반을 모두 지원하는 2단계 fallback 로직이 명확하게 구현되어 있습니다. null 체크도 적절하며, 5분 버퍼가 일관되게 적용되고 있습니다.
backend/src/main/java/org/sejongisc/backend/attendance/service/AttendanceSessionService.java (4)
37-68: 세션 생성 로직이 새로운 필드명을 올바르게 사용합니다.
defaultStartTime과allowedMinutes필드로의 전환이 정확하게 반영되어 있으며, 로깅도 적절합니다.
130-160: 세션 수정 로직이 올바르게 업데이트되었습니다.새로운 필드명으로의 전환이 정확하게 반영되어 있습니다.
278-297: 응답 변환 로직이 올바르게 구현되었습니다.새로운 필드명과 타입 변환이 정확하게 처리되고 있습니다.
115-123: 원본 리뷰 코멘트의 우려는 설계에 반영되어 있으며 부정확합니다.코드 분석 결과:
- 시간 기반 검증이 제거되지 않고 라운드 레벨로 이동되었습니다
AttendanceSessionService라인 112 주석: "현재 체크인 가능한 세션들만 필터링 (라운드 기반)"AttendanceRound.isCheckInAvailable()이 날짜와 시간 검증을 담당합니다AttendanceService의 체크인 로직(라인 79)에서 라운드 시간 검증이 실행됩니다이 구조에서:
- 세션 상태
OPEN= "체크인 가능한 상태" (의도된 의미)- 라운드가 날짜/시간 제약 조건을 관리
- 라인 181 주석에서 "라운드 기반이므로 세션 상태만 변경"이라 명시
따라서 세션이 라운드 없이 OPEN 상태로 유지되어도, 실제 체크인은 라운드의 시간 검증을 통과해야 하므로 원본 코멘트의 우려는 설계에 이미 반영되어 있습니다.
Likely an incorrect or invalid review comment.
backend/src/main/java/org/sejongisc/backend/attendance/dto/AttendanceSessionRequest.java (1)
29-36: 시간 필드가 적절하게 변경되었습니다.
LocalTime타입으로의 변경이 올바르며,@Future제약 조건 제거는 날짜 컨텍스트가 없는 시간 전용 필드에 적합합니다.backend/src/main/java/org/sejongisc/backend/attendance/entity/AttendanceSession.java (2)
30-34: 엔티티 필드가 올바르게 업데이트되었습니다.
defaultStartTime과allowedMinutes로의 변경이 정확하며, 컬럼 매핑도 적절합니다.
61-70: 시간 계산 및 체크인 가능 여부 확인 로직이 올바릅니다.
getEndTime()의 null 처리와isCheckInAvailableForRound()의 시간 비교 로직이 적절하게 구현되어 있습니다.
Summary by CodeRabbit
출석 관리 기능 업데이트
✏️ Tip: You can customize this high-level summary in your review settings.