Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
220 changes: 3 additions & 217 deletions src/main/java/side/onetime/controller/AdminController.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import side.onetime.dto.admin.request.*;
import side.onetime.dto.admin.request.LoginAdminUserRequest;
import side.onetime.dto.admin.request.RegisterAdminUserRequest;
import side.onetime.dto.admin.request.UpdateAdminUserStatusRequest;
import side.onetime.dto.admin.response.*;
import side.onetime.global.common.ApiResponse;
import side.onetime.global.common.status.SuccessStatus;
Expand Down Expand Up @@ -178,218 +178,4 @@ public ResponseEntity<ApiResponse<GetAllDashboardUsersResponse>> getAllDashboard
GetAllDashboardUsersResponse response = adminService.getAllDashboardUsers(authorizationHeader, pageable, keyword, sorting);
return ApiResponse.onSuccess(SuccessStatus._GET_ALL_DASHBOARD_USERS, response);
}

/**
* 배너 등록 API.
*
* 요청으로 전달된 정보를 바탕으로 새로운 배너를 등록합니다.
* 기본적으로 비활성화 상태이며 삭제되지 않은 상태로 생성됩니다.
*
* @param authorizationHeader 액세스 토큰
* @param request 배너 등록 요청 정보
* @param imageFile 배너 등록 이미지 객체
* @return 성공 응답 메시지
*/
@PostMapping(value = "/banners/register", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<ApiResponse<SuccessStatus>> registerBanner(
@RequestHeader("Authorization") String authorizationHeader,
@Valid @RequestPart(value = "request") RegisterBannerRequest request,
@RequestPart(value = "image_file") MultipartFile imageFile) {
adminService.registerBanner(authorizationHeader, request, imageFile);
return ApiResponse.onSuccess(SuccessStatus._REGISTER_BANNER);
}

/**
* 띠배너 등록 API.
*
* 요청으로 전달된 정보를 바탕으로 새로운 띠배너를 등록합니다.
* 기본적으로 비활성화 상태이며 삭제되지 않은 상태로 생성됩니다.
*
* @param authorizationHeader 액세스 토큰
* @param request 띠배너 등록 요청 정보
* @return 성공 응답 메시지
*/
@PostMapping("/bar-banners/register")
public ResponseEntity<ApiResponse<SuccessStatus>> registerBarBanner(
@RequestHeader("Authorization") String authorizationHeader,
@Valid @RequestBody RegisterBarBannerRequest request) {
adminService.registerBarBanner(authorizationHeader, request);
return ApiResponse.onSuccess(SuccessStatus._REGISTER_BAR_BANNER);
}

/**
* 배너 단건 조회 API.
*
* 삭제되지 않은 배너 중, ID에 해당하는 배너를 조회합니다.
*
* @param authorizationHeader 액세스 토큰
* @param id 조회할 배너 ID
* @return 배너 응답 객체
*/
@GetMapping("/banners/{id}")
public ResponseEntity<ApiResponse<GetBannerResponse>> getBanner(
@RequestHeader("Authorization") String authorizationHeader,
@PathVariable Long id) {
GetBannerResponse response = adminService.getBanner(authorizationHeader, id);
return ApiResponse.onSuccess(SuccessStatus._GET_BANNER, response);
}

/**
* 띠배너 단건 조회 API.
*
* 삭제되지 않은 띠배너 중, ID에 해당하는 띠배너를 조회합니다.
*
* @param authorizationHeader 액세스 토큰
* @param id 조회할 띠배너 ID
* @return 띠배너 응답 객체
*/
@GetMapping("/bar-banners/{id}")
public ResponseEntity<ApiResponse<GetBarBannerResponse>> getBarBanner(
@RequestHeader("Authorization") String authorizationHeader,
@PathVariable Long id) {
GetBarBannerResponse response = adminService.getBarBanner(authorizationHeader, id);
return ApiResponse.onSuccess(SuccessStatus._GET_BAR_BANNER, response);
}

/**
* 배너 전체 조회 API.
*
* 삭제되지 않은 모든 배너를 조회합니다.
*
* @param authorizationHeader 액세스 토큰
* @return 배너 응답 객체 리스트
*/
@GetMapping("/banners/all")
public ResponseEntity<ApiResponse<GetAllBannersResponse>> getAllBanners(
@RequestHeader("Authorization") String authorizationHeader,
@RequestParam(value = "page", defaultValue = "1") @Min(1) int page
) {
Pageable pageable = PageRequest.of(page - 1, 20);
GetAllBannersResponse response = adminService.getAllBanners(authorizationHeader, pageable);
return ApiResponse.onSuccess(SuccessStatus._GET_ALL_BANNERS, response);
}

/**
* 띠배너 전체 조회 API.
*
* 삭제되지 않은 모든 띠배너를 조회합니다.
*
* @param authorizationHeader 액세스 토큰
* @return 띠배너 응답 객체 리스트
*/
@GetMapping("/bar-banners/all")
public ResponseEntity<ApiResponse<GetAllBarBannersResponse>> getAllBarBanners(
@RequestHeader("Authorization") String authorizationHeader,
@RequestParam(value = "page", defaultValue = "1") @Min(1) int page
) {
Pageable pageable = PageRequest.of(page - 1, 20);
GetAllBarBannersResponse response = adminService.getAllBarBanners(authorizationHeader, pageable);
return ApiResponse.onSuccess(SuccessStatus._GET_ALL_BAR_BANNERS, response);
}

/**
* 현재 활성화된 배너 전체 조회 API.
*
* @return 활성화된 배너 응답 객체 리스트
*/
@GetMapping("/banners/activated/all")
public ResponseEntity<ApiResponse<GetAllActivatedBannersResponse>> getAllActivatedBanners() {
GetAllActivatedBannersResponse response = adminService.getAllActivatedBanners();
return ApiResponse.onSuccess(SuccessStatus._GET_ALL_ACTIVATED_BANNERS, response);
}

/**
* 현재 활성화된 띠배너 전체 조회 API.
*
* @return 활성화된 띠배너 응답 객체 리스트
*/
@GetMapping("/bar-banners/activated/all")
public ResponseEntity<ApiResponse<GetAllActivatedBarBannersResponse>> getAllActivatedBarBanners() {
GetAllActivatedBarBannersResponse response = adminService.getAllActivatedBarBanners();
return ApiResponse.onSuccess(SuccessStatus._GET_ALL_ACTIVATED_BAR_BANNERS, response);
}

/**
* 배너 수정 API.
*
* 일부 필드만 수정이 가능한 PATCH 방식의 API입니다.
* 전달받은 요청에서 null이 아닌 필드만 수정되며,
* 삭제된 배너는 수정할 수 없습니다.
*
* @param authorizationHeader 액세스 토큰
* @param id 수정할 배너 ID
* @param request 수정 요청 DTO
* @param imageFile 배너 수정 이미지 객체
* @return 성공 응답 메시지
*/
@PatchMapping(value = "/banners/{id}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<ApiResponse<SuccessStatus>> updateBanner(
@RequestHeader("Authorization") String authorizationHeader,
@PathVariable Long id,
@Valid @RequestPart(value = "request") UpdateBannerRequest request,
@RequestPart(value = "image_file", required = false) MultipartFile imageFile
) {
adminService.updateBanner(authorizationHeader, id, request, imageFile);
return ApiResponse.onSuccess(SuccessStatus._UPDATE_BANNER);
}

/**
* 띠배너 수정 API.
*
* 일부 필드만 수정이 가능한 PATCH 방식의 API입니다.
* 전달받은 요청에서 null이 아닌 필드만 수정되며,
* 삭제된 띠배너는 수정할 수 없습니다.
*
* @param authorizationHeader 액세스 토큰
* @param id 수정할 띠배너 ID
* @param request 수정 요청 DTO
* @return 성공 응답 메시지
*/
@PatchMapping("/bar-banners/{id}")
public ResponseEntity<ApiResponse<SuccessStatus>> updateBarBanner(
@RequestHeader("Authorization") String authorizationHeader,
@PathVariable Long id,
@Valid @RequestBody UpdateBarBannerRequest request
) {
adminService.updateBarBanner(authorizationHeader, id, request);
return ApiResponse.onSuccess(SuccessStatus._UPDATE_BAR_BANNER);
}

/**
* 배너 삭제 API.
*
* 배너를 DB에서 실제로 삭제하지 않고, isDeleted 플래그만 true로 변경합니다.
* 해당 배너는 이후 조회되지 않으며 비활성화 상태로 간주됩니다.
*
* @param authorizationHeader 액세스 토큰
* @param id 삭제할 배너 ID
* @return 성공 응답 메시지
*/
@DeleteMapping("/banners/{id}")
public ResponseEntity<ApiResponse<SuccessStatus>> deleteBanner(
@RequestHeader("Authorization") String authorizationHeader,
@PathVariable Long id
) {
adminService.deleteBanner(authorizationHeader, id);
return ApiResponse.onSuccess(SuccessStatus._DELETE_BANNER);
}

/**
* 띠배너 삭제 API.
*
* 띠배너를 DB에서 실제로 삭제하지 않고, isDeleted 플래그만 true로 변경합니다.
* 해당 띠배너는 이후 조회되지 않으며 비활성화 상태로 간주됩니다.
*
* @param authorizationHeader 액세스 토큰
* @param id 삭제할 띠배너 ID
* @return 성공 응답 메시지
*/
@DeleteMapping("/bar-banners/{id}")
public ResponseEntity<ApiResponse<SuccessStatus>> deleteBarBanner(
@RequestHeader("Authorization") String authorizationHeader,
@PathVariable Long id
) {
adminService.deleteBarBanner(authorizationHeader, id);
return ApiResponse.onSuccess(SuccessStatus._DELETE_BAR_BANNER);
}
}
Loading
Loading