feat: 테넌트 게시판 CRUD 시 메뉴 자동 연동

- MenuService에 게시판 메뉴 연동 메서드 추가
  - createMenuForBoard(): 게시판 생성 시 /board 하위에 메뉴 자동 추가
  - updateMenuForBoard(): 코드/이름 변경 시 메뉴 URL/이름 동기화
  - deleteMenuForBoard(): 게시판 삭제 시 메뉴 Soft Delete
  - restoreMenuForBoard(): 게시판 복원 시 메뉴 복원
  - findParentMenuForBoard(): 부모 메뉴 (/board) 찾기
- BoardService에서 테넌트 게시판 CRUD 시 MenuService 호출

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-12-29 13:50:33 +09:00
parent 63d8eb5a71
commit 56b9805c24
2 changed files with 204 additions and 1 deletions

View File

@@ -4,6 +4,7 @@
use App\Models\Boards\Board;
use App\Models\Boards\BoardSetting;
use App\Services\MenuService;
use App\Services\Service;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
use Illuminate\Database\Eloquent\Collection;
@@ -133,6 +134,7 @@ public function createSystemBoard(array $data): Board
/**
* 테넌트 게시판 생성 (sam용)
* - 게시판 생성 후 메뉴 자동 생성
*/
public function createTenantBoard(array $data): Board
{
@@ -140,7 +142,16 @@ public function createTenantBoard(array $data): Board
$data['tenant_id'] = $this->tenantId();
$data['created_by'] = $this->apiUserId();
return Board::create($data);
$board = Board::create($data);
// 메뉴 자동 생성
MenuService::createMenuForBoard(
$board->board_code,
$board->name,
$board->tenant_id
);
return $board;
}
// =========================================================================
@@ -166,6 +177,7 @@ public function updateSystemBoard(int $id, array $data): ?Board
/**
* 테넌트 게시판 수정 (sam용)
* - 코드/이름 변경 시 메뉴도 자동 수정
*/
public function updateTenantBoard(int $id, array $data): ?Board
{
@@ -175,9 +187,26 @@ public function updateTenantBoard(int $id, array $data): ?Board
return null;
}
// 기존 코드/이름 저장 (메뉴 업데이트용)
$oldCode = $board->board_code;
$oldName = $board->name;
$data['updated_by'] = $this->apiUserId();
$board->update($data);
// 코드 또는 이름 변경 시 메뉴도 업데이트
$newCode = $data['board_code'] ?? $oldCode;
$newName = $data['name'] ?? $oldName;
if ($oldCode !== $newCode || $oldName !== $newName) {
MenuService::updateMenuForBoard(
$oldCode,
$newCode,
$newName,
$board->tenant_id
);
}
return $board->fresh();
}
@@ -205,6 +234,7 @@ public function deleteSystemBoard(int $id): bool
/**
* 테넌트 게시판 삭제 (sam용)
* - 게시판 삭제 시 메뉴도 자동 삭제 (Soft Delete)
*/
public function deleteTenantBoard(int $id): bool
{
@@ -214,10 +244,16 @@ public function deleteTenantBoard(int $id): bool
return false;
}
$boardCode = $board->board_code;
$tenantId = $board->tenant_id;
$board->deleted_by = $this->apiUserId();
$board->save();
$board->delete();
// 메뉴도 함께 삭제 (Soft Delete)
MenuService::deleteMenuForBoard($boardCode, $tenantId);
return true;
}