StaffCommandController.java

package com.deveagles.be15_deveagles_be.features.users.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.users.command.application.dto.request.CreateStaffRequest;
import com.deveagles.be15_deveagles_be.features.users.command.application.dto.request.PutStaffRequest;
import com.deveagles.be15_deveagles_be.features.users.command.application.dto.response.StaffInfoResponse;
import com.deveagles.be15_deveagles_be.features.users.command.application.service.StaffCommandService;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/staffs")
@Tag(name = "직원 관리", description = "직원 관리 관련 API")
public class StaffCommandController {

  private final StaffCommandService staffCommandService;

  @PostMapping()
  public ResponseEntity<ApiResponse<Void>> staffCreate(
      @AuthenticationPrincipal CustomUser customUser,
      @RequestPart @Valid CreateStaffRequest staffRequest,
      @RequestPart(required = false) MultipartFile profile) {

    staffCommandService.staffCreate(customUser.getShopId(), staffRequest, profile);

    return ResponseEntity.status(HttpStatus.CREATED).body(ApiResponse.success(null));
  }

  @GetMapping("/{staffId}")
  public ResponseEntity<ApiResponse<StaffInfoResponse>> getStaffDetail(
      @AuthenticationPrincipal CustomUser customUser, @PathVariable Long staffId) {

    StaffInfoResponse response = staffCommandService.getStaffDetail(staffId);

    return ResponseEntity.ok().body(ApiResponse.success(response));
  }

  @PostMapping("/{staffId}")
  public ResponseEntity<ApiResponse<Void>> putStaffDetail(
      @AuthenticationPrincipal CustomUser customUser,
      @PathVariable Long staffId,
      @RequestPart("staffRequest") @Valid PutStaffRequest staffRequest,
      @RequestPart(value = "profile", required = false) MultipartFile profile) {

    staffCommandService.putStaffDetail(staffId, staffRequest, profile);

    return ResponseEntity.ok().body(ApiResponse.success(null));
  }
}