package com.srsystem.controller; import com.srsystem.entity.SystemConfig; import com.srsystem.repository.SystemConfigRepository; import com.srsystem.dto.ApiResponse; import lombok.RequiredArgsConstructor; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; import java.util.List; import java.util.Map; @RestController @RequestMapping("/api/v1/admin/config") @PreAuthorize("hasRole('ADMIN')") @RequiredArgsConstructor public class SystemConfigController { private final SystemConfigRepository repository; @GetMapping public ApiResponse> getAll() { return ApiResponse.ok(repository.findAll()); } @GetMapping("/{key}") public ApiResponse getByKey(@PathVariable String key) { return repository.findByConfigKey(key) .map(ApiResponse::ok) .orElse(ApiResponse.error("설정을 찾을 수 없습니다: " + key)); } @PutMapping("/{key}") public ApiResponse update(@PathVariable String key, @RequestBody Map body) { String value = body.get("configValue"); if (value == null) { return ApiResponse.error("configValue가 필요합니다."); } SystemConfig config = repository.findByConfigKey(key).orElse(null); if (config == null) { config = SystemConfig.builder().configKey(key).createdAt(LocalDateTime.now()).build(); } config.setConfigValue(value); config.setUpdatedAt(LocalDateTime.now()); return ApiResponse.ok(repository.save(config)); } @PutMapping("/batch") public ApiResponse> batchUpdate(@RequestBody Map entries) { entries.forEach((k, v) -> { SystemConfig config = repository.findByConfigKey(k).orElse(null); if (config == null) { config = SystemConfig.builder().configKey(k).createdAt(LocalDateTime.now()).build(); } config.setConfigValue(v); config.setUpdatedAt(LocalDateTime.now()); repository.save(config); }); return ApiResponse.ok(repository.findAll()); } }