Skip to content

Commit cebec41

Browse files
committed
fix(core-attendance): HR 리드 권한 확대
1 parent 48e7866 commit cebec41

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

src/main/java/inha/gdgoc/domain/core/attendance/controller/CoreAttendanceController.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public ResponseEntity<ApiResponse<DateListResponse, Void>> deleteDate(@PathVaria
6868
/* ===== 팀 목록 (리드=본인 팀만 / 관리자=전체) ===== */
6969
@GetMapping("/teams")
7070
public ResponseEntity<ApiResponse<List<TeamResponse>, PageMeta>> getTeams(@AuthenticationPrincipal CustomUserDetails me) {
71-
List<TeamResponse> list = (me.getRole() == UserRole.LEAD) ? service.getTeamsForLead(requiredTeamFrom(me)) : service.getTeamsForOrganizerOrAdmin();
71+
List<TeamResponse> list = (me.getRole() == UserRole.LEAD && me.getTeam() != TeamType.HR) ? service.getTeamsForLead(requiredTeamFrom(me)) : service.getTeamsForOrganizerOrAdmin();
7272

7373
var page = new PageImpl<>(list, PageRequest.of(0, Math.max(1, list.size()), Sort.by(Sort.Direction.DESC, "createdAt")), list.size());
7474
return ResponseEntity.ok(ApiResponse.ok(CoreAttendanceMessage.TEAM_LIST_RETRIEVED_SUCCESS, list, PageMeta.of(page)));
@@ -79,7 +79,7 @@ public ResponseEntity<ApiResponse<List<TeamResponse>, PageMeta>> getTeams(@Authe
7979
@GetMapping("/{date}/members")
8080
public ResponseEntity<ApiResponse<List<Map<String, Object>>, Void>> membersOfMeeting(@AuthenticationPrincipal CustomUserDetails me, @PathVariable @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date, @RequestParam(required = false) TeamType team // 관리자만 사용, 리드는 무시
8181
) {
82-
TeamType effectiveTeam = (me.getRole() == UserRole.LEAD) ? requiredTeamFrom(me) : team;
82+
TeamType effectiveTeam = (me.getRole() == UserRole.LEAD && me.getTeam() != TeamType.HR) ? requiredTeamFrom(me) : team;
8383
var list = service.getMembersWithPresence(date.toString(), effectiveTeam);
8484
// list 원소 예시: { "userId": "123", "name": "홍길동", "present": true, "lastModifiedAt": "..." }
8585
return ResponseEntity.ok(ApiResponse.ok(CoreAttendanceMessage.TEAM_LIST_RETRIEVED_SUCCESS, list));
@@ -92,7 +92,7 @@ public ResponseEntity<ApiResponse<Map<String, Object>, Void>> saveAttendanceSnap
9292
var userIds = req.safeUserIds();
9393

9494
// LEAD → 본인 팀 검증
95-
if (me.getRole() == UserRole.LEAD) {
95+
if (me.getRole() == UserRole.LEAD && me.getTeam() != TeamType.HR) {
9696
TeamType myTeam = requiredTeamFrom(me);
9797
var validation = service.filterUserIdsNotInTeam(myTeam, userIds);
9898
if (validation.validIds().isEmpty()) {
@@ -110,14 +110,14 @@ public ResponseEntity<ApiResponse<Map<String, Object>, Void>> saveAttendanceSnap
110110
/* ===== 날짜 요약(JSON) ===== */
111111
@GetMapping("/{date}/summary")
112112
public ResponseEntity<ApiResponse<DaySummaryResponse, Void>> summary(@AuthenticationPrincipal CustomUserDetails me, @PathVariable @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date, @RequestParam(required = false) TeamType team) {
113-
DaySummaryResponse body = (me.getRole() == UserRole.LEAD) ? service.summary(date.toString(), requiredTeamFrom(me)) : service.summary(date.toString(), team);
113+
DaySummaryResponse body = (me.getRole() == UserRole.LEAD && me.getTeam() != TeamType.HR) ? service.summary(date.toString(), requiredTeamFrom(me)) : service.summary(date.toString(), team);
114114
return ResponseEntity.ok(ApiResponse.ok(CoreAttendanceMessage.SUMMARY_RETRIEVED_SUCCESS, body));
115115
}
116116

117117
/* ===== 날짜 요약(CSV) ===== */
118118
@GetMapping(value = "/{date}/summary.csv", produces = "text/csv; charset=UTF-8")
119119
public ResponseEntity<String> summaryCsv(@AuthenticationPrincipal CustomUserDetails me, @PathVariable @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date, @RequestParam(required = false) TeamType team) {
120-
TeamType effective = (me.getRole() == UserRole.LEAD) ? requiredTeamFrom(me) : team;
120+
TeamType effective = (me.getRole() == UserRole.LEAD && me.getTeam() != TeamType.HR) ? requiredTeamFrom(me) : team;
121121
String csv = service.buildSummaryCsv(date.toString(), effective); // 서비스에 구현
122122
return ResponseEntity.ok()
123123
.header("Content-Disposition", "attachment; filename=\"attendance-" + date + ".csv\"")

0 commit comments

Comments
 (0)