-
Notifications
You must be signed in to change notification settings - Fork 0
fix/BU-231: 근태 조회 API attendances 테이블 조회 및 v1 엔드포인트 통일 #129
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
- EmployeeMyService: attendance_records 대신 attendances 테이블 조회 - DashboardService: 금일 출근/지각 인원을 attendances 테이블에서 조회 - AttendanceRepository: findBySiteIdAndSearchDate 메서드 추가 기존에 attendance_records 테이블을 조회하던 로직이 실제 데이터가 저장되는 attendances 테이블을 조회하도록 변경 Refs: BU-231
- EmployeeController: /sites/{siteId}/employees → /v1/sites/{siteId}/employees
- DocumentController: /documents → /v1/documents
Refs: BU-231
개요이 PR은 데이터 계층의 Attendance 엔티티로의 전환을 중심으로 진행되는 대규모 리팩토링이며, API 컨트롤러에 v1 버전 접두사를 추가하고, 테스트 데이터 파일 및 관련 스크립트를 제거합니다. 변경 사항
예상 코드 리뷰 난이도🎯 3 (중간) | ⏱️ ~25분
관련 PR
시
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro ⛔ Files ignored due to path filters (2)
📒 Files selected for processing (15)
💤 Files with no reviewable changes (15)
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/main/java/com/concrete/buildup/domain/site/service/DashboardService.java (1)
203-221: Remove unused methodisContractActiveOnDateThe method at lines 203-221 is not called anywhere in the codebase. It appears to be leftover from the previous AttendanceRecord-based implementation and can be safely deleted.
🧹 Nitpick comments (1)
DEMO-SCENARIO.md (1)
67-79: Markdown 린터 경고 - 테이블 앞뒤 빈 줄 누락정적 분석 도구에서 테이블 앞뒤에 빈 줄이 필요하다고 경고합니다 (MD058). 시연 문서이므로 선택적으로 수정하셔도 됩니다.
예시 수정:
#### 기업 관리자 + | 항목 | 값 | |------|-----| | 아이디 | buildup_corp | | 비밀번호 | Test1234! | | 이름 | 김건설 | + #### 현장 관리자
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (6)
DEMO-SCENARIO.md(1 hunks)src/main/java/com/concrete/buildup/domain/attendance/repository/AttendanceRepository.java(1 hunks)src/main/java/com/concrete/buildup/domain/document/controller/DocumentController.java(1 hunks)src/main/java/com/concrete/buildup/domain/employee/controller/EmployeeController.java(1 hunks)src/main/java/com/concrete/buildup/domain/employee/service/EmployeeMyService.java(6 hunks)src/main/java/com/concrete/buildup/domain/site/service/DashboardService.java(4 hunks)
🧰 Additional context used
🪛 markdownlint-cli2 (0.18.1)
DEMO-SCENARIO.md
67-67: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
74-74: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
101-101: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
123-123: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
144-144: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
165-165: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
181-181: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
195-195: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
215-215: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
228-228: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
240-240: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
269-269: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
284-284: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
296-296: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
309-309: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
324-324: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
339-339: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
362-362: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
382-382: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
393-393: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
405-405: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
412-412: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
424-424: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
443-443: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
456-456: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
469-469: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
481-481: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
499-499: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
513-513: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
527-527: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
547-547: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
562-562: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
574-574: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
594-594: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
604-604: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
620-620: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
642-642: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
665-665: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
679-679: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
691-691: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
709-709: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
719-719: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
731-731: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
740-740: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
752-752: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
767-767: Tables should be surrounded by blank lines
(MD058, blanks-around-tables)
772-772: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
787-787: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
822-822: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
833-833: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
850-850: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
857-857: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
869-869: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
892-892: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
920-920: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
996-996: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
1006-1006: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
1016-1016: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
1026-1026: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
1033-1033: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
1042-1042: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
1048-1048: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
1057-1057: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
1069-1069: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build-and-test
🔇 Additional comments (7)
src/main/java/com/concrete/buildup/domain/attendance/repository/AttendanceRepository.java (1)
95-102: LGTM!Spring Data JPA 명명 규칙을 따르는 새로운 쿼리 메서드입니다.
DashboardService에서 현장별 일일 출석 조회에 적절하게 활용됩니다. 기존 repository 패턴과 일관성 있게 구현되었습니다.src/main/java/com/concrete/buildup/domain/document/controller/DocumentController.java (1)
27-27: LGTM - API 버전 프리픽스 통일
/documents→/v1/documents로 엔드포인트가 변경되었습니다. PR 목표에 따른 API 버전 통일 작업으로,EmployeeController의/v1/sites/{siteId}/employees변경과 일관성을 유지합니다.프론트엔드에서 해당 엔드포인트 경로 업데이트가 필요합니다. 문서 관련 API 호출 경로가 모두 수정되었는지 확인해 주세요.
src/main/java/com/concrete/buildup/domain/employee/controller/EmployeeController.java (1)
33-33: LGTM - API 버전 프리픽스 통일
/sites/{siteId}/employees→/v1/sites/{siteId}/employees로 엔드포인트가 변경되었습니다.DocumentController와 동일하게 v1 프리픽스가 적용되어 API 버전 관리가 통일되었습니다.src/main/java/com/concrete/buildup/domain/site/service/DashboardService.java (1)
177-199: LGTM - AttendanceRecord에서 Attendance로의 마이그레이션출근/지각 인원 계산 로직이 개선되었습니다:
findBySiteIdAndSearchDate를 사용한 효율적인 조회distinct()를 통한 중복 제거로 동일 근로자 중복 카운팅 방지Boolean.TRUE.equals()로 null-safe한 지각 여부 체크기존 N+1 문제가 있던 로직 대비 더 깔끔하고 효율적인 구현입니다.
src/main/java/com/concrete/buildup/domain/employee/service/EmployeeMyService.java (3)
92-127: LGTM - 출퇴근 내역 조회 로직 개선
AttendanceRecord에서Attendance엔티티로의 마이그레이션이 잘 구현되었습니다:
LocalDate기반 조회로 타임스탬프 범위 조회 대비 단순화- Site 정보 일괄 조회로 N+1 문제 방지 유지
- 스트림 기반 변환으로 가독성 향상
147-160: LGTM - 근태 상태 결정 로직
Attendance엔티티의checkOutTime과searchDate를 기반으로 상태를 결정하는 로직이 명확합니다. 퇴근 완료/근무중/미퇴근 상태 구분이 적절합니다.
289-312: LGTM - 금일 근태 조회 로직
Attendance테이블 기반으로 금일 근태를 조회하는 로직이 잘 구현되었습니다. 첫 번째 출근 기록을 반환하는 것은 홈 화면 표시 목적에 적합합니다.
- 테스트 데이터 SQL 파일 삭제 - 테스트 스크립트 및 로그 파일 삭제 - 임시 문서 파일 삭제
Pull Request
📋 Jira Issue
📝 변경 사항 요약
주요 변경사항
attendances테이블을 조회하도록 수정attendances테이블을 조회하도록 수정/v1prefix 통일🎯 변경 목적
문제: 얼굴인식 출퇴근 시스템은
attendances테이블에 저장하지만, 근로자 본인 근태 조회 및 대시보드는attendance_records테이블을 조회하여 데이터가 표시되지 않는 버그가 있었음해결: 모든 근태 조회 로직이 실제 데이터가 저장되는
attendances테이블을 조회하도록 수정🔍 변경 내역 상세
버그 수정 (Bug Fixes)
attendance_records→attendances테이블 조회로 변경attendance_records→attendances테이블 조회로 변경Attendance.isLate필드 기반으로 실제 계산리팩토링 (Refactoring)
/sites/{siteId}/employees→/v1/sites/{siteId}/employees/documents→/v1/documentsfindBySiteIdAndSearchDate()메서드 추가🧪 테스트 방법
단위 테스트
수동 테스트
GET /v1/employees/me/attendance호출 → 얼굴인식 출퇴근 기록 표시 확인GET /v1/employees/me/home호출 → 금일 근태 정보 표시 확인GET /v1/sites/{siteId}/dashboard호출 → 금일 출근/지각 인원 표시 확인API 테스트 예시
Breaking Changes 설명:
EmployeeController엔드포인트 변경:/sites/{siteId}/employees→/v1/sites/{siteId}/employeesDocumentController엔드포인트 변경:/documents→/v1/documents🔗 의존성 변경
🗄️ 데이터베이스 변경
✅ 체크리스트
코드 품질
테스트
./gradlew clean build)보안
성능
문서
Git
Refs: BU-231)📌 리뷰어에게
attendance_records테이블은 현재 어디서도 사용되지 않음 (추후 삭제 또는 용도 재정의 필요)Summary by CodeRabbit
릴리스 노트
API 변경사항
/documents→/v1/documents/sites/{siteId}/employees→/v1/sites/{siteId}/employees개선사항
문서 정리
✏️ Tip: You can customize this high-level summary in your review settings.