Skip to content

Commit e0a0313

Browse files
committed
refactor: 어드민용 관리 API 접근 권한 분리
1 parent 77270c1 commit e0a0313

File tree

7 files changed

+192
-81
lines changed

7 files changed

+192
-81
lines changed

src/main/java/dmu/dasom/api/domain/member/controller/MemberController.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import io.swagger.v3.oas.annotations.media.Schema;
1212
import io.swagger.v3.oas.annotations.responses.ApiResponse;
1313
import io.swagger.v3.oas.annotations.responses.ApiResponses;
14+
import io.swagger.v3.oas.annotations.tags.Tag;
1415
import jakarta.validation.Valid;
1516
import lombok.RequiredArgsConstructor;
1617
import org.springframework.http.HttpHeaders;
@@ -21,6 +22,7 @@
2122
@RestController
2223
@RequestMapping("/api")
2324
@RequiredArgsConstructor
25+
@Tag(name = "Member API", description = "회원 관리 API")
2426
public class MemberController {
2527

2628
private final MemberService memberService;

src/main/java/dmu/dasom/api/domain/news/controller/NewsController.java

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import jakarta.validation.Valid;
1313
import java.util.List;
1414

15-
@Tag(name = "NEWS API", description = "뉴스 API")
15+
@Tag(name = "News API", description = "뉴스 API")
1616
@RestController
1717
@RequiredArgsConstructor
1818
@RequestMapping("/api/news")
@@ -32,24 +32,4 @@ public ResponseEntity<NewsResponseDto> getNewsById(@PathVariable @Min(1) Long id
3232
return ResponseEntity.ok(newsService.getNewsById(id));
3333
}
3434

35-
@Operation(summary = "뉴스 등록")
36-
@PostMapping
37-
public ResponseEntity<NewsCreationResponseDto> createNews(@Valid @RequestBody NewsRequestDto requestDto) {
38-
return ResponseEntity.status(201).body(newsService.createNews(requestDto));
39-
}
40-
41-
@Operation(summary = "뉴스 수정")
42-
@PutMapping("/{id}")
43-
public ResponseEntity<NewsResponseDto> updateNews(@PathVariable @Min(1) Long id,
44-
@Valid @RequestBody NewsUpdateRequestDto requestDto) {
45-
return ResponseEntity.ok(newsService.updateNews(id, requestDto));
46-
}
47-
48-
@Operation(summary = "뉴스 삭제")
49-
@DeleteMapping("/{id}")
50-
public ResponseEntity<Void> deleteNews(@PathVariable Long id) {
51-
newsService.deleteNews(id);
52-
return ResponseEntity.ok().build();
53-
}
54-
5535
}

src/main/java/dmu/dasom/api/domain/recruit/controller/RecruitController.java

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import io.swagger.v3.oas.annotations.media.Schema;
1616
import io.swagger.v3.oas.annotations.responses.ApiResponse;
1717
import io.swagger.v3.oas.annotations.responses.ApiResponses;
18+
import io.swagger.v3.oas.annotations.tags.Tag;
1819
import jakarta.validation.Valid;
1920
import lombok.RequiredArgsConstructor;
2021
import org.springframework.http.ResponseEntity;
@@ -27,6 +28,7 @@
2728
@RestController
2829
@RequestMapping("/api/recruit")
2930
@RequiredArgsConstructor
31+
@Tag(name = "Recruit API", description = "부원 모집 API")
3032
public class RecruitController {
3133

3234
private final ApplicantService applicantService;
@@ -84,20 +86,6 @@ public ResponseEntity<ResultCheckResponseDto> checkResult(@ModelAttribute final
8486
return ResponseEntity.ok(applicantService.checkResult(request));
8587
}
8688

87-
// 면접 일정 생성
88-
@Operation(summary = "면접 일정 생성", description = "새로운 면접 일정을 생성합니다.")
89-
@ApiResponses(value = {
90-
@ApiResponse(responseCode = "200", description = "면접 일정 생성 성공"),
91-
@ApiResponse(responseCode = "400", description = "잘못된 요청 데이터")
92-
})
93-
@PostMapping("/interview/schedule")
94-
public ResponseEntity<List<InterviewSlotResponseDto>> createInterviewSlots(@Valid @RequestBody InterviewSlotCreateRequestDto request) {
95-
96-
List<InterviewSlotResponseDto> slots =
97-
interviewService.createInterviewSlots(request.getStartDate(), request.getEndDate(), request.getStartTime(), request.getEndTime());
98-
return ResponseEntity.ok(slots);
99-
}
100-
10189
// 면접 예약
10290
@Operation(summary = "면접 예약", description = "지원자가 특정 면접 슬롯을 예약합니다.")
10391
@ApiResponses(value = {
@@ -128,10 +116,4 @@ public ResponseEntity<List<InterviewSlotResponseDto>> getAllInterviewSlots() {
128116
return ResponseEntity.ok(allSlots);
129117
}
130118

131-
@GetMapping("/interview/applicants")
132-
public ResponseEntity<List<InterviewReservationApplicantResponseDto>> getAllInterviewApplicants() {
133-
List<InterviewReservationApplicantResponseDto> applicants = interviewService.getAllInterviewApplicants();
134-
return ResponseEntity.ok(applicants);
135-
}
136-
137119
}

src/main/java/dmu/dasom/api/global/admin/controller/AdminController.java renamed to src/main/java/dmu/dasom/api/global/admin/controller/AdminApplicantController.java

Lines changed: 9 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@
44
import dmu.dasom.api.domain.applicant.dto.ApplicantResponseDto;
55
import dmu.dasom.api.domain.applicant.dto.ApplicantStatusUpdateRequestDto;
66
import dmu.dasom.api.domain.applicant.service.ApplicantService;
7-
import dmu.dasom.api.domain.recruit.dto.RecruitScheduleModifyRequestDto;
8-
import dmu.dasom.api.domain.recruit.service.RecruitService;
9-
import dmu.dasom.api.domain.email.enums.MailType;
7+
import dmu.dasom.api.domain.google.enums.MailType;
108
import dmu.dasom.api.global.dto.PageResponse;
119

1210
import io.swagger.v3.oas.annotations.Operation;
@@ -16,6 +14,7 @@
1614
import io.swagger.v3.oas.annotations.media.Schema;
1715
import io.swagger.v3.oas.annotations.responses.ApiResponse;
1816
import io.swagger.v3.oas.annotations.responses.ApiResponses;
17+
import io.swagger.v3.oas.annotations.tags.Tag;
1918
import jakarta.validation.Valid;
2019
import jakarta.validation.constraints.Min;
2120
import lombok.RequiredArgsConstructor;
@@ -24,12 +23,12 @@
2423
import org.springframework.web.bind.annotation.*;
2524

2625
@RestController
27-
@RequestMapping("/api/admin")
26+
@RequestMapping("/api/admin/applicants")
2827
@RequiredArgsConstructor
29-
public class AdminController {
28+
@Tag(name = "ADMIN - Applicant API", description = "어드민 지원자 관리 API")
29+
public class AdminApplicantController {
3030

3131
private final ApplicantService applicantService;
32-
private final RecruitService recruitService;
3332

3433
// 지원자 조회
3534
@Operation(summary = "지원자 전체 조회")
@@ -48,7 +47,7 @@ public class AdminController {
4847
)
4948
)
5049
})
51-
@GetMapping("/applicants")
50+
@GetMapping
5251
public ResponseEntity<PageResponse<ApplicantResponseDto>> getApplicants(
5352
@RequestParam(value = "page", defaultValue = "0") @Min(0) final int page
5453
) {
@@ -72,7 +71,7 @@ public ResponseEntity<PageResponse<ApplicantResponseDto>> getApplicants(
7271
)
7372
)
7473
})
75-
@GetMapping("/applicants/{id}")
74+
@GetMapping("/{id}")
7675
public ResponseEntity<ApplicantDetailsResponseDto> getApplicant(@PathVariable("id") @Min(0) final Long id) {
7776
return ResponseEntity.ok(applicantService.getApplicant(id));
7877
}
@@ -94,41 +93,14 @@ public ResponseEntity<ApplicantDetailsResponseDto> getApplicant(@PathVariable("i
9493
)
9594
)
9695
})
97-
@PatchMapping("/applicants/{id}/status")
96+
@PatchMapping("/{id}/status")
9897
public ResponseEntity<ApplicantDetailsResponseDto> updateApplicantStatus(
9998
@PathVariable("id") @Min(0) final Long id,
10099
@Valid @RequestBody final ApplicantStatusUpdateRequestDto request
101100
) {
102101
return ResponseEntity.ok(applicantService.updateApplicantStatus(id, request));
103102
}
104103

105-
// 모집 일정 수정
106-
@Operation(summary = "모집 일정 수정")
107-
@ApiResponses(value = {
108-
@ApiResponse(responseCode = "200", description = "모집 일정 수정 성공"),
109-
@ApiResponse(responseCode = "400", description = "잘못된 요청",
110-
content = @Content(
111-
mediaType = "application/json",
112-
schema = @Schema(implementation = ErrorResponse.class),
113-
examples = {
114-
@ExampleObject(
115-
name = "날짜 형식 오류",
116-
value = "{ \"code\": \"C016\", \"message\": \"날짜 형식이 올바르지 않습니다.\" }"
117-
),
118-
@ExampleObject(
119-
name = "시간 형식 오류",
120-
value = "{ \"code\": \"C017\", \"message\": \"시간 형식이 올바르지 않습니다.\" }"
121-
)
122-
}
123-
)
124-
)
125-
})
126-
@PatchMapping("/recruit/schedule")
127-
public ResponseEntity<Void> modifyRecruitSchedule(@Valid @RequestBody final RecruitScheduleModifyRequestDto request) {
128-
recruitService.modifyRecruitSchedule(request);
129-
return ResponseEntity.ok().build();
130-
}
131-
132104
// 메일 전송
133105
@Operation(
134106
summary = "메일 전송",
@@ -149,7 +121,7 @@ public ResponseEntity<Void> modifyRecruitSchedule(@Valid @RequestBody final Recr
149121
)
150122
)
151123
})
152-
@PostMapping("/applicants/send-email")
124+
@PostMapping("/send-email")
153125
public ResponseEntity<Void> sendEmailsToApplicants(
154126
@RequestParam
155127
@Parameter(description = "메일 발송 타입", examples = {

src/main/java/dmu/dasom/api/global/file/controller/FileController.java renamed to src/main/java/dmu/dasom/api/global/admin/controller/AdminFileController.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dmu.dasom.api.global.file.controller;
1+
package dmu.dasom.api.global.admin.controller;
22

33
import dmu.dasom.api.domain.common.exception.ErrorResponse;
44
import dmu.dasom.api.global.file.dto.FileResponseDto;
@@ -9,6 +9,7 @@
99
import io.swagger.v3.oas.annotations.media.Schema;
1010
import io.swagger.v3.oas.annotations.responses.ApiResponse;
1111
import io.swagger.v3.oas.annotations.responses.ApiResponses;
12+
import io.swagger.v3.oas.annotations.tags.Tag;
1213
import jakarta.validation.constraints.Min;
1314
import lombok.RequiredArgsConstructor;
1415
import org.springframework.http.ResponseEntity;
@@ -18,9 +19,10 @@
1819
import java.util.List;
1920

2021
@RestController
21-
@RequestMapping("/api/files")
22+
@RequestMapping("/api/admin/files")
2223
@RequiredArgsConstructor
23-
public class FileController {
24+
@Tag(name = "ADMIN - File API", description = "어드민 파일 관리 API")
25+
public class AdminFileController {
2426

2527
private final FileService fileService;
2628

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package dmu.dasom.api.global.admin.controller;
2+
3+
import dmu.dasom.api.domain.common.exception.ErrorResponse;
4+
import dmu.dasom.api.domain.news.dto.NewsCreationResponseDto;
5+
import dmu.dasom.api.domain.news.dto.NewsRequestDto;
6+
import dmu.dasom.api.domain.news.dto.NewsResponseDto;
7+
import dmu.dasom.api.domain.news.dto.NewsUpdateRequestDto;
8+
import dmu.dasom.api.domain.news.service.NewsService;
9+
import io.swagger.v3.oas.annotations.Operation;
10+
import io.swagger.v3.oas.annotations.media.Content;
11+
import io.swagger.v3.oas.annotations.media.ExampleObject;
12+
import io.swagger.v3.oas.annotations.media.Schema;
13+
import io.swagger.v3.oas.annotations.responses.ApiResponse;
14+
import io.swagger.v3.oas.annotations.responses.ApiResponses;
15+
import io.swagger.v3.oas.annotations.tags.Tag;
16+
import jakarta.validation.Valid;
17+
import jakarta.validation.constraints.Min;
18+
import lombok.RequiredArgsConstructor;
19+
import org.springframework.http.ResponseEntity;
20+
import org.springframework.web.bind.annotation.*;
21+
22+
@RestController
23+
@RequestMapping("/api/admin/news")
24+
@RequiredArgsConstructor
25+
@Tag(name = "ADMIN - News API", description = "어드민 소식 관리 API")
26+
public class AdminNewsController {
27+
28+
private final NewsService newsService;
29+
30+
@Operation(summary = "뉴스 등록")
31+
@ApiResponses(value = {
32+
@ApiResponse(responseCode = "201", description = "뉴스 등록 성공")
33+
})
34+
@PostMapping
35+
public ResponseEntity<NewsCreationResponseDto> createNews(@Valid @RequestBody NewsRequestDto requestDto) {
36+
return ResponseEntity.status(201)
37+
.body(newsService.createNews(requestDto));
38+
}
39+
40+
@Operation(summary = "뉴스 수정")
41+
@ApiResponses(value = {
42+
@ApiResponse(responseCode = "200", description = "뉴스 수정 성공"),
43+
@ApiResponse(responseCode = "404", description = "조회 결과 없음",
44+
content = @Content(
45+
mediaType = "application/json",
46+
schema = @Schema(implementation = ErrorResponse.class),
47+
examples = {
48+
@ExampleObject(
49+
name = "조회 결과 없음",
50+
value = "{ \"code\": \"C010\", \"message\": \"해당 리소스를 찾을 수 없습니다.\" }"
51+
)
52+
}
53+
))
54+
})
55+
@PutMapping("/{id}")
56+
public ResponseEntity<NewsResponseDto> updateNews(
57+
@PathVariable @Min(1) Long id,
58+
@Valid @RequestBody NewsUpdateRequestDto requestDto
59+
) {
60+
return ResponseEntity.ok(newsService.updateNews(id, requestDto));
61+
}
62+
63+
@Operation(summary = "뉴스 삭제")
64+
@ApiResponses(value = {
65+
@ApiResponse(responseCode = "200", description = "뉴스 삭제 성공"),
66+
@ApiResponse(responseCode = "404", description = "조회 결과 없음",
67+
content = @Content(
68+
mediaType = "application/json",
69+
schema = @Schema(implementation = ErrorResponse.class),
70+
examples = {
71+
@ExampleObject(
72+
name = "조회 결과 없음",
73+
value = "{ \"code\": \"C010\", \"message\": \"해당 리소스를 찾을 수 없습니다.\" }"
74+
)
75+
}
76+
))
77+
})
78+
@DeleteMapping("/{id}")
79+
public ResponseEntity<Void> deleteNews(@PathVariable Long id) {
80+
newsService.deleteNews(id);
81+
return ResponseEntity.ok()
82+
.build();
83+
}
84+
85+
}

0 commit comments

Comments
 (0)