Files
sam-api/app/Http/Controllers/Api/Admin/GlobalMenuController.php

131 lines
3.4 KiB
PHP
Raw Normal View History

<?php
namespace App\Http\Controllers\Api\Admin;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\GlobalMenuService;
use Illuminate\Http\Request;
/**
* 글로벌 메뉴 관리 컨트롤러 (시스템 관리자용)
*/
class GlobalMenuController extends Controller
{
public function __construct(
protected GlobalMenuService $globalMenuService
) {}
/**
* 글로벌 메뉴 목록 조회
*/
public function index(Request $request)
{
return ApiResponse::handle(function () use ($request) {
return $this->globalMenuService->index($request->all());
}, '글로벌 메뉴 목록 조회');
}
/**
* 글로벌 메뉴 트리 조회
*/
public function tree()
{
return ApiResponse::handle(function () {
return $this->globalMenuService->tree();
}, '글로벌 메뉴 트리 조회');
}
/**
* 글로벌 메뉴 단건 조회
*/
public function show($id)
{
return ApiResponse::handle(function () use ($id) {
$menu = $this->globalMenuService->show((int) $id);
if (! $menu) {
return ['error' => __('error.menu_not_found'), 'code' => 404];
}
return $menu;
}, '글로벌 메뉴 상세 조회');
}
/**
* 글로벌 메뉴 생성
*/
public function store(Request $request)
{
return ApiResponse::handle(function () use ($request) {
return $this->globalMenuService->store($request->all());
}, '글로벌 메뉴 생성');
}
/**
* 글로벌 메뉴 수정
*/
public function update(Request $request, $id)
{
return ApiResponse::handle(function () use ($request, $id) {
$menu = $this->globalMenuService->update((int) $id, $request->all());
if (! $menu) {
return ['error' => __('error.menu_not_found'), 'code' => 404];
}
return $menu;
}, '글로벌 메뉴 수정');
}
/**
* 글로벌 메뉴 삭제
*/
public function destroy($id)
{
return ApiResponse::handle(function () use ($id) {
$result = $this->globalMenuService->destroy((int) $id);
if (! $result) {
return ['error' => __('error.menu_not_found'), 'code' => 404];
}
return __('message.deleted');
}, '글로벌 메뉴 삭제');
}
/**
* 글로벌 메뉴 순서 변경
*/
public function reorder(Request $request)
{
return ApiResponse::handle(function () use ($request) {
$items = $request->input('items', []);
$this->globalMenuService->reorder($items);
return __('message.reordered');
}, '글로벌 메뉴 순서 변경');
}
/**
* 특정 글로벌 메뉴를 모든 테넌트에 동기화
*/
public function syncToTenants($id)
{
return ApiResponse::handle(function () use ($id) {
return $this->globalMenuService->syncToAllTenants((int) $id);
}, '모든 테넌트에 메뉴 동기화');
}
/**
* 글로벌 메뉴 통계 조회
*/
public function stats()
{
return ApiResponse::handle(function () {
return $this->globalMenuService->stats();
}, '글로벌 메뉴 통계 조회');
}
}