PlanCommandController.java
package com.deveagles.be15_deveagles_be.features.schedules.command.application.controller;
import com.deveagles.be15_deveagles_be.common.dto.ApiResponse;
import com.deveagles.be15_deveagles_be.features.auth.command.application.model.CustomUser;
import com.deveagles.be15_deveagles_be.features.schedules.command.application.dto.request.*;
import com.deveagles.be15_deveagles_be.features.schedules.command.application.service.PlanCommandService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/schedules")
@RequiredArgsConstructor
@Tag(name = "일정 관리", description = "단기 및 정기 일정 생성, 수정, 삭제 API")
public class PlanCommandController {
private final PlanCommandService planCommandService;
@Operation(summary = "단기 일정 생성", description = "단기 일정을 새로 등록합니다.")
@PostMapping("/plans")
public ResponseEntity<ApiResponse<Long>> createPlan(
@AuthenticationPrincipal CustomUser user, @RequestBody CreatePlanRequest request) {
Long id = planCommandService.createPlan(user.getShopId(), request);
return ResponseEntity.ok(ApiResponse.success(id));
}
@Operation(summary = "정기 일정 생성", description = "정기 일정을 새로 등록합니다.")
@PostMapping("/regular-plans")
public ResponseEntity<ApiResponse<Long>> createRegularPlan(
@AuthenticationPrincipal CustomUser user, @RequestBody CreateRegularPlanRequest request) {
Long id = planCommandService.createRegularPlan(user.getShopId(), request);
return ResponseEntity.ok(ApiResponse.success(id));
}
@Operation(summary = "단기 일정 수정", description = "기존 단기 일정을 수정합니다.")
@PutMapping("/plans/{planId}")
public ResponseEntity<ApiResponse<Void>> updatePlan(
@AuthenticationPrincipal CustomUser user,
@PathVariable Long planId,
@RequestBody CreatePlanRequest request) {
planCommandService.updatePlan(user.getShopId(), planId, request);
return ResponseEntity.ok(ApiResponse.success(null));
}
@Operation(summary = "정기 일정 수정", description = "기존 정기 일정을 수정합니다.")
@PutMapping("/regular-plans/{regularPlanId}")
public ResponseEntity<ApiResponse<Void>> updateRegularPlan(
@AuthenticationPrincipal CustomUser user,
@PathVariable Long regularPlanId,
@RequestBody CreateRegularPlanRequest request) {
planCommandService.updateRegularPlan(user.getShopId(), regularPlanId, request);
return ResponseEntity.ok(ApiResponse.success(null));
}
@Operation(summary = "일정 타입 전환", description = "단기 ↔ 정기 일정으로 전환합니다.")
@PostMapping("/plans/switch")
public ResponseEntity<ApiResponse<Void>> switchSchedule(
@AuthenticationPrincipal CustomUser user, @RequestBody UpdatePlanScheduleRequest request) {
planCommandService.switchSchedule(user.getShopId(), request);
return ResponseEntity.ok(ApiResponse.success(null));
}
@Operation(summary = "일정 삭제 (다건)", description = "단기 및 정기 일정을 함께 삭제합니다.")
@DeleteMapping("/plans")
public ResponseEntity<ApiResponse<Void>> deleteSchedules(
@AuthenticationPrincipal CustomUser user, @RequestBody List<DeleteScheduleRequest> requests) {
planCommandService.deleteMixedSchedules(user.getShopId(), requests);
return ResponseEntity.ok(ApiResponse.success(null));
}
}