From 9eaf13b950ca8032032e2db982ddbac965149f4e Mon Sep 17 00:00:00 2001 From: pro Date: Sat, 31 Jan 2026 11:54:45 +0900 Subject: [PATCH] =?UTF-8?q?fix:=EC=97=AD=ED=95=A0=20=EB=8F=99=EA=B8=B0?= =?UTF-8?q?=ED=99=94=20=EC=8B=9C=20unique=20=EC=A0=9C=EC=95=BD=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=20=EC=B6=A9=EB=8F=8C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - soft delete된 레코드가 있을 때 새 레코드 생성 대신 복원 - withTrashed()로 기존 레코드 확인 후 처리 - 불필요한 역할만 선별적으로 삭제 Co-Authored-By: Claude Opus 4.5 --- app/Services/Sales/SalesManagerService.php | 46 ++++++++++++++++------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/app/Services/Sales/SalesManagerService.php b/app/Services/Sales/SalesManagerService.php index 270b9d6e..c4990773 100644 --- a/app/Services/Sales/SalesManagerService.php +++ b/app/Services/Sales/SalesManagerService.php @@ -273,24 +273,44 @@ private function assignSalesDepartment(User $user, int $tenantId): void */ public function syncRoles(User $user, int $tenantId, array $roleIds): void { - // 영업 관련 역할만 삭제 (다른 역할은 유지) + // 영업 관련 역할만 처리 (다른 역할은 유지) $salesRoleIds = Role::where('tenant_id', $tenantId) ->whereIn('name', self::SALES_ROLES) - ->pluck('id'); + ->pluck('id') + ->toArray(); - UserRole::where('user_id', $user->id) - ->where('tenant_id', $tenantId) - ->whereIn('role_id', $salesRoleIds) - ->delete(); + // 제거할 역할 soft delete (새 역할 목록에 없는 것들) + $roleIdsToRemove = array_diff($salesRoleIds, $roleIds); + if (!empty($roleIdsToRemove)) { + UserRole::where('user_id', $user->id) + ->where('tenant_id', $tenantId) + ->whereIn('role_id', $roleIdsToRemove) + ->delete(); + } - // 새 역할 추가 + // 새 역할 추가 (이미 있으면 복원, 없으면 생성) foreach ($roleIds as $roleId) { - UserRole::create([ - 'user_id' => $user->id, - 'tenant_id' => $tenantId, - 'role_id' => $roleId, - 'assigned_at' => now(), - ]); + // soft delete된 레코드 포함하여 검색 + $existingRole = UserRole::withTrashed() + ->where('user_id', $user->id) + ->where('tenant_id', $tenantId) + ->where('role_id', $roleId) + ->first(); + + if ($existingRole) { + // 이미 존재하면 복원 (soft delete된 경우) + if ($existingRole->trashed()) { + $existingRole->restore(); + } + } else { + // 새로 생성 + UserRole::create([ + 'user_id' => $user->id, + 'tenant_id' => $tenantId, + 'role_id' => $roleId, + 'assigned_at' => now(), + ]); + } } }