Files
sam-api/app/Http/Controllers/Api/V1/MenuController.php

147 lines
4.0 KiB
PHP
Raw Permalink Normal View History

<?php
namespace App\Http\Controllers\Api\V1;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\MenuService;
use App\Services\MenuSyncService;
use Illuminate\Http\Request;
class MenuController extends Controller
{
public function __construct(
protected MenuSyncService $menuSyncService
) {}
public function index(Request $request)
{
return ApiResponse::handle(function () use ($request) {
return MenuService::index($request->all());
}, '메뉴 목록 조회');
}
public function show($id)
{
return ApiResponse::handle(function () use ($id) {
return MenuService::show(['id' => (int) $id]);
}, '메뉴 단건 조회');
}
public function store(Request $request)
{
return ApiResponse::handle(function () use ($request) {
return MenuService::store($request->all());
}, '메뉴 등록');
}
public function update(Request $request, $id)
{
return ApiResponse::handle(function () use ($request, $id) {
$params = $request->all();
$params['id'] = (int) $id;
return MenuService::update($params);
}, '메뉴 수정');
}
public function destroy($id)
{
return ApiResponse::handle(function () use ($id) {
return MenuService::destroy(['id' => (int) $id]);
}, '메뉴 삭제');
}
public function reorder(Request $request)
{
return ApiResponse::handle(function () use ($request) {
return MenuService::reorder($request->all());
}, '메뉴 정렬 변경');
}
public function toggle(Request $request, $id)
{
return ApiResponse::handle(function () use ($request, $id) {
$params = $request->all();
$params['id'] = (int) $id;
return MenuService::toggle($params);
}, '메뉴 상태 토글');
}
/**
* 삭제된 메뉴 복원
*/
public function restore($id)
{
return ApiResponse::handle(function () use ($id) {
return MenuService::restore(['id' => (int) $id]);
}, '메뉴 복원');
}
/**
* 삭제된 메뉴 목록 조회
*/
public function trashed()
{
return ApiResponse::handle(function () {
return MenuService::trashedList();
}, '삭제된 메뉴 목록 조회');
}
/**
* 복제 가능한 글로벌 메뉴 목록
*/
public function availableGlobal()
{
return ApiResponse::handle(function () {
return $this->menuSyncService->getAvailableGlobalMenus();
}, '복제 가능한 글로벌 메뉴 목록');
}
/**
* 동기화 상태 목록 조회
*/
public function syncStatus(Request $request)
{
return ApiResponse::handle(function () use ($request) {
$statusFilter = $request->query('status');
return $this->menuSyncService->getSyncStatus($statusFilter);
}, '동기화 상태 조회');
}
/**
* 선택 동기화 (신규 생성 또는 기존 업데이트)
*/
public function sync(Request $request)
{
return ApiResponse::handle(function () use ($request) {
$menuIds = $request->input('menu_ids', []);
$force = $request->boolean('force', false);
return $this->menuSyncService->syncMenus($menuIds, $force);
}, '메뉴 동기화');
}
/**
* 신규 글로벌 메뉴 일괄 가져오기
*/
public function syncNew()
{
return ApiResponse::handle(function () {
return $this->menuSyncService->importNewMenus();
}, '신규 메뉴 가져오기');
}
/**
* 변경된 기존 메뉴 일괄 업데이트 (커스텀 제외)
*/
public function syncUpdates()
{
return ApiResponse::handle(function () {
return $this->menuSyncService->syncUpdates();
}, '메뉴 업데이트 동기화');
}
}