feat: 글로벌 메뉴 분리 및 테넌트 메뉴 동기화 시스템 구현
- global_menus 테이블 분리를 위한 menus 컬럼 추가 (global_menu_id, is_customized) - GlobalMenuController: 글로벌 메뉴 CRUD API - GlobalMenuService: 글로벌 메뉴 비즈니스 로직 - MenuSyncService: 테넌트 메뉴 동기화 서비스 - MenuBootstrapService: 테넌트 초기 메뉴 생성 로직 개선 - MenuController: 메뉴 재동기화 엔드포인트 추가
This commit is contained in:
@@ -5,10 +5,15 @@
|
||||
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) {
|
||||
@@ -63,4 +68,79 @@ public function toggle(Request $request, $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();
|
||||
}, '메뉴 업데이트 동기화');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user