From 504eb697e4cb8e9f7c91a74c911e870bcbef9223 Mon Sep 17 00:00:00 2001 From: kent Date: Sun, 28 Dec 2025 01:43:06 +0900 Subject: [PATCH] =?UTF-8?q?feat(board):=20=EB=B3=B8=EC=82=AC(HQ)=20?= =?UTF-8?q?=ED=85=8C=EB=84=8C=ED=8A=B8=EB=A7=8C=20=EC=8B=9C=EC=8A=A4?= =?UTF-8?q?=ED=85=9C=20=EA=B2=8C=EC=8B=9C=ED=8C=90=20=ED=91=9C=EC=8B=9C=20?= =?UTF-8?q?=EB=B0=8F=20=EC=9A=B0=EC=84=A0=20=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 본사(tenant_type=HQ) 선택 시: 시스템 게시판 + 본사 게시판 표시 - 일반 테넌트 선택 시: 해당 테넌트 게시판만 표시 - 정렬: is_system DESC 추가 (시스템 게시판 우선) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- app/Services/BoardService.php | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/app/Services/BoardService.php b/app/Services/BoardService.php index 1060dd96..07c34ffc 100644 --- a/app/Services/BoardService.php +++ b/app/Services/BoardService.php @@ -406,15 +406,25 @@ public function getAllBoards(array $filters = [], int $perPage = 15): LengthAwar ->withCount(['fields', 'posts']) ->withTrashed(); - // 헤더에서 선택한 테넌트 기준: 시스템 게시판 + 해당 테넌트 게시판 + // 헤더에서 선택한 테넌트 기준 $selectedTenantId = session('selected_tenant_id'); if ($selectedTenantId && $selectedTenantId !== 'all') { - // 시스템 게시판 + 선택된 테넌트 게시판 - $query->where(function ($q) use ($selectedTenantId) { - $q->where('is_system', true) - ->orWhere('tenant_id', $selectedTenantId); - }); + // 선택된 테넌트가 본사(HQ)인지 확인 + $isHQ = Tenant::where('id', $selectedTenantId) + ->where('tenant_type', 'HQ') + ->exists(); + + if ($isHQ) { + // 본사: 시스템 게시판 + 본사 테넌트 게시판 + $query->where(function ($q) use ($selectedTenantId) { + $q->where('is_system', true) + ->orWhere('tenant_id', $selectedTenantId); + }); + } else { + // 일반 테넌트: 해당 테넌트 게시판만 (시스템 게시판 제외) + $query->where('tenant_id', $selectedTenantId); + } } else { // 전체 보기: 시스템 게시판만 (테넌트 게시판은 테넌트 선택 후 표시) $query->where('is_system', true); @@ -449,10 +459,11 @@ public function getAllBoards(array $filters = [], int $perPage = 15): LengthAwar } } - // 정렬 + // 정렬: 시스템 게시판 우선, 그 다음 사용자 지정 정렬 $sortBy = $filters['sort_by'] ?? 'id'; $sortDirection = $filters['sort_direction'] ?? 'desc'; - $query->orderBy($sortBy, $sortDirection); + $query->orderBy('is_system', 'desc') // 시스템 게시판 우선 + ->orderBy($sortBy, $sortDirection); return $query->paginate($perPage); }