ColumnRequestController.java
package com.newbit.column.controller;
import com.newbit.auth.model.CustomUser;
import com.newbit.column.dto.request.CreateColumnRequestDto;
import com.newbit.column.dto.request.DeleteColumnRequestDto;
import com.newbit.column.dto.request.UpdateColumnRequestDto;
import com.newbit.column.dto.response.CreateColumnResponseDto;
import com.newbit.column.dto.response.DeleteColumnResponseDto;
import com.newbit.column.dto.response.GetMyColumnRequestResponseDto;
import com.newbit.column.dto.response.UpdateColumnResponseDto;
import com.newbit.column.service.ColumnRequestService;
import com.newbit.common.dto.ApiResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/v1/columns/requests")
@RequiredArgsConstructor
@Tag(name = "칼럼 요청 API", description = "멘토 칼럼 요청 관련 API")
public class ColumnRequestController {
private final ColumnRequestService columnRequestService;
// 칼럼 등록 요청 API
@Operation(summary = "멘토 칼럼 등록 요청", description = "멘토가 칼럼 등록을 요청합니다.")
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public ApiResponse<CreateColumnResponseDto> createColumnRequest(
@RequestBody @Valid CreateColumnRequestDto dto,
@AuthenticationPrincipal CustomUser customUser
) {
return ApiResponse.success(columnRequestService.createColumnRequest(dto, customUser.getUserId()));
}
// 칼럼 수정 요청 API
@Operation(summary = "멘토 칼럼 수정 요청", description = "멘토가 기존 칼럼의 수정을 요청합니다.")
@PostMapping("/{columnId}/edit")
@ResponseStatus(HttpStatus.CREATED)
public ApiResponse<UpdateColumnResponseDto> updateColumnRequest(
@PathVariable Long columnId,
@RequestBody @Valid UpdateColumnRequestDto dto
) {
return ApiResponse.success(columnRequestService.updateColumnRequest(dto, columnId));
}
// 칼럼 삭제 요청 API
@Operation(summary = "멘토 칼럼 삭제 요청", description = "멘토가 칼럼 삭제를 요청합니다.")
@PostMapping("/{columnId}/delete")
@ResponseStatus(HttpStatus.CREATED)
public ApiResponse<DeleteColumnResponseDto> deleteColumnRequest(
@PathVariable Long columnId,
@RequestBody @Valid DeleteColumnRequestDto dto
) {
return ApiResponse.success(columnRequestService.deleteColumnRequest(dto, columnId));
}
// 본인 칼럼 요청 조회
@Operation(summary = "멘토 본인 칼럼 요청 조회", description = "멘토가 등록, 수정, 삭제 요청한 칼럼 목록을 조회합니다.")
@GetMapping("/my")
@ResponseStatus(HttpStatus.OK)
public ApiResponse<List<GetMyColumnRequestResponseDto>> getMyColumnRequests(
@AuthenticationPrincipal CustomUser customUser
) {
return ApiResponse.success(columnRequestService.getMyColumnRequests(customUser.getUserId()));
}
}