Files
sam-api/app/Http/Controllers/Api/V1/TenantSettingController.php
권혁성 6d05ab815f feat:테넌트설정 API 및 다수 서비스 개선
- TenantSetting CRUD API 추가
- Calendar, Entertainment, VAT 서비스 개선
- 5130 BOM 계산 로직 수정
- quote_items에 item_type 컬럼 추가
- tenant_settings 테이블 마이그레이션
- Swagger 문서 업데이트
2026-01-26 20:29:22 +09:00

112 lines
2.8 KiB
PHP

<?php
namespace App\Http\Controllers\Api\v1;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Http\Requests\TenantSetting\BulkUpdateSettingsRequest;
use App\Http\Requests\TenantSetting\GetSettingsRequest;
use App\Http\Requests\TenantSetting\UpdateSettingRequest;
use App\Services\TenantSettingService;
class TenantSettingController extends Controller
{
public function __construct(
private TenantSettingService $service
) {}
/**
* 모든 설정 조회 (그룹별)
*/
public function index(GetSettingsRequest $request)
{
$validated = $request->validated();
if (! empty($validated['group'])) {
$data = $this->service->getByGroup($validated['group']);
} else {
$data = $this->service->getAll();
}
return ApiResponse::handle(__('message.fetched'), $data);
}
/**
* 특정 설정 조회
*/
public function show(string $group, string $key)
{
$value = $this->service->get($group, $key);
return ApiResponse::handle(__('message.fetched'), [
'group' => $group,
'key' => $key,
'value' => $value,
]);
}
/**
* 설정 저장/업데이트
*/
public function store(UpdateSettingRequest $request)
{
$validated = $request->validated();
$setting = $this->service->set(
$validated['group'],
$validated['key'],
$validated['value'],
$validated['description'] ?? null
);
return ApiResponse::handle(__('message.updated'), $setting);
}
/**
* 여러 설정 일괄 저장
*/
public function bulkUpdate(BulkUpdateSettingsRequest $request)
{
$validated = $request->validated();
$settings = collect($validated['settings'])->mapWithKeys(function ($item) {
return [$item['key'] => [
'value' => $item['value'],
'description' => $item['description'] ?? null,
]];
})->toArray();
$results = $this->service->setMany($validated['group'], $settings);
return ApiResponse::handle(__('message.bulk_upsert'), [
'updated' => count($results),
]);
}
/**
* 설정 삭제
*/
public function destroy(string $group, string $key)
{
$deleted = $this->service->delete($group, $key);
if (! $deleted) {
return ApiResponse::handle(__('error.not_found'), null, 404);
}
return ApiResponse::handle(__('message.deleted'));
}
/**
* 기본 설정 초기화
*/
public function initialize()
{
$results = $this->service->initializeDefaults();
return ApiResponse::handle(__('message.created'), [
'initialized' => count($results),
]);
}
}