fix : 결과 전달시 두번 래핑되는 부분 수정

- 컨트롤러와 서비스에서 각각 래핑 후 결과 전달됨으로 이중 래핑되고 있음
  -> 서비스에서 래핑하는 부분을 컨트롤러로 옮겨서 컨트롤러에서만 한번 래핑하는 걸로 수정
This commit is contained in:
2025-08-19 12:41:17 +09:00
parent aa190bf48d
commit 43e4c507a7
18 changed files with 299 additions and 277 deletions

View File

@@ -20,7 +20,7 @@ private static function v(array $params, array $rules)
{
$v = Validator::make($params, $rules);
if ($v->fails()) {
return ApiResponse::error($v->errors()->first(), 422);
return ['error' => $v->errors()->first(), 'code' => 422];
}
return $v->validated();
}
@@ -54,7 +54,7 @@ public static function index(array $params)
$page = $p['page'] ?? null;
// 페이징 객체는 'result'로 반환
return ApiResponse::response('result', $q->paginate($perPage, ['*'], 'page', $page));
return $q->paginate($perPage, ['*'], 'page', $page);
}
/** 생성 */
@@ -72,7 +72,7 @@ public static function store(array $params)
if (!empty($p['code'])) {
$exists = Department::query()->where('code', $p['code'])->exists();
if ($exists) return ApiResponse::error('이미 존재하는 부서 코드입니다.', 409);
if ($exists) return ['error' => '이미 존재하는 부서 코드입니다.', 'code' => 409];
}
$dept = Department::create([
@@ -85,19 +85,17 @@ public static function store(array $params)
'updated_by' => $p['created_by'] ?? null,
]);
return ApiResponse::response('result', $dept->fresh());
return $dept->fresh();
}
/** 단건 */
public static function show(int $id, array $params)
{
if (!$id) return ApiResponse::error('id가 필요합니다.', 400);
$q = Department::query()->where('id', $id);
$res = ApiResponse::response('first', $q);
if (!$id) return ['error' => 'id가 필요합니다.', 'code' => 400];
$res = Department::query()->where('id', $id)->first();
if (empty($res['data'])) {
return ApiResponse::error('부서를 찾을 수 없습니다.', 404);
return ['error' => '부서를 찾을 수 없습니다.', 'code' => 404];
}
return $res;
}
@@ -105,7 +103,7 @@ public static function show(int $id, array $params)
/** 수정 */
public static function update(int $id, array $params)
{
if (!$id) return ApiResponse::error('id가 필요합니다.', 400);
if (!$id) return ['error' => 'id가 필요합니다.', 'code' => 400];
$p = self::v($params, [
'code' => 'nullable|string|max:50',
@@ -118,14 +116,14 @@ public static function update(int $id, array $params)
if ($p instanceof JsonResponse) return $p;
$dept = Department::query()->find($id);
if (!$dept) return ApiResponse::error('부서를 찾을 수 없습니다.', 404);
if (!$dept) return ['error' => '부서를 찾을 수 없습니다.', 'code' => 404];
if (array_key_exists('code', $p) && !is_null($p['code'])) {
$exists = Department::query()
->where('code', $p['code'])
->where('id', '!=', $id)
->exists();
if ($exists) return ApiResponse::error('이미 존재하는 부서 코드입니다.', 409);
if ($exists) return ['error' => '이미 존재하는 부서 코드입니다.', 'code' => 409];
}
$dept->fill([
@@ -137,13 +135,13 @@ public static function update(int $id, array $params)
'updated_by' => $p['updated_by'] ?? $dept->updated_by,
])->save();
return ApiResponse::response('result', $dept->fresh());
return $dept->fresh();
}
/** 삭제(soft) */
public static function destroy(int $id, array $params)
{
if (!$id) return ApiResponse::error('id가 필요합니다.', 400);
if (!$id) return ['error' => 'id가 필요합니다.', 'code' => 400];
$p = self::v($params, [
'deleted_by' => 'nullable|integer|min:1',
@@ -151,7 +149,7 @@ public static function destroy(int $id, array $params)
if ($p instanceof JsonResponse) return $p;
$dept = Department::query()->find($id);
if (!$dept) return ApiResponse::error('부서를 찾을 수 없습니다.', 404);
if (!$dept) return ['error' => '부서를 찾을 수 없습니다.', 'code' => 404];
if (!empty($p['deleted_by'])) {
$dept->deleted_by = $p['deleted_by'];
@@ -159,7 +157,7 @@ public static function destroy(int $id, array $params)
}
$dept->delete();
return ApiResponse::response('result', ['id' => $id, 'deleted_at' => now()->toDateTimeString()]);
return ['id' => $id, 'deleted_at' => now()->toDateTimeString()];
}
/** 부서 사용자 목록 */
@@ -172,7 +170,7 @@ public static function listUsers(int $deptId, array $params)
if ($p instanceof JsonResponse) return $p;
$dept = Department::query()->find($deptId);
if (!$dept) return ApiResponse::error('부서를 찾을 수 없습니다.', 404);
if (!$dept) return ['error' => '부서를 찾을 수 없습니다.', 'code' => 404];
$builder = $dept->departmentUsers()->with('user')
->orderByDesc('is_primary')->orderBy('id');
@@ -180,7 +178,7 @@ public static function listUsers(int $deptId, array $params)
$perPage = $p['per_page'] ?? 20;
$page = $p['page'] ?? null;
return ApiResponse::response('result', $builder->paginate($perPage, ['*'], 'page', $page));
return $builder->paginate($perPage, ['*'], 'page', $page);
}
/** 사용자 배정 (단건) */
@@ -194,7 +192,7 @@ public static function attachUser(int $deptId, array $params)
if ($p instanceof JsonResponse) return $p;
$dept = Department::query()->find($deptId);
if (!$dept) return ApiResponse::error('부서를 찾을 수 없습니다.', 404);
if (!$dept) return ['error' => '부서를 찾을 수 없습니다.', 'code' => 404];
$result = DB::transaction(function () use ($dept, $p) {
$du = DepartmentUser::withTrashed()
@@ -203,7 +201,7 @@ public static function attachUser(int $deptId, array $params)
->first();
if ($du && is_null($du->deleted_at)) {
return ApiResponse::error('이미 배정된 사용자입니다.', 409);
return ['error' => '이미 배정된 사용자입니다.', 'code' => 409];
}
if (!empty($p['is_primary']) && (int)$p['is_primary'] === 1) {
@@ -233,7 +231,7 @@ public static function attachUser(int $deptId, array $params)
// 트랜잭션 내부에서 에러 응답이 나올 수 있으므로 분기
if ($result instanceof JsonResponse) return $result;
return ApiResponse::response('result', $result);
return $result;
}
/** 사용자 제거(soft) */
@@ -244,14 +242,14 @@ public static function detachUser(int $deptId, int $userId, array $params)
->where('user_id', $userId)
->first();
if (!$du) return ApiResponse::error('배정된 사용자를 찾을 수 없습니다.', 404);
if (!$du) return ['error' => '배정된 사용자를 찾을 수 없습니다.', 'code' => 404];
$du->delete();
return ApiResponse::response('result', [
return [
'user_id' => $userId,
'deleted_at' => now()->toDateTimeString(),
]);
];
}
/** 주부서 설정/해제 */
@@ -269,7 +267,7 @@ public static function setPrimary(int $deptId, int $userId, array $params)
->first();
if (!$du) {
return ApiResponse::error('배정된 사용자를 찾을 수 없습니다.', 404);
return ['error' => '배정된 사용자를 찾을 수 없습니다.', 'code' => 404];
}
if ((int)$p['is_primary'] === 1) {
@@ -286,7 +284,7 @@ public static function setPrimary(int $deptId, int $userId, array $params)
if ($result instanceof JsonResponse) return $result;
return ApiResponse::response('result', $result);
return $result;
}
/** 부서 권한 목록 */
@@ -301,7 +299,7 @@ public static function listPermissions(int $deptId, array $params)
if ($p instanceof JsonResponse) return $p;
$dept = Department::query()->find($deptId);
if (!$dept) return ApiResponse::error('부서를 찾을 수 없습니다.', 404);
if (!$dept) return ['error' => '부서를 찾을 수 없습니다.', 'code' => 404];
$q = DepartmentPermission::query()
->whereNull('deleted_at')
@@ -315,7 +313,7 @@ public static function listPermissions(int $deptId, array $params)
$perPage = $p['per_page'] ?? 20;
$page = $p['page'] ?? null;
return ApiResponse::response('result', $q->paginate($perPage, ['*'], 'page', $page));
return $q->paginate($perPage, ['*'], 'page', $page);
}
/** 권한 부여/차단 upsert */
@@ -329,7 +327,7 @@ public static function upsertPermission(int $deptId, array $params)
if ($p instanceof JsonResponse) return $p;
$dept = Department::query()->find($deptId);
if (!$dept) return ApiResponse::error('부서를 찾을 수 없습니다.', 404);
if (!$dept) return ['error' => '부서를 찾을 수 없습니다.', 'code' => 404];
$payload = [
'department_id' => $deptId,
@@ -361,14 +359,14 @@ public static function revokePermission(int $deptId, int $permissionId, array $p
if (isset($p['menu_id'])) $q->where('menu_id', $p['menu_id']);
$rows = $q->get();
if ($rows->isEmpty()) return ApiResponse::error('대상 권한을 찾을 수 없습니다.', 404);
if ($rows->isEmpty()) return ['error' => '대상 권한을 찾을 수 없습니다.', 'code' => 404];
foreach ($rows as $row) $row->delete();
return ApiResponse::response('result', [
return [
'permission_id' => $permissionId,
'menu_id' => $p['menu_id'] ?? null,
'deleted_count' => $rows->count(),
]);
];
}
}