package com.kamco.cd.kamcoback.members; import com.kamco.cd.kamcoback.config.api.ApiResponseDto; import com.kamco.cd.kamcoback.members.dto.MembersDto; import com.kamco.cd.kamcoback.members.service.AdminService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @Tag(name = "관리자 관리", description = "관리자 관리 API") @RestController @RequestMapping("/api/admin/members") @RequiredArgsConstructor public class AdminApiController { private final AdminService adminService; @Operation(summary = "관리자 계정 등록", description = "관리자 계정 등록") @ApiResponses( value = { @ApiResponse( responseCode = "201", description = "등록 성공", content = @Content( mediaType = "application/json", schema = @Schema(implementation = Long.class))), @ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content), @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) }) @PostMapping("/join") public ApiResponseDto saveMember( @io.swagger.v3.oas.annotations.parameters.RequestBody( description = "관리자 계정 등록", required = true, content = @Content( mediaType = "application/json", schema = @Schema(implementation = MembersDto.AddReq.class))) @RequestBody @Valid MembersDto.AddReq addReq) { return ApiResponseDto.createOK(adminService.saveMember(addReq)); } @Operation(summary = "관리자 계정 수정", description = "관리자 계정 수정") @ApiResponses( value = { @ApiResponse( responseCode = "201", description = "수정 성공", content = @Content( mediaType = "application/json", schema = @Schema(implementation = Long.class))), @ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content), @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) }) @PutMapping("/{uuid}") public ApiResponseDto updateMembers( @io.swagger.v3.oas.annotations.parameters.RequestBody( description = "관리자 계정 수정", required = true, content = @Content( mediaType = "application/json", schema = @Schema(implementation = MembersDto.UpdateReq.class))) @PathVariable UUID uuid, @RequestBody MembersDto.UpdateReq updateReq) { adminService.updateMembers(uuid, updateReq); return ApiResponseDto.createOK(UUID.randomUUID()); } @Operation(summary = "회원 탈퇴", description = "회원 탈퇴") @ApiResponses( value = { @ApiResponse( responseCode = "201", description = "회원 탈퇴", content = @Content( mediaType = "application/json", schema = @Schema(implementation = UUID.class))), @ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content), @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) }) @DeleteMapping("/delete/{uuid}") public ApiResponseDto deleteAccount(@PathVariable UUID uuid) { adminService.deleteAccount(uuid); return ApiResponseDto.createOK(uuid); } @Operation(summary = "비밀번호 초기화", description = "비밀번호 초기화") @ApiResponses( value = { @ApiResponse( responseCode = "201", description = "비밀번호 초기화", content = @Content( mediaType = "application/json", schema = @Schema(implementation = Long.class))), @ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content), @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) }) @PatchMapping("/{memberId}/password") public ApiResponseDto resetPassword(@PathVariable Long memberId) { adminService.resetPassword(memberId); return ApiResponseDto.createOK(memberId); } }