- global_menus 테이블 분리를 위한 menus 컬럼 추가 (global_menu_id, is_customized) - GlobalMenuController: 글로벌 메뉴 CRUD API - GlobalMenuService: 글로벌 메뉴 비즈니스 로직 - MenuSyncService: 테넌트 메뉴 동기화 서비스 - MenuBootstrapService: 테넌트 초기 메뉴 생성 로직 개선 - MenuController: 메뉴 재동기화 엔드포인트 추가
147 lines
4.0 KiB
PHP
147 lines
4.0 KiB
PHP
<?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();
|
|
}, '메뉴 업데이트 동기화');
|
|
}
|
|
}
|