fix : 결과 전달시 두번 래핑되는 부분 수정
- 컨트롤러와 서비스에서 각각 래핑 후 결과 전달됨으로 이중 래핑되고 있음 -> 서비스에서 래핑하는 부분을 컨트롤러로 옮겨서 컨트롤러에서만 한번 래핑하는 걸로 수정
This commit is contained in:
@@ -117,19 +117,49 @@ public static function response($type = '', $query = '', $key = ''): array
|
|||||||
public static function handle(
|
public static function handle(
|
||||||
callable $callback,
|
callable $callback,
|
||||||
string $responseTitle = '요청'
|
string $responseTitle = '요청'
|
||||||
): JsonResponse {
|
): JsonResponse
|
||||||
|
{
|
||||||
try {
|
try {
|
||||||
$result = $callback();
|
$result = $callback();
|
||||||
|
|
||||||
|
// 이미 JsonResponse면 그대로 반환
|
||||||
if ($result instanceof JsonResponse) {
|
if ($result instanceof JsonResponse) {
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
return self::success(
|
// [신규] 서비스가 에러 ‘신호 배열’을 반환한 경우 감지
|
||||||
$result['data'] ?? null, $responseTitle." 성공", $result['query'] ?? []
|
// 허용 포맷 예:
|
||||||
);
|
// ['error' => 'NO_TENANT', 'code' => 400]
|
||||||
|
// ['code' => 404, 'message' => '데이터 없음']
|
||||||
|
if (is_array($result) && (
|
||||||
|
array_key_exists('error', $result) ||
|
||||||
|
(array_key_exists('code', $result) && is_numeric($result['code']) && (int)$result['code'] >= 400)
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
$code = (int)($result['code'] ?? 400);
|
||||||
|
$message = (string)($result['message'] ?? ($result['error'] ?? ($responseTitle.' 실패')));
|
||||||
|
$details = $result['details'] ?? null;
|
||||||
|
|
||||||
|
// 에러에도 쿼리 로그 포함되도록 error()가 처리하게 맡김
|
||||||
|
return self::error($message, $code, ['details' => $details]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 표준 박스( ['data'=>..., 'query'=>...] ) 하위호환
|
||||||
|
if (is_array($result) && array_key_exists('data', $result)) {
|
||||||
|
$data = $result['data'];
|
||||||
|
$debug = $result['query'] ?? [];
|
||||||
|
} else {
|
||||||
|
// 그냥 도메인 결과만 반환한 경우
|
||||||
|
$data = $result;
|
||||||
|
$debug = (app()->environment('local') && request()->is('api/*'))
|
||||||
|
? self::debugQueryLog()
|
||||||
|
: [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::success($data, $responseTitle.' 성공', $debug);
|
||||||
|
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
return self::error($responseTitle." 실패", 500, [
|
return self::error($responseTitle.' 실패', 500, [
|
||||||
'details' => $e->getMessage(),
|
'details' => $e->getMessage(),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,14 +4,12 @@
|
|||||||
|
|
||||||
use App\Helpers\ApiResponse;
|
use App\Helpers\ApiResponse;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Hash;
|
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
use App\Models\Members\User;
|
use App\Models\Members\User;
|
||||||
use App\Models\Members\UserTenant;
|
use App\Models\Members\UserTenant;
|
||||||
use Spatie\Permission\Models\Role;
|
|
||||||
|
|
||||||
|
|
||||||
class AdminService
|
class AdminService
|
||||||
@@ -25,7 +23,7 @@ public static function getTenants(array $params = [])
|
|||||||
{
|
{
|
||||||
$tenantId = app('tenant_id');
|
$tenantId = app('tenant_id');
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$page = isset($params['page']) ? (int)$params['page'] : 1;
|
$page = isset($params['page']) ? (int)$params['page'] : 1;
|
||||||
@@ -69,9 +67,7 @@ public static function getTenants(array $params = [])
|
|||||||
|
|
||||||
$q->orderBy($sortBy, $sortDir);
|
$q->orderBy($sortBy, $sortDir);
|
||||||
|
|
||||||
$data = $q->paginate($size, ['*'], 'page', $page);
|
return $data = $q->paginate($size, ['*'], 'page', $page);
|
||||||
|
|
||||||
return ApiResponse::response('result', $data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -83,7 +79,7 @@ public static function store(array $params = [])
|
|||||||
{
|
{
|
||||||
$tenantId = app('tenant_id');
|
$tenantId = app('tenant_id');
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 신규 회원 생성 + 역할 부여 지원
|
// 신규 회원 생성 + 역할 부여 지원
|
||||||
@@ -98,7 +94,7 @@ public static function store(array $params = [])
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$payload = $v->validated();
|
$payload = $v->validated();
|
||||||
@@ -136,9 +132,9 @@ public static function store(array $params = [])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ApiResponse::response('result', [
|
return [
|
||||||
'user' => $user->only(['id','user_id','name','email','phone']),
|
'user' => $user->only(['id','user_id','name','email','phone']),
|
||||||
]);
|
];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -150,20 +146,20 @@ public static function show(int $userNo)
|
|||||||
{
|
{
|
||||||
$tenantId = app('tenant_id');
|
$tenantId = app('tenant_id');
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$userNo) {
|
if (!$userNo) {
|
||||||
return ApiResponse::error('회원 정보가 없습니다.', 422);
|
return ['error' => '회원 정보가 없습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = User::whereHas('userTenants')->find($userNo);
|
$user = User::whereHas('userTenants')->find($userNo);
|
||||||
|
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
return ApiResponse::error('해당 사용자를 찾을 수 없습니다.', 404);
|
return ['error' => '해당 사용자를 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
return ApiResponse::response('result', $user);
|
return $user;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -175,22 +171,22 @@ public static function update(array $params = [], int $userNo)
|
|||||||
{
|
{
|
||||||
$tenantId = app('tenant_id');
|
$tenantId = app('tenant_id');
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
if (!$userNo) {
|
if (!$userNo) {
|
||||||
return ApiResponse::error('회원 정보가 없습니다.', 422);
|
return ['error' => '회원 정보가 없습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1) 유저 존재/테넌트 소속 확인
|
// 1) 유저 존재/테넌트 소속 확인
|
||||||
$user = User::find($userNo);
|
$user = User::find($userNo);
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
return ApiResponse::error('해당 회원을 찾을 수 없습니다.', 404);
|
return ['error' => '해당 회원을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
$linked = UserTenant::where('tenant_id', $tenantId)
|
$linked = UserTenant::where('tenant_id', $tenantId)
|
||||||
->where('user_id', $userNo)
|
->where('user_id', $userNo)
|
||||||
->exists();
|
->exists();
|
||||||
if (!$linked) {
|
if (!$linked) {
|
||||||
return ApiResponse::error('이 테넌트에 소속된 회원이 아닙니다.', 403);
|
return ['error' => '이 테넌트에 소속된 회원이 아닙니다.', 'code' => 403];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2) 프로필 + roles만 수정
|
// 2) 프로필 + roles만 수정
|
||||||
@@ -205,7 +201,7 @@ public static function update(array $params = [], int $userNo)
|
|||||||
'roles.*' => 'string|max:100',
|
'roles.*' => 'string|max:100',
|
||||||
]);
|
]);
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
$payload = $v->validated();
|
$payload = $v->validated();
|
||||||
|
|
||||||
@@ -214,7 +210,7 @@ public static function update(array $params = [], int $userNo)
|
|||||||
$hasProfileInput = (bool) array_intersect(array_keys($payload), $updatableKeys);
|
$hasProfileInput = (bool) array_intersect(array_keys($payload), $updatableKeys);
|
||||||
$hasRolesInput = array_key_exists('roles', $payload);
|
$hasRolesInput = array_key_exists('roles', $payload);
|
||||||
if (!$hasProfileInput && !$hasRolesInput) {
|
if (!$hasProfileInput && !$hasRolesInput) {
|
||||||
return ApiResponse::error('수정할 항목이 없습니다.', 422);
|
return ['error' => '수정할 항목이 없습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
return DB::transaction(function () use ($user, $payload, $tenantId, $updatableKeys) {
|
return DB::transaction(function () use ($user, $payload, $tenantId, $updatableKeys) {
|
||||||
@@ -252,10 +248,10 @@ public static function update(array $params = [], int $userNo)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ApiResponse::response('result', [
|
return [
|
||||||
'user' => $user->only(['id','user_id','name','email','phone']),
|
'user' => $user->only(['id','user_id','name','email','phone']),
|
||||||
'roles' => method_exists($user, 'getRoleNames') ? $user->getRoleNames() : [],
|
'roles' => method_exists($user, 'getRoleNames') ? $user->getRoleNames() : [],
|
||||||
]);
|
];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -267,10 +263,10 @@ public static function destroy(int $userNo)
|
|||||||
{
|
{
|
||||||
$tenantId = app('tenant_id');
|
$tenantId = app('tenant_id');
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
if (!$userNo) {
|
if (!$userNo) {
|
||||||
return ApiResponse::error('회원 정보가 없습니다.', 422);
|
return ['error' => '회원 정보가 없습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$ut = UserTenant::where('user_id',$userNo)
|
$ut = UserTenant::where('user_id',$userNo)
|
||||||
@@ -278,14 +274,14 @@ public static function destroy(int $userNo)
|
|||||||
->first();
|
->first();
|
||||||
|
|
||||||
if (!$ut) {
|
if (!$ut) {
|
||||||
return ApiResponse::error('해당 사용자를 찾을 수 없습니다.', 404);
|
return ['error' => '해당 사용자를 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$ut->left_at = now();
|
$ut->left_at = now();
|
||||||
$ut->save();
|
$ut->save();
|
||||||
$ut->delete(); // SoftDeletes 가정
|
$ut->delete(); // SoftDeletes 가정
|
||||||
|
|
||||||
return ApiResponse::response('success');
|
return 'success';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -295,10 +291,10 @@ public static function restore(int $userNo)
|
|||||||
{
|
{
|
||||||
$tenantId = app('tenant_id');
|
$tenantId = app('tenant_id');
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
if (!$userNo) {
|
if (!$userNo) {
|
||||||
return ApiResponse::error('회원 정보가 없습니다.', 422);
|
return ['error' => '회원 정보가 없습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$ut = UserTenant::withTrashed()
|
$ut = UserTenant::withTrashed()
|
||||||
@@ -307,7 +303,7 @@ public static function restore(int $userNo)
|
|||||||
->first();
|
->first();
|
||||||
|
|
||||||
if (!$ut) {
|
if (!$ut) {
|
||||||
return ApiResponse::error('해당 사용자를 찾을 수 없습니다.', 404);
|
return ['error' => '해당 사용자를 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($ut->trashed()) {
|
if ($ut->trashed()) {
|
||||||
@@ -316,7 +312,7 @@ public static function restore(int $userNo)
|
|||||||
$ut->save();
|
$ut->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
return ApiResponse::response('success');
|
return 'success';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -326,10 +322,10 @@ public static function toggle(int $userNo)
|
|||||||
{
|
{
|
||||||
$tenantId = app('tenant_id');
|
$tenantId = app('tenant_id');
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
if (!$userNo) {
|
if (!$userNo) {
|
||||||
return ApiResponse::error('회원 정보가 없습니다.', 422);
|
return ['error' => '회원 정보가 없습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$ut = UserTenant::where('tenant_id', $tenantId)
|
$ut = UserTenant::where('tenant_id', $tenantId)
|
||||||
@@ -337,13 +333,13 @@ public static function toggle(int $userNo)
|
|||||||
->first();
|
->first();
|
||||||
|
|
||||||
if (!$ut) {
|
if (!$ut) {
|
||||||
return ApiResponse::error('해당 사용자를 찾을 수 없습니다.', 404);
|
return ['error' => '해당 사용자를 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$ut->is_active = $ut->is_active ? 0 : 1;
|
$ut->is_active = $ut->is_active ? 0 : 1;
|
||||||
$ut->save();
|
$ut->save();
|
||||||
|
|
||||||
return ApiResponse::response('result',['is_active' => $ut->is_active]);
|
return ['is_active' => $ut->is_active];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -354,7 +350,7 @@ public static function attach(array $params = [])
|
|||||||
{
|
{
|
||||||
$tenantId = app('tenant_id');
|
$tenantId = app('tenant_id');
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$v = Validator::make($params, [
|
$v = Validator::make($params, [
|
||||||
@@ -362,13 +358,13 @@ public static function attach(array $params = [])
|
|||||||
'role_name' => 'required|string|max:100',
|
'role_name' => 'required|string|max:100',
|
||||||
]);
|
]);
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = User::find($params['user_id']);
|
$user = User::find($params['user_id']);
|
||||||
if (!method_exists($user, 'assignRole')) {
|
if (!method_exists($user, 'assignRole')) {
|
||||||
// Spatie 미사용 환경 방어
|
// Spatie 미사용 환경 방어
|
||||||
return ApiResponse::error('역할 시스템이 활성화되어 있지 않습니다.', 501);
|
return ['error' => '역할 시스템이 활성화되어 있지 않습니다.', 'code' => 501];
|
||||||
}
|
}
|
||||||
|
|
||||||
// teams(tenant) 스코프
|
// teams(tenant) 스코프
|
||||||
@@ -382,7 +378,7 @@ public static function attach(array $params = [])
|
|||||||
app()->instance('permission.team_id', $previousTeam);
|
app()->instance('permission.team_id', $previousTeam);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ApiResponse::response('success');
|
return 'success';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -393,7 +389,7 @@ public static function detach(array $params = [])
|
|||||||
{
|
{
|
||||||
$tenantId = app('tenant_id');
|
$tenantId = app('tenant_id');
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$v = Validator::make($params, [
|
$v = Validator::make($params, [
|
||||||
@@ -401,12 +397,12 @@ public static function detach(array $params = [])
|
|||||||
'role_name' => 'required|string|max:100',
|
'role_name' => 'required|string|max:100',
|
||||||
]);
|
]);
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = User::find($params['user_id']);
|
$user = User::find($params['user_id']);
|
||||||
if (!method_exists($user, 'removeRole')) {
|
if (!method_exists($user, 'removeRole')) {
|
||||||
return ApiResponse::error('역할 시스템이 활성화되어 있지 않습니다.', 501);
|
return ['error' => '역할 시스템이 활성화되어 있지 않습니다.', 'code' => 501];
|
||||||
}
|
}
|
||||||
|
|
||||||
$previousTeam = app()->has('permission.team_id') ? app('permission.team_id') : null;
|
$previousTeam = app()->has('permission.team_id') ? app('permission.team_id') : null;
|
||||||
@@ -418,7 +414,7 @@ public static function detach(array $params = [])
|
|||||||
app()->instance('permission.team_id', $previousTeam);
|
app()->instance('permission.team_id', $previousTeam);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ApiResponse::response('success');
|
return 'success';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -431,10 +427,10 @@ public static function reset(array $params = [],int $userNo)
|
|||||||
{
|
{
|
||||||
$tenantId = app('tenant_id');
|
$tenantId = app('tenant_id');
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
if (!$userNo) {
|
if (!$userNo) {
|
||||||
return ApiResponse::error('회원 정보가 없습니다.', 422);
|
return ['error' => '회원 정보가 없습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$v = Validator::make($params, [
|
$v = Validator::make($params, [
|
||||||
@@ -442,13 +438,13 @@ public static function reset(array $params = [],int $userNo)
|
|||||||
'return_password' => 'nullable|in:0,1', // 1이면 응답에 임시 비번 포함(개발용)
|
'return_password' => 'nullable|in:0,1', // 1이면 응답에 임시 비번 포함(개발용)
|
||||||
]);
|
]);
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
$payload = $v->validated();
|
$payload = $v->validated();
|
||||||
|
|
||||||
$user = User::find($userNo);
|
$user = User::find($userNo);
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
return ApiResponse::error('유저를 찾을 수 없습니다.', 404);
|
return ['error' => '유저를 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$new = $payload['new_password'] ?? Str::random(12);
|
$new = $payload['new_password'] ?? Str::random(12);
|
||||||
@@ -464,6 +460,6 @@ public static function reset(array $params = [],int $userNo)
|
|||||||
$resp['temp_password'] = $new;
|
$resp['temp_password'] = $new;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ApiResponse::response('result', $resp);
|
return $resp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ public static function list(int $roleId)
|
|||||||
|
|
||||||
$role = self::loadRoleOrError($roleId, $tenantId);
|
$role = self::loadRoleOrError($roleId, $tenantId);
|
||||||
if (!$role) {
|
if (!$role) {
|
||||||
return ApiResponse::error('역할을 찾을 수 없습니다.', 404);
|
return ['error' => '역할을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
self::setTeam($tenantId);
|
self::setTeam($tenantId);
|
||||||
@@ -93,7 +93,7 @@ public static function list(int $roleId)
|
|||||||
->orderBy('name')
|
->orderBy('name')
|
||||||
->get(['id','tenant_id','name','guard_name','created_at','updated_at']);
|
->get(['id','tenant_id','name','guard_name','created_at','updated_at']);
|
||||||
|
|
||||||
return ApiResponse::response('result', $perms);
|
return $perms;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 부여 (중복 무시) */
|
/** 부여 (중복 무시) */
|
||||||
@@ -103,7 +103,7 @@ public static function grant(int $roleId, array $params = [])
|
|||||||
|
|
||||||
$role = self::loadRoleOrError($roleId, $tenantId);
|
$role = self::loadRoleOrError($roleId, $tenantId);
|
||||||
if (!$role) {
|
if (!$role) {
|
||||||
return ApiResponse::error('역할을 찾을 수 없습니다.', 404);
|
return ['error' => '역할을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 유효성: 두 방식 중 하나만 요구하진 않지만, 최소 하나는 있어야 함
|
// 유효성: 두 방식 중 하나만 요구하진 않지만, 최소 하나는 있어야 함
|
||||||
@@ -118,23 +118,23 @@ public static function grant(int $roleId, array $params = [])
|
|||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
if (empty($params['permission_names']) && (empty($params['menus']) || empty($params['actions']))) {
|
if (empty($params['permission_names']) && (empty($params['menus']) || empty($params['actions']))) {
|
||||||
return ApiResponse::error('permission_names 또는 menus+actions 중 하나는 필요합니다.', 422);
|
return ['error' => 'permission_names 또는 menus+actions 중 하나는 필요합니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
self::setTeam($tenantId);
|
self::setTeam($tenantId);
|
||||||
|
|
||||||
$names = self::resolvePermissionNames($tenantId, $params);
|
$names = self::resolvePermissionNames($tenantId, $params);
|
||||||
if (empty($names)) {
|
if (empty($names)) {
|
||||||
return ApiResponse::error('유효한 퍼미션이 없습니다.', 422);
|
return ['error' => '유효한 퍼미션이 없습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Spatie: 이름 배열 부여 OK (teams 컨텍스트 적용됨)
|
// Spatie: 이름 배열 부여 OK (teams 컨텍스트 적용됨)
|
||||||
$role->givePermissionTo($names);
|
$role->givePermissionTo($names);
|
||||||
|
|
||||||
return ApiResponse::response('success');
|
return 'success';
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 회수 (없는 건 무시) */
|
/** 회수 (없는 건 무시) */
|
||||||
@@ -144,7 +144,7 @@ public static function revoke(int $roleId, array $params = [])
|
|||||||
|
|
||||||
$role = self::loadRoleOrError($roleId, $tenantId);
|
$role = self::loadRoleOrError($roleId, $tenantId);
|
||||||
if (!$role) {
|
if (!$role) {
|
||||||
return ApiResponse::error('역할을 찾을 수 없습니다.', 404);
|
return ['error' => '역할을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$v = Validator::make($params, [
|
$v = Validator::make($params, [
|
||||||
@@ -158,22 +158,22 @@ public static function revoke(int $roleId, array $params = [])
|
|||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
if (empty($params['permission_names']) && (empty($params['menus']) || empty($params['actions']))) {
|
if (empty($params['permission_names']) && (empty($params['menus']) || empty($params['actions']))) {
|
||||||
return ApiResponse::error('permission_names 또는 menus+actions 중 하나는 필요합니다.', 422);
|
return ['error' => 'permission_names 또는 menus+actions 중 하나는 필요합니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
self::setTeam($tenantId);
|
self::setTeam($tenantId);
|
||||||
|
|
||||||
$names = self::resolvePermissionNames($tenantId, $params);
|
$names = self::resolvePermissionNames($tenantId, $params);
|
||||||
if (empty($names)) {
|
if (empty($names)) {
|
||||||
return ApiResponse::error('유효한 퍼미션이 없습니다.', 422);
|
return ['error' => '유효한 퍼미션이 없습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$role->revokePermissionTo($names);
|
$role->revokePermissionTo($names);
|
||||||
|
|
||||||
return ApiResponse::response('success');
|
return 'success';
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 동기화(완전 교체) */
|
/** 동기화(완전 교체) */
|
||||||
@@ -183,7 +183,7 @@ public static function sync(int $roleId, array $params = [])
|
|||||||
|
|
||||||
$role = self::loadRoleOrError($roleId, $tenantId);
|
$role = self::loadRoleOrError($roleId, $tenantId);
|
||||||
if (!$role) {
|
if (!$role) {
|
||||||
return ApiResponse::error('역할을 찾을 수 없습니다.', 404);
|
return ['error' => '역할을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$v = Validator::make($params, [
|
$v = Validator::make($params, [
|
||||||
@@ -197,10 +197,10 @@ public static function sync(int $roleId, array $params = [])
|
|||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
if (empty($params['permission_names']) && (empty($params['menus']) || empty($params['actions']))) {
|
if (empty($params['permission_names']) && (empty($params['menus']) || empty($params['actions']))) {
|
||||||
return ApiResponse::error('permission_names 또는 menus+actions 중 하나는 필요합니다.', 422);
|
return ['error' => 'permission_names 또는 menus+actions 중 하나는 필요합니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
self::setTeam($tenantId);
|
self::setTeam($tenantId);
|
||||||
@@ -209,6 +209,6 @@ public static function sync(int $roleId, array $params = [])
|
|||||||
// 동기화
|
// 동기화
|
||||||
$role->syncPermissions($names);
|
$role->syncPermissions($names);
|
||||||
|
|
||||||
return ApiResponse::response('success');
|
return 'success';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public static function index(array $params = [])
|
|||||||
$list = $query->orderByDesc('id')
|
$list = $query->orderByDesc('id')
|
||||||
->paginate($size, ['*'], 'page', $page);
|
->paginate($size, ['*'], 'page', $page);
|
||||||
|
|
||||||
return ApiResponse::response('result', $list);
|
return $list;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 생성 */
|
/** 생성 */
|
||||||
@@ -54,7 +54,7 @@ public static function store(array $params = [])
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Spatie 팀(테넌트) 컨텍스트
|
// Spatie 팀(테넌트) 컨텍스트
|
||||||
@@ -67,7 +67,7 @@ public static function store(array $params = [])
|
|||||||
'description' => $params['description'] ?? null,
|
'description' => $params['description'] ?? null,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return ApiResponse::response('result', $role);
|
return $role;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 단건 */
|
/** 단건 */
|
||||||
@@ -80,10 +80,10 @@ public static function show(int $id)
|
|||||||
->find($id);
|
->find($id);
|
||||||
|
|
||||||
if (!$role) {
|
if (!$role) {
|
||||||
return ApiResponse::error('역할을 찾을 수 없습니다.', 404);
|
return ['error' => '역할을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
return ApiResponse::response('result', $role);
|
return $role;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 수정 */
|
/** 수정 */
|
||||||
@@ -96,7 +96,7 @@ public static function update(int $id, array $params = [])
|
|||||||
->find($id);
|
->find($id);
|
||||||
|
|
||||||
if (!$role) {
|
if (!$role) {
|
||||||
return ApiResponse::error('역할을 찾을 수 없습니다.', 404);
|
return ['error' => '역할을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$v = Validator::make($params, [
|
$v = Validator::make($params, [
|
||||||
@@ -110,12 +110,12 @@ public static function update(int $id, array $params = [])
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$role->fill($v->validated())->save();
|
$role->fill($v->validated())->save();
|
||||||
|
|
||||||
return ApiResponse::response('result', $role->fresh());
|
return $role->fresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 삭제 (하드삭제) */
|
/** 삭제 (하드삭제) */
|
||||||
@@ -128,13 +128,13 @@ public static function destroy(int $id)
|
|||||||
->find($id);
|
->find($id);
|
||||||
|
|
||||||
if (!$role) {
|
if (!$role) {
|
||||||
return ApiResponse::error('역할을 찾을 수 없습니다.', 404);
|
return ['error' => '역할을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
DB::transaction(function () use ($role) {
|
DB::transaction(function () use ($role) {
|
||||||
$role->delete(); // Spatie Role 기본: soft delete 없음
|
$role->delete(); // Spatie Role 기본: soft delete 없음
|
||||||
});
|
});
|
||||||
|
|
||||||
return ApiResponse::response('success');
|
return 'success';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ public static function list(int $userId)
|
|||||||
|
|
||||||
$user = self::loadUserOrError($userId);
|
$user = self::loadUserOrError($userId);
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
return ApiResponse::error('사용자를 찾을 수 없습니다.', 404);
|
return ['error' => '사용자를 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
self::setTeam($tenantId);
|
self::setTeam($tenantId);
|
||||||
@@ -86,7 +86,7 @@ public static function list(int $userId)
|
|||||||
->select(['roles.id','roles.tenant_id','roles.name','roles.description','roles.guard_name','roles.created_at','roles.updated_at'])
|
->select(['roles.id','roles.tenant_id','roles.name','roles.description','roles.guard_name','roles.created_at','roles.updated_at'])
|
||||||
->orderBy('roles.id', 'desc');
|
->orderBy('roles.id', 'desc');
|
||||||
|
|
||||||
return ApiResponse::response('get', $builder);
|
return $builder->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 부여 (중복 무시) */
|
/** 부여 (중복 무시) */
|
||||||
@@ -96,7 +96,7 @@ public static function grant(int $userId, array $params = [])
|
|||||||
|
|
||||||
$user = self::loadUserOrError($userId);
|
$user = self::loadUserOrError($userId);
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
return ApiResponse::error('사용자를 찾을 수 없습니다.', 404);
|
return ['error' => '사용자를 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$v = Validator::make($params, [
|
$v = Validator::make($params, [
|
||||||
@@ -106,21 +106,21 @@ public static function grant(int $userId, array $params = [])
|
|||||||
'role_ids.*' => 'integer|min:1',
|
'role_ids.*' => 'integer|min:1',
|
||||||
]);
|
]);
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
if (empty($params['role_names']) && empty($params['role_ids'])) {
|
if (empty($params['role_names']) && empty($params['role_ids'])) {
|
||||||
return ApiResponse::error('role_names 또는 role_ids 중 하나는 필요합니다.', 422);
|
return ['error' => 'role_names 또는 role_ids 중 하나는 필요합니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
self::setTeam($tenantId);
|
self::setTeam($tenantId);
|
||||||
|
|
||||||
$names = self::resolveRoleNames($tenantId, $params);
|
$names = self::resolveRoleNames($tenantId, $params);
|
||||||
if (empty($names)) {
|
if (empty($names)) {
|
||||||
return ApiResponse::error('유효한 역할이 없습니다.', 422);
|
return ['error' => '유효한 역할이 없습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$user->assignRole($names); // teams 컨텍스트 적용됨
|
$user->assignRole($names); // teams 컨텍스트 적용됨
|
||||||
return ApiResponse::response('success');
|
return 'success';
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 회수 (없는 건 무시) */
|
/** 회수 (없는 건 무시) */
|
||||||
@@ -130,7 +130,7 @@ public static function revoke(int $userId, array $params = [])
|
|||||||
|
|
||||||
$user = self::loadUserOrError($userId);
|
$user = self::loadUserOrError($userId);
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
return ApiResponse::error('사용자를 찾을 수 없습니다.', 404);
|
return ['error' => '사용자를 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$v = Validator::make($params, [
|
$v = Validator::make($params, [
|
||||||
@@ -140,21 +140,21 @@ public static function revoke(int $userId, array $params = [])
|
|||||||
'role_ids.*' => 'integer|min:1',
|
'role_ids.*' => 'integer|min:1',
|
||||||
]);
|
]);
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
if (empty($params['role_names']) && empty($params['role_ids'])) {
|
if (empty($params['role_names']) && empty($params['role_ids'])) {
|
||||||
return ApiResponse::error('role_names 또는 role_ids 중 하나는 필요합니다.', 422);
|
return ['error' => 'role_names 또는 role_ids 중 하나는 필요합니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
self::setTeam($tenantId);
|
self::setTeam($tenantId);
|
||||||
|
|
||||||
$names = self::resolveRoleNames($tenantId, $params);
|
$names = self::resolveRoleNames($tenantId, $params);
|
||||||
if (empty($names)) {
|
if (empty($names)) {
|
||||||
return ApiResponse::error('유효한 역할이 없습니다.', 422);
|
return ['error' => '유효한 역할이 없습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$user->removeRole($names); // 배열 허용
|
$user->removeRole($names); // 배열 허용
|
||||||
return ApiResponse::response('success');
|
return 'success';
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 동기화(완전 교체) */
|
/** 동기화(완전 교체) */
|
||||||
@@ -164,7 +164,7 @@ public static function sync(int $userId, array $params = [])
|
|||||||
|
|
||||||
$user = self::loadUserOrError($userId);
|
$user = self::loadUserOrError($userId);
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
return ApiResponse::error('사용자를 찾을 수 없습니다.', 404);
|
return ['error' => '사용자를 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$v = Validator::make($params, [
|
$v = Validator::make($params, [
|
||||||
@@ -174,10 +174,10 @@ public static function sync(int $userId, array $params = [])
|
|||||||
'role_ids.*' => 'integer|min:1',
|
'role_ids.*' => 'integer|min:1',
|
||||||
]);
|
]);
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
if (empty($params['role_names']) && empty($params['role_ids'])) {
|
if (empty($params['role_names']) && empty($params['role_ids'])) {
|
||||||
return ApiResponse::error('role_names 또는 role_ids 중 하나는 필요합니다.', 422);
|
return ['error' => 'role_names 또는 role_ids 중 하나는 필요합니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
self::setTeam($tenantId);
|
self::setTeam($tenantId);
|
||||||
@@ -185,10 +185,10 @@ public static function sync(int $userId, array $params = [])
|
|||||||
$names = self::resolveRoleNames($tenantId, $params);
|
$names = self::resolveRoleNames($tenantId, $params);
|
||||||
if (empty($names)) {
|
if (empty($names)) {
|
||||||
// 정책상 빈 목록 sync 허용 시: $user->syncRoles([]) 로 전부 제거 가능
|
// 정책상 빈 목록 sync 허용 시: $user->syncRoles([]) 로 전부 제거 가능
|
||||||
return ApiResponse::error('유효한 역할이 없습니다.', 422);
|
return ['error' => '유효한 역할이 없습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$user->syncRoles($names);
|
$user->syncRoles($names);
|
||||||
return ApiResponse::response('success');
|
return 'success';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,34 +12,34 @@ class BomService
|
|||||||
public static function getBoms()
|
public static function getBoms()
|
||||||
{
|
{
|
||||||
$query = new Bom();
|
$query = new Bom();
|
||||||
return ApiResponse::response('get', $query);
|
return $query->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function setBom()
|
public static function setBom()
|
||||||
{
|
{
|
||||||
$query = DB::table('COM_CODE')
|
$query = DB::table('COM_CODE')
|
||||||
->select(['CODE_TP_ID', 'CODE_ID', 'CODE_VAL', 'CODE_DESC', 'USE_YN']);
|
->select(['CODE_TP_ID', 'CODE_ID', 'CODE_VAL', 'CODE_DESC', 'USE_YN']);
|
||||||
return ApiResponse::response('get', $query);
|
return $query->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getBom(int $id)
|
public static function getBom(int $id)
|
||||||
{
|
{
|
||||||
$query = Bom::find($id);
|
$query = Bom::find($id);
|
||||||
return ApiResponse::response('get', $query);
|
return $query->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function updateBom(int $id)
|
public static function updateBom(int $id)
|
||||||
{
|
{
|
||||||
$query = DB::table('COM_CODE')
|
$query = DB::table('COM_CODE')
|
||||||
->select(['CODE_TP_ID', 'CODE_ID', 'CODE_VAL', 'CODE_DESC', 'USE_YN']);
|
->select(['CODE_TP_ID', 'CODE_ID', 'CODE_VAL', 'CODE_DESC', 'USE_YN']);
|
||||||
return ApiResponse::response('get', $query);
|
return $query->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function destoryBom(int $id)
|
public static function destoryBom(int $id)
|
||||||
{
|
{
|
||||||
$query = DB::table('COM_CODE')
|
$query = DB::table('COM_CODE')
|
||||||
->select(['CODE_TP_ID', 'CODE_ID', 'CODE_VAL', 'CODE_DESC', 'USE_YN']);
|
->select(['CODE_TP_ID', 'CODE_ID', 'CODE_VAL', 'CODE_DESC', 'USE_YN']);
|
||||||
return ApiResponse::response('get', $query);
|
return $query->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ private static function v(array $params, array $rules)
|
|||||||
{
|
{
|
||||||
$v = Validator::make($params, $rules);
|
$v = Validator::make($params, $rules);
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
return $v->validated();
|
return $v->validated();
|
||||||
}
|
}
|
||||||
@@ -54,7 +54,7 @@ public static function index(array $params)
|
|||||||
$page = $p['page'] ?? null;
|
$page = $p['page'] ?? null;
|
||||||
|
|
||||||
// 페이징 객체는 'result'로 반환
|
// 페이징 객체는 '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'])) {
|
if (!empty($p['code'])) {
|
||||||
$exists = Department::query()->where('code', $p['code'])->exists();
|
$exists = Department::query()->where('code', $p['code'])->exists();
|
||||||
if ($exists) return ApiResponse::error('이미 존재하는 부서 코드입니다.', 409);
|
if ($exists) return ['error' => '이미 존재하는 부서 코드입니다.', 'code' => 409];
|
||||||
}
|
}
|
||||||
|
|
||||||
$dept = Department::create([
|
$dept = Department::create([
|
||||||
@@ -85,19 +85,17 @@ public static function store(array $params)
|
|||||||
'updated_by' => $p['created_by'] ?? null,
|
'updated_by' => $p['created_by'] ?? null,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return ApiResponse::response('result', $dept->fresh());
|
return $dept->fresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 단건 */
|
/** 단건 */
|
||||||
public static function show(int $id, array $params)
|
public static function show(int $id, array $params)
|
||||||
{
|
{
|
||||||
if (!$id) return ApiResponse::error('id가 필요합니다.', 400);
|
if (!$id) return ['error' => 'id가 필요합니다.', 'code' => 400];
|
||||||
|
|
||||||
$q = Department::query()->where('id', $id);
|
|
||||||
$res = ApiResponse::response('first', $q);
|
|
||||||
|
|
||||||
|
$res = Department::query()->where('id', $id)->first();
|
||||||
if (empty($res['data'])) {
|
if (empty($res['data'])) {
|
||||||
return ApiResponse::error('부서를 찾을 수 없습니다.', 404);
|
return ['error' => '부서를 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
@@ -105,7 +103,7 @@ public static function show(int $id, array $params)
|
|||||||
/** 수정 */
|
/** 수정 */
|
||||||
public static function update(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, [
|
$p = self::v($params, [
|
||||||
'code' => 'nullable|string|max:50',
|
'code' => 'nullable|string|max:50',
|
||||||
@@ -118,14 +116,14 @@ public static function update(int $id, array $params)
|
|||||||
if ($p instanceof JsonResponse) return $p;
|
if ($p instanceof JsonResponse) return $p;
|
||||||
|
|
||||||
$dept = Department::query()->find($id);
|
$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'])) {
|
if (array_key_exists('code', $p) && !is_null($p['code'])) {
|
||||||
$exists = Department::query()
|
$exists = Department::query()
|
||||||
->where('code', $p['code'])
|
->where('code', $p['code'])
|
||||||
->where('id', '!=', $id)
|
->where('id', '!=', $id)
|
||||||
->exists();
|
->exists();
|
||||||
if ($exists) return ApiResponse::error('이미 존재하는 부서 코드입니다.', 409);
|
if ($exists) return ['error' => '이미 존재하는 부서 코드입니다.', 'code' => 409];
|
||||||
}
|
}
|
||||||
|
|
||||||
$dept->fill([
|
$dept->fill([
|
||||||
@@ -137,13 +135,13 @@ public static function update(int $id, array $params)
|
|||||||
'updated_by' => $p['updated_by'] ?? $dept->updated_by,
|
'updated_by' => $p['updated_by'] ?? $dept->updated_by,
|
||||||
])->save();
|
])->save();
|
||||||
|
|
||||||
return ApiResponse::response('result', $dept->fresh());
|
return $dept->fresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 삭제(soft) */
|
/** 삭제(soft) */
|
||||||
public static function destroy(int $id, array $params)
|
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, [
|
$p = self::v($params, [
|
||||||
'deleted_by' => 'nullable|integer|min:1',
|
'deleted_by' => 'nullable|integer|min:1',
|
||||||
@@ -151,7 +149,7 @@ public static function destroy(int $id, array $params)
|
|||||||
if ($p instanceof JsonResponse) return $p;
|
if ($p instanceof JsonResponse) return $p;
|
||||||
|
|
||||||
$dept = Department::query()->find($id);
|
$dept = Department::query()->find($id);
|
||||||
if (!$dept) return ApiResponse::error('부서를 찾을 수 없습니다.', 404);
|
if (!$dept) return ['error' => '부서를 찾을 수 없습니다.', 'code' => 404];
|
||||||
|
|
||||||
if (!empty($p['deleted_by'])) {
|
if (!empty($p['deleted_by'])) {
|
||||||
$dept->deleted_by = $p['deleted_by'];
|
$dept->deleted_by = $p['deleted_by'];
|
||||||
@@ -159,7 +157,7 @@ public static function destroy(int $id, array $params)
|
|||||||
}
|
}
|
||||||
$dept->delete();
|
$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;
|
if ($p instanceof JsonResponse) return $p;
|
||||||
|
|
||||||
$dept = Department::query()->find($deptId);
|
$dept = Department::query()->find($deptId);
|
||||||
if (!$dept) return ApiResponse::error('부서를 찾을 수 없습니다.', 404);
|
if (!$dept) return ['error' => '부서를 찾을 수 없습니다.', 'code' => 404];
|
||||||
|
|
||||||
$builder = $dept->departmentUsers()->with('user')
|
$builder = $dept->departmentUsers()->with('user')
|
||||||
->orderByDesc('is_primary')->orderBy('id');
|
->orderByDesc('is_primary')->orderBy('id');
|
||||||
@@ -180,7 +178,7 @@ public static function listUsers(int $deptId, array $params)
|
|||||||
$perPage = $p['per_page'] ?? 20;
|
$perPage = $p['per_page'] ?? 20;
|
||||||
$page = $p['page'] ?? null;
|
$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;
|
if ($p instanceof JsonResponse) return $p;
|
||||||
|
|
||||||
$dept = Department::query()->find($deptId);
|
$dept = Department::query()->find($deptId);
|
||||||
if (!$dept) return ApiResponse::error('부서를 찾을 수 없습니다.', 404);
|
if (!$dept) return ['error' => '부서를 찾을 수 없습니다.', 'code' => 404];
|
||||||
|
|
||||||
$result = DB::transaction(function () use ($dept, $p) {
|
$result = DB::transaction(function () use ($dept, $p) {
|
||||||
$du = DepartmentUser::withTrashed()
|
$du = DepartmentUser::withTrashed()
|
||||||
@@ -203,7 +201,7 @@ public static function attachUser(int $deptId, array $params)
|
|||||||
->first();
|
->first();
|
||||||
|
|
||||||
if ($du && is_null($du->deleted_at)) {
|
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) {
|
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;
|
if ($result instanceof JsonResponse) return $result;
|
||||||
|
|
||||||
return ApiResponse::response('result', $result);
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 사용자 제거(soft) */
|
/** 사용자 제거(soft) */
|
||||||
@@ -244,14 +242,14 @@ public static function detachUser(int $deptId, int $userId, array $params)
|
|||||||
->where('user_id', $userId)
|
->where('user_id', $userId)
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
if (!$du) return ApiResponse::error('배정된 사용자를 찾을 수 없습니다.', 404);
|
if (!$du) return ['error' => '배정된 사용자를 찾을 수 없습니다.', 'code' => 404];
|
||||||
|
|
||||||
$du->delete();
|
$du->delete();
|
||||||
|
|
||||||
return ApiResponse::response('result', [
|
return [
|
||||||
'user_id' => $userId,
|
'user_id' => $userId,
|
||||||
'deleted_at' => now()->toDateTimeString(),
|
'deleted_at' => now()->toDateTimeString(),
|
||||||
]);
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 주부서 설정/해제 */
|
/** 주부서 설정/해제 */
|
||||||
@@ -269,7 +267,7 @@ public static function setPrimary(int $deptId, int $userId, array $params)
|
|||||||
->first();
|
->first();
|
||||||
|
|
||||||
if (!$du) {
|
if (!$du) {
|
||||||
return ApiResponse::error('배정된 사용자를 찾을 수 없습니다.', 404);
|
return ['error' => '배정된 사용자를 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((int)$p['is_primary'] === 1) {
|
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;
|
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;
|
if ($p instanceof JsonResponse) return $p;
|
||||||
|
|
||||||
$dept = Department::query()->find($deptId);
|
$dept = Department::query()->find($deptId);
|
||||||
if (!$dept) return ApiResponse::error('부서를 찾을 수 없습니다.', 404);
|
if (!$dept) return ['error' => '부서를 찾을 수 없습니다.', 'code' => 404];
|
||||||
|
|
||||||
$q = DepartmentPermission::query()
|
$q = DepartmentPermission::query()
|
||||||
->whereNull('deleted_at')
|
->whereNull('deleted_at')
|
||||||
@@ -315,7 +313,7 @@ public static function listPermissions(int $deptId, array $params)
|
|||||||
$perPage = $p['per_page'] ?? 20;
|
$perPage = $p['per_page'] ?? 20;
|
||||||
$page = $p['page'] ?? null;
|
$page = $p['page'] ?? null;
|
||||||
|
|
||||||
return ApiResponse::response('result', $q->paginate($perPage, ['*'], 'page', $page));
|
return $q->paginate($perPage, ['*'], 'page', $page);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 권한 부여/차단 upsert */
|
/** 권한 부여/차단 upsert */
|
||||||
@@ -329,7 +327,7 @@ public static function upsertPermission(int $deptId, array $params)
|
|||||||
if ($p instanceof JsonResponse) return $p;
|
if ($p instanceof JsonResponse) return $p;
|
||||||
|
|
||||||
$dept = Department::query()->find($deptId);
|
$dept = Department::query()->find($deptId);
|
||||||
if (!$dept) return ApiResponse::error('부서를 찾을 수 없습니다.', 404);
|
if (!$dept) return ['error' => '부서를 찾을 수 없습니다.', 'code' => 404];
|
||||||
|
|
||||||
$payload = [
|
$payload = [
|
||||||
'department_id' => $deptId,
|
'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']);
|
if (isset($p['menu_id'])) $q->where('menu_id', $p['menu_id']);
|
||||||
|
|
||||||
$rows = $q->get();
|
$rows = $q->get();
|
||||||
if ($rows->isEmpty()) return ApiResponse::error('대상 권한을 찾을 수 없습니다.', 404);
|
if ($rows->isEmpty()) return ['error' => '대상 권한을 찾을 수 없습니다.', 'code' => 404];
|
||||||
|
|
||||||
foreach ($rows as $row) $row->delete();
|
foreach ($rows as $row) $row->delete();
|
||||||
|
|
||||||
return ApiResponse::response('result', [
|
return [
|
||||||
'permission_id' => $permissionId,
|
'permission_id' => $permissionId,
|
||||||
'menu_id' => $p['menu_id'] ?? null,
|
'menu_id' => $p['menu_id'] ?? null,
|
||||||
'deleted_count' => $rows->count(),
|
'deleted_count' => $rows->count(),
|
||||||
]);
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public static function saveFiles($files, string $table, string $t_id, string $t_
|
|||||||
'REG_USER_NO' => session('Adm.idx') ?? 1,
|
'REG_USER_NO' => session('Adm.idx') ?? 1,
|
||||||
]);
|
]);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return ApiResponse::error('파일업로드 실패', 422);
|
return ['error' => '파일업로드 실패', 'code' => 422];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -92,7 +92,7 @@ public static function uploadFiles($request)
|
|||||||
'REG_USER_NO' => session('Adm.idx') ?? 1,
|
'REG_USER_NO' => session('Adm.idx') ?? 1,
|
||||||
]);
|
]);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return ApiResponse::error('파일업로드 실패', 422);
|
return ['error' => '파일업로드 실패', 'code' => 422];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,7 +136,7 @@ public static function getFiles(array $params): array
|
|||||||
$query->where('SF.T_ID_TYPE', $tType);
|
$query->where('SF.T_ID_TYPE', $tType);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ApiResponse::response('getSub', $query, $params['debug'], 'T_ID');
|
return $query->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function deleteFiles(array $params): string
|
public static function deleteFiles(array $params): string
|
||||||
@@ -180,9 +180,9 @@ public static function findFile(array $params): ?array
|
|||||||
->select('F_NAME', 'T_ID', 'F_TYPE', DB::raw("IFNULL((SELECT COM_NAME FROM COMPANY_INFO CI WHERE SF.T_ID = CI.COM_NO AND SF.TABLE = 'COMPANY_INFO' LIMIT 1), '') as COM_NAME"));
|
->select('F_NAME', 'T_ID', 'F_TYPE', DB::raw("IFNULL((SELECT COM_NAME FROM COMPANY_INFO CI WHERE SF.T_ID = CI.COM_NO AND SF.TABLE = 'COMPANY_INFO' LIMIT 1), '') as COM_NAME"));
|
||||||
|
|
||||||
if($F_NO) $query->where('F_NO', $F_NO);
|
if($F_NO) $query->where('F_NO', $F_NO);
|
||||||
else $query->where('R_NAME', $fileName);
|
else $query->where('R_NAME', $fileName)->first();
|
||||||
|
|
||||||
return ApiResponse::response('first', $query, $params['debug']);
|
return $query;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ public static function getMembers($request)
|
|||||||
})->debug();
|
})->debug();
|
||||||
$query = $query->paginate($pageSize, ['*'], 'page', $pageNo);
|
$query = $query->paginate($pageSize, ['*'], 'page', $pageNo);
|
||||||
|
|
||||||
return ApiResponse::response('result', $query);
|
return $query;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ public static function getMember(int $userNo)
|
|||||||
$query = User::whereHas('userTenants', function($q) {
|
$query = User::whereHas('userTenants', function($q) {
|
||||||
$q->active();
|
$q->active();
|
||||||
})->where('id', $userNo);
|
})->where('id', $userNo);
|
||||||
return ApiResponse::response('first', $query);
|
return $query->first();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -59,7 +59,7 @@ public static function getMyInfo()
|
|||||||
$data['tenant'] = $tenant;
|
$data['tenant'] = $tenant;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ApiResponse::response('result', $data);
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -83,14 +83,14 @@ public static function getMyUpdate($request)
|
|||||||
$user = User::find($apiUser);
|
$user = User::find($apiUser);
|
||||||
|
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
return ApiResponse::error('User not found.', 404);
|
return ['error' => 'User not found.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 사용자 정보 업데이트
|
// 사용자 정보 업데이트
|
||||||
$user->update($validatedData);
|
$user->update($validatedData);
|
||||||
|
|
||||||
// 수정 성공 시 success 반환
|
// 수정 성공 시 success 반환
|
||||||
return ApiResponse::response('success');
|
return 'success';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -109,23 +109,23 @@ public static function setMyPassword($request)
|
|||||||
// 선택적으로 확인 비밀번호가 온 경우 체크
|
// 선택적으로 확인 비밀번호가 온 경우 체크
|
||||||
if ($request->filled('new_password_confirmation') &&
|
if ($request->filled('new_password_confirmation') &&
|
||||||
$request->input('new_password_confirmation') !== $validated['new_password']) {
|
$request->input('new_password_confirmation') !== $validated['new_password']) {
|
||||||
return ApiResponse::error('비밀번호 확인이 일치하지 않습니다.', 400);
|
return ['error' => '비밀번호 확인이 일치하지 않습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 유저 조회
|
// 유저 조회
|
||||||
$user = User::find($apiUserId);
|
$user = User::find($apiUserId);
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
return ApiResponse::error('유저를 찾을 수 없음', 404);
|
return ['error' => '유저를 찾을 수 없음', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 현재 비밀번호 확인
|
// 현재 비밀번호 확인
|
||||||
if (!Hash::check($validated['current_password'], $user->password)) {
|
if (!Hash::check($validated['current_password'], $user->password)) {
|
||||||
return ApiResponse::error('현재 비밀번호가 일치하지 않습니다.', 400);
|
return ['error' => '현재 비밀번호가 일치하지 않습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 기존 비밀번호와 동일한지 방지
|
// 기존 비밀번호와 동일한지 방지
|
||||||
if (Hash::check($validated['new_password'], $user->password)) {
|
if (Hash::check($validated['new_password'], $user->password)) {
|
||||||
return ApiResponse::error('새 비밀번호가 기존 비밀번호와 동일합니다.', 400);
|
return ['error' => '새 비밀번호가 기존 비밀번호와 동일합니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 비밀번호 변경 (guarded 우회: 직접 대입 + save)
|
// 비밀번호 변경 (guarded 우회: 직접 대입 + save)
|
||||||
@@ -135,7 +135,7 @@ public static function setMyPassword($request)
|
|||||||
// (선택) 모든 기존 토큰 무효화하려면 아래 주석 해제
|
// (선택) 모든 기존 토큰 무효화하려면 아래 주석 해제
|
||||||
// $user->tokens()->delete();
|
// $user->tokens()->delete();
|
||||||
|
|
||||||
return ApiResponse::response('success');
|
return 'success';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -154,7 +154,7 @@ public static function getMyTenants()
|
|||||||
'user_tenants.is_default'
|
'user_tenants.is_default'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return ApiResponse::response('result', $data);
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -179,9 +179,9 @@ public static function switchMyTenant(int $tenantId)
|
|||||||
->update(['is_default' => 1]);
|
->update(['is_default' => 1]);
|
||||||
|
|
||||||
if (!$updated) {
|
if (!$updated) {
|
||||||
return ApiResponse::error('해당 테넌트를 찾을 수 없습니다.', 404);
|
return ['error' => '해당 테넌트를 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
return ApiResponse::response('success');
|
return 'success';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public static function index(array $params)
|
|||||||
$q->orderBy('parent_id')->orderBy('sort_order');
|
$q->orderBy('parent_id')->orderBy('sort_order');
|
||||||
|
|
||||||
// Builder 그대로 전달해야 쿼리로그/표준응답 형식 유지
|
// Builder 그대로 전달해야 쿼리로그/표준응답 형식 유지
|
||||||
return ApiResponse::response('get', $q);
|
return $q->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -49,15 +49,12 @@ public static function show(array $params)
|
|||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
|
|
||||||
if (!$id) {
|
if (!$id) {
|
||||||
return ApiResponse::error('id가 필요합니다.', 400);
|
return ['error' => 'id가 필요합니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$q = Menu::withShared($tenantId)->where('id', $id);
|
$res = Menu::withShared($tenantId)->find($id);
|
||||||
|
|
||||||
// first 쿼리를 ApiResponse에 위임 (존재X면 null 반환)
|
|
||||||
$res = ApiResponse::response('first', $q);
|
|
||||||
if (empty($res['data'])) {
|
if (empty($res['data'])) {
|
||||||
return ApiResponse::error('Menu not found', 404);
|
return ['error' => 'Menu not found', 'code' => 404];
|
||||||
}
|
}
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
@@ -83,7 +80,7 @@ public static function store(array $params)
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
$data = $v->validated();
|
$data = $v->validated();
|
||||||
|
|
||||||
@@ -103,7 +100,7 @@ public static function store(array $params)
|
|||||||
$menu->save();
|
$menu->save();
|
||||||
|
|
||||||
// 생성 결과를 그대로 전달
|
// 생성 결과를 그대로 전달
|
||||||
return ApiResponse::response('result', $menu->fresh());
|
return $menu->fresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -116,7 +113,7 @@ public static function update(array $params)
|
|||||||
$userId = self::actorId();
|
$userId = self::actorId();
|
||||||
|
|
||||||
if (!$id) {
|
if (!$id) {
|
||||||
return ApiResponse::error('id가 필요합니다.', 400);
|
return ['error' => 'id가 필요합니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$v = Validator::make($params, [
|
$v = Validator::make($params, [
|
||||||
@@ -132,13 +129,13 @@ public static function update(array $params)
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
$data = $v->validated();
|
$data = $v->validated();
|
||||||
|
|
||||||
$menu = Menu::withShared($tenantId)->where('id', $id)->first();
|
$menu = Menu::withShared($tenantId)->where('id', $id)->first();
|
||||||
if (!$menu) {
|
if (!$menu) {
|
||||||
return ApiResponse::error('Menu not found', 404);
|
return ['error' => 'Menu not found', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$update = Arr::only($data, [
|
$update = Arr::only($data, [
|
||||||
@@ -147,13 +144,13 @@ public static function update(array $params)
|
|||||||
$update = array_filter($update, fn($v) => !is_null($v));
|
$update = array_filter($update, fn($v) => !is_null($v));
|
||||||
|
|
||||||
if (empty($update)) {
|
if (empty($update)) {
|
||||||
return ApiResponse::error('수정할 데이터가 없습니다.', 400);
|
return ['error' => '수정할 데이터가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$update['updated_by'] = $userId;
|
$update['updated_by'] = $userId;
|
||||||
$menu->fill($update)->save();
|
$menu->fill($update)->save();
|
||||||
|
|
||||||
return ApiResponse::response('result', $menu->fresh());
|
return $menu->fresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -166,19 +163,19 @@ public static function destroy(array $params)
|
|||||||
$userId = self::actorId();
|
$userId = self::actorId();
|
||||||
|
|
||||||
if (!$id) {
|
if (!$id) {
|
||||||
return ApiResponse::error('id가 필요합니다.', 400);
|
return ['error' => 'id가 필요합니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$menu = Menu::withShared($tenantId)->where('id', $id)->first();
|
$menu = Menu::withShared($tenantId)->where('id', $id)->first();
|
||||||
if (!$menu) {
|
if (!$menu) {
|
||||||
return ApiResponse::error('Menu not found', 404);
|
return ['error' => 'Menu not found', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$menu->deleted_by = $userId;
|
$menu->deleted_by = $userId;
|
||||||
$menu->save();
|
$menu->save();
|
||||||
$menu->delete();
|
$menu->delete();
|
||||||
|
|
||||||
return ApiResponse::response('success');
|
return 'success';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -188,7 +185,7 @@ public static function destroy(array $params)
|
|||||||
public static function reorder(array $params)
|
public static function reorder(array $params)
|
||||||
{
|
{
|
||||||
if (!is_array($params) || empty($params)) {
|
if (!is_array($params) || empty($params)) {
|
||||||
return ApiResponse::error('유효한 정렬 목록이 필요합니다.', 422);
|
return ['error' => '유효한 정렬 목록이 필요합니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
|
|
||||||
@@ -204,7 +201,7 @@ public static function reorder(array $params)
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return ApiResponse::response('success');
|
return 'success';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -217,7 +214,7 @@ public static function toggle(array $params)
|
|||||||
$userId = self::actorId();
|
$userId = self::actorId();
|
||||||
|
|
||||||
if (!$id) {
|
if (!$id) {
|
||||||
return ApiResponse::error('id가 필요합니다.', 400);
|
return ['error' => 'id가 필요합니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$payload = array_filter([
|
$payload = array_filter([
|
||||||
@@ -227,17 +224,17 @@ public static function toggle(array $params)
|
|||||||
], fn($v) => !is_null($v));
|
], fn($v) => !is_null($v));
|
||||||
|
|
||||||
if (empty($payload)) {
|
if (empty($payload)) {
|
||||||
return ApiResponse::error('변경할 필드가 없습니다.', 422);
|
return ['error' => '변경할 필드가 없습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$menu = Menu::withShared($tenantId)->find($id);
|
$menu = Menu::withShared($tenantId)->find($id);
|
||||||
if (!$menu) {
|
if (!$menu) {
|
||||||
return ApiResponse::error('Menu not found', 404);
|
return ['error' => 'Menu not found', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$payload['updated_by'] = $userId;
|
$payload['updated_by'] = $userId;
|
||||||
$menu->fill($payload)->save();
|
$menu->fill($payload)->save();
|
||||||
|
|
||||||
return ApiResponse::response('result', $menu->fresh());
|
return $menu->fresh();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,33 +12,33 @@ class MeterialService
|
|||||||
public static function getMeterials()
|
public static function getMeterials()
|
||||||
{
|
{
|
||||||
$query = new Material();
|
$query = new Material();
|
||||||
return ApiResponse::response('get', $query);
|
return $query->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function setMeterial()
|
public static function setMeterial()
|
||||||
{
|
{
|
||||||
$query = DB::table('COM_CODE')
|
$query = DB::table('COM_CODE')
|
||||||
->select(['CODE_TP_ID', 'CODE_ID', 'CODE_VAL', 'CODE_DESC', 'USE_YN']);
|
->select(['CODE_TP_ID', 'CODE_ID', 'CODE_VAL', 'CODE_DESC', 'USE_YN']);
|
||||||
return ApiResponse::response('get', $query);
|
return $query->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getMeterial(int $id)
|
public static function getMeterial(int $id)
|
||||||
{
|
{
|
||||||
$query = Material::find($id);
|
$query = Material::find($id);
|
||||||
return ApiResponse::response('get', $query);
|
return $query->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function updateMeterial(int $id)
|
public static function updateMeterial(int $id)
|
||||||
{
|
{
|
||||||
$query = DB::table('COM_CODE')
|
$query = DB::table('COM_CODE')
|
||||||
->select(['CODE_TP_ID', 'CODE_ID', 'CODE_VAL', 'CODE_DESC', 'USE_YN']);
|
->select(['CODE_TP_ID', 'CODE_ID', 'CODE_VAL', 'CODE_DESC', 'USE_YN']);
|
||||||
return ApiResponse::response('get', $query);
|
return $query->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function destoryMeterial(int $id)
|
public static function destoryMeterial(int $id)
|
||||||
{
|
{
|
||||||
$query = DB::table('COM_CODE')
|
$query = DB::table('COM_CODE')
|
||||||
->select(['CODE_TP_ID', 'CODE_ID', 'CODE_VAL', 'CODE_DESC', 'USE_YN']);
|
->select(['CODE_TP_ID', 'CODE_ID', 'CODE_VAL', 'CODE_DESC', 'USE_YN']);
|
||||||
return ApiResponse::response('get', $query);
|
return $query->get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,34 +13,34 @@ class ModelService
|
|||||||
public static function getModels()
|
public static function getModels()
|
||||||
{
|
{
|
||||||
$query = new Product();
|
$query = new Product();
|
||||||
return ApiResponse::response('get', $query);
|
return $query->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function setModel()
|
public static function setModel()
|
||||||
{
|
{
|
||||||
$query = DB::table('COM_CODE')
|
$query = DB::table('COM_CODE')
|
||||||
->select(['CODE_TP_ID', 'CODE_ID', 'CODE_VAL', 'CODE_DESC', 'USE_YN']);
|
->select(['CODE_TP_ID', 'CODE_ID', 'CODE_VAL', 'CODE_DESC', 'USE_YN']);
|
||||||
return ApiResponse::response('get', $query);
|
return $query->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getModel(int $id)
|
public static function getModel(int $id)
|
||||||
{
|
{
|
||||||
$query = Bom::find($id);
|
$query = Bom::find($id);
|
||||||
return ApiResponse::response('get', $query);
|
return $query->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function updateModel(int $id)
|
public static function updateModel(int $id)
|
||||||
{
|
{
|
||||||
$query = DB::table('COM_CODE')
|
$query = DB::table('COM_CODE')
|
||||||
->select(['CODE_TP_ID', 'CODE_ID', 'CODE_VAL', 'CODE_DESC', 'USE_YN']);
|
->select(['CODE_TP_ID', 'CODE_ID', 'CODE_VAL', 'CODE_DESC', 'USE_YN']);
|
||||||
return ApiResponse::response('get', $query);
|
return $query->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function destoryModel(int $id)
|
public static function destoryModel(int $id)
|
||||||
{
|
{
|
||||||
$query = DB::table('COM_CODE')
|
$query = DB::table('COM_CODE')
|
||||||
->select(['CODE_TP_ID', 'CODE_ID', 'CODE_VAL', 'CODE_DESC', 'USE_YN']);
|
->select(['CODE_TP_ID', 'CODE_ID', 'CODE_VAL', 'CODE_DESC', 'USE_YN']);
|
||||||
return ApiResponse::response('get', $query);
|
return $query->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ public static function getCategory($request)
|
|||||||
// 재귀적으로 트리 구성
|
// 재귀적으로 트리 구성
|
||||||
$list = self::fetchCategoryTree($parentId, $group);
|
$list = self::fetchCategoryTree($parentId, $group);
|
||||||
|
|
||||||
return ApiResponse::response('result', $list);
|
return $list;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -44,7 +44,7 @@ protected static function fetchCategoryTree($parentId = null, $group = 'category
|
|||||||
public static function getCategoryFlat($group = 'category')
|
public static function getCategoryFlat($group = 'category')
|
||||||
{
|
{
|
||||||
$query = CommonCode::where('code_group',$group)->whereNull('parent_id');
|
$query = CommonCode::where('code_group',$group)->whereNull('parent_id');
|
||||||
return ApiResponse::response('get', $query);
|
return $query->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public static function index(array $params = [])
|
|||||||
{
|
{
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$defs = SettingFieldDef::query()
|
$defs = SettingFieldDef::query()
|
||||||
@@ -79,7 +79,7 @@ public static function index(array $params = [])
|
|||||||
($a['sort_order'] <=> $b['sort_order']) ?: strcmp($a['field_key'], $b['field_key'])
|
($a['sort_order'] <=> $b['sort_order']) ?: strcmp($a['field_key'], $b['field_key'])
|
||||||
);
|
);
|
||||||
|
|
||||||
return ApiResponse::response('result', array_values($rows));
|
return array_values($rows);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -91,7 +91,7 @@ public static function bulkUpsert(array $params = [])
|
|||||||
{
|
{
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$v = Validator::make($params, [
|
$v = Validator::make($params, [
|
||||||
@@ -105,7 +105,7 @@ public static function bulkUpsert(array $params = [])
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$payload = $v->validated();
|
$payload = $v->validated();
|
||||||
@@ -136,12 +136,12 @@ public static function bulkUpsert(array $params = [])
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (\RuntimeException $e) {
|
} catch (\RuntimeException $e) {
|
||||||
return ApiResponse::error($e->getMessage(), 422);
|
return ['error' => $e->getMessage(), 'code' => 422];
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
return ApiResponse::error('저장 중 오류가 발생했습니다.', 500);
|
return ['error' => '저장 중 오류가 발생했습니다.', 'code' => 500];
|
||||||
}
|
}
|
||||||
|
|
||||||
return ApiResponse::response('result', ['updated' => true]);
|
return ['updated' => true];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -152,13 +152,13 @@ public static function updateOne(string $fieldKey, array $params = [])
|
|||||||
{
|
{
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 전역 key 존재 확인
|
// 전역 key 존재 확인
|
||||||
$def = SettingFieldDef::where('field_key', $fieldKey)->first();
|
$def = SettingFieldDef::where('field_key', $fieldKey)->first();
|
||||||
if (!$def) {
|
if (!$def) {
|
||||||
return ApiResponse::error('field_key not found', 404);
|
return ['error' => 'field_key not found', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$v = Validator::make($params, [
|
$v = Validator::make($params, [
|
||||||
@@ -170,7 +170,7 @@ public static function updateOne(string $fieldKey, array $params = [])
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
$data = $v->validated();
|
$data = $v->validated();
|
||||||
|
|
||||||
@@ -180,7 +180,7 @@ public static function updateOne(string $fieldKey, array $params = [])
|
|||||||
->where('id', $data['option_group_id'])
|
->where('id', $data['option_group_id'])
|
||||||
->exists();
|
->exists();
|
||||||
if (!$ok) {
|
if (!$ok) {
|
||||||
return ApiResponse::error('option_group_id is invalid for this tenant', 422);
|
return ['error' => 'option_group_id is invalid for this tenant', 'code' => 422];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,9 +205,10 @@ public static function updateOne(string $fieldKey, array $params = [])
|
|||||||
|
|
||||||
$effective = self::buildEffectiveRow($def, $s);
|
$effective = self::buildEffectiveRow($def, $s);
|
||||||
|
|
||||||
return ApiResponse::response('result', $effective);
|
return $effective;
|
||||||
|
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
return ApiResponse::error('수정 중 오류가 발생했습니다.', 500);
|
return ['error' => '수정 중 오류가 발생했습니다.', 'code' => 500];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ public static function index(array $params = [])
|
|||||||
{
|
{
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$per = (int)($params['per_page'] ?? $params['size'] ?? 20);
|
$per = (int)($params['per_page'] ?? $params['size'] ?? 20);
|
||||||
@@ -44,7 +44,7 @@ public static function index(array $params = [])
|
|||||||
|
|
||||||
$data = $q->paginate($per, ['*'], 'page', $page);
|
$data = $q->paginate($per, ['*'], 'page', $page);
|
||||||
|
|
||||||
return ApiResponse::response('result', $data);
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -54,7 +54,7 @@ public static function store(array $params = [])
|
|||||||
{
|
{
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$v = Validator::make($params, [
|
$v = Validator::make($params, [
|
||||||
@@ -68,7 +68,7 @@ public static function store(array $params = [])
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = $v->validated();
|
$data = $v->validated();
|
||||||
@@ -76,7 +76,7 @@ public static function store(array $params = [])
|
|||||||
|
|
||||||
$item = TenantOptionGroup::create($data);
|
$item = TenantOptionGroup::create($data);
|
||||||
|
|
||||||
return ApiResponse::response('result', $item->toArray());
|
return $item->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -86,18 +86,18 @@ public static function show(int $id)
|
|||||||
{
|
{
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
if (!$id) {
|
if (!$id) {
|
||||||
return ApiResponse::error('id가 올바르지 않습니다.', 422);
|
return ['error' => 'id가 올바르지 않습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$item = TenantOptionGroup::where('tenant_id', $tenantId)->find($id);
|
$item = TenantOptionGroup::where('tenant_id', $tenantId)->find($id);
|
||||||
if (!$item) {
|
if (!$item) {
|
||||||
return ApiResponse::error('옵션 그룹을 찾을 수 없습니다.', 404);
|
return ['error' => '옵션 그룹을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
return ApiResponse::response('result', $item->toArray());
|
return $item->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -107,15 +107,15 @@ public static function update(int $id, array $params = [])
|
|||||||
{
|
{
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
if (!$id) {
|
if (!$id) {
|
||||||
return ApiResponse::error('id가 올바르지 않습니다.', 422);
|
return ['error' => 'id가 올바르지 않습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$item = TenantOptionGroup::where('tenant_id', $tenantId)->find($id);
|
$item = TenantOptionGroup::where('tenant_id', $tenantId)->find($id);
|
||||||
if (!$item) {
|
if (!$item) {
|
||||||
return ApiResponse::error('옵션 그룹을 찾을 수 없습니다.', 404);
|
return ['error' => '옵션 그룹을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$v = Validator::make($params, [
|
$v = Validator::make($params, [
|
||||||
@@ -130,17 +130,17 @@ public static function update(int $id, array $params = [])
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = $v->validated();
|
$data = $v->validated();
|
||||||
if (empty($data)) {
|
if (empty($data)) {
|
||||||
return ApiResponse::error('수정할 항목이 없습니다.', 422);
|
return ['error' => '수정할 항목이 없습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$item->fill($data)->save();
|
$item->fill($data)->save();
|
||||||
|
|
||||||
return ApiResponse::response('result', $item->toArray());
|
return $item->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -153,21 +153,21 @@ public static function destroy(int $id)
|
|||||||
{
|
{
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
if (!$id) {
|
if (!$id) {
|
||||||
return ApiResponse::error('id가 올바르지 않습니다.', 422);
|
return ['error' => 'id가 올바르지 않습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$item = TenantOptionGroup::where('tenant_id', $tenantId)->find($id);
|
$item = TenantOptionGroup::where('tenant_id', $tenantId)->find($id);
|
||||||
if (!$item) {
|
if (!$item) {
|
||||||
return ApiResponse::error('옵션 그룹을 찾을 수 없습니다.', 404);
|
return ['error' => '옵션 그룹을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1) 옵션 값 존재 여부
|
// 1) 옵션 값 존재 여부
|
||||||
$hasValues = TenantOptionValue::where('group_id', $item->id)->exists();
|
$hasValues = TenantOptionValue::where('group_id', $item->id)->exists();
|
||||||
if ($hasValues) {
|
if ($hasValues) {
|
||||||
return ApiResponse::error('해당 그룹에 옵션 값이 존재하여 삭제할 수 없습니다.', 409);
|
return ['error' => '해당 그룹에 옵션 값이 존재하여 삭제할 수 없습니다.', 'code' => 409];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2) 필드 설정에서 참조 여부
|
// 2) 필드 설정에서 참조 여부
|
||||||
@@ -175,11 +175,11 @@ public static function destroy(int $id)
|
|||||||
->where('option_group_id', $item->id)
|
->where('option_group_id', $item->id)
|
||||||
->exists();
|
->exists();
|
||||||
if ($isReferenced) {
|
if ($isReferenced) {
|
||||||
return ApiResponse::error('필드 설정에서 참조 중인 그룹은 삭제할 수 없습니다.', 409);
|
return ['error' => '필드 설정에서 참조 중인 그룹은 삭제할 수 없습니다.', 'code' => 409];
|
||||||
}
|
}
|
||||||
|
|
||||||
$item->delete();
|
$item->delete();
|
||||||
|
|
||||||
return ApiResponse::response('result', ['deleted' => true]);
|
return ['deleted' => true];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,12 +32,12 @@ public static function index(int $groupId, array $params = [])
|
|||||||
{
|
{
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$group = self::loadGroup($tenantId, $groupId);
|
$group = self::loadGroup($tenantId, $groupId);
|
||||||
if (!$group) {
|
if (!$group) {
|
||||||
return ApiResponse::error('옵션 그룹을 찾을 수 없습니다.', 404);
|
return ['error' => '옵션 그룹을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$q = TenantOptionValue::where('group_id', $group->id)
|
$q = TenantOptionValue::where('group_id', $group->id)
|
||||||
@@ -50,7 +50,7 @@ public static function index(int $groupId, array $params = [])
|
|||||||
|
|
||||||
$list = $q->get();
|
$list = $q->get();
|
||||||
|
|
||||||
return ApiResponse::response('result', $list);
|
return $list;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -60,12 +60,12 @@ public static function store(int $groupId, array $params = [])
|
|||||||
{
|
{
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$group = self::loadGroup($tenantId, $groupId);
|
$group = self::loadGroup($tenantId, $groupId);
|
||||||
if (!$group) {
|
if (!$group) {
|
||||||
return ApiResponse::error('옵션 그룹을 찾을 수 없습니다.', 404);
|
return ['error' => '옵션 그룹을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$v = Validator::make($params, [
|
$v = Validator::make($params, [
|
||||||
@@ -80,14 +80,14 @@ public static function store(int $groupId, array $params = [])
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = $v->validated();
|
$data = $v->validated();
|
||||||
$data['group_id'] = $group->id;
|
$data['group_id'] = $group->id;
|
||||||
$item = TenantOptionValue::create($data);
|
$item = TenantOptionValue::create($data);
|
||||||
|
|
||||||
return ApiResponse::response('result', $item->toArray());
|
return $item->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -97,20 +97,20 @@ public static function show(int $groupId, int $id)
|
|||||||
{
|
{
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$group = self::loadGroup($tenantId, $groupId);
|
$group = self::loadGroup($tenantId, $groupId);
|
||||||
if (!$group) {
|
if (!$group) {
|
||||||
return ApiResponse::error('옵션 그룹을 찾을 수 없습니다.', 404);
|
return ['error' => '옵션 그룹을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$item = TenantOptionValue::where('group_id', $group->id)->find($id);
|
$item = TenantOptionValue::where('group_id', $group->id)->find($id);
|
||||||
if (!$item) {
|
if (!$item) {
|
||||||
return ApiResponse::error('옵션 값을 찾을 수 없습니다.', 404);
|
return ['error' => '옵션 값을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
return ApiResponse::response('result', $item->toArray());
|
return $item->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -120,17 +120,17 @@ public static function update(int $groupId, int $id, array $params = [])
|
|||||||
{
|
{
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$group = self::loadGroup($tenantId, $groupId);
|
$group = self::loadGroup($tenantId, $groupId);
|
||||||
if (!$group) {
|
if (!$group) {
|
||||||
return ApiResponse::error('옵션 그룹을 찾을 수 없습니다.', 404);
|
return ['error' => '옵션 그룹을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$item = TenantOptionValue::where('group_id', $group->id)->find($id);
|
$item = TenantOptionValue::where('group_id', $group->id)->find($id);
|
||||||
if (!$item) {
|
if (!$item) {
|
||||||
return ApiResponse::error('옵션 값을 찾을 수 없습니다.', 404);
|
return ['error' => '옵션 값을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$v = Validator::make($params, [
|
$v = Validator::make($params, [
|
||||||
@@ -146,17 +146,17 @@ public static function update(int $groupId, int $id, array $params = [])
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = $v->validated();
|
$data = $v->validated();
|
||||||
if (empty($data)) {
|
if (empty($data)) {
|
||||||
return ApiResponse::error('수정할 항목이 없습니다.', 422);
|
return ['error' => '수정할 항목이 없습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$item->fill($data)->save();
|
$item->fill($data)->save();
|
||||||
|
|
||||||
return ApiResponse::response('result', $item->toArray());
|
return $item->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -167,23 +167,23 @@ public static function destroy(int $groupId, int $id)
|
|||||||
{
|
{
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$group = self::loadGroup($tenantId, $groupId);
|
$group = self::loadGroup($tenantId, $groupId);
|
||||||
if (!$group) {
|
if (!$group) {
|
||||||
return ApiResponse::error('옵션 그룹을 찾을 수 없습니다.', 404);
|
return ['error' => '옵션 그룹을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$item = TenantOptionValue::where('group_id', $group->id)->find($id);
|
$item = TenantOptionValue::where('group_id', $group->id)->find($id);
|
||||||
if (!$item) {
|
if (!$item) {
|
||||||
return ApiResponse::error('옵션 값을 찾을 수 없습니다.', 404);
|
return ['error' => '옵션 값을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: 참조 무결성 검사(필요 시 구현)
|
// TODO: 참조 무결성 검사(필요 시 구현)
|
||||||
$item->delete();
|
$item->delete();
|
||||||
|
|
||||||
return ApiResponse::response('result', ['deleted' => true]);
|
return ['deleted' => true];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -194,12 +194,12 @@ public static function reorder(int $groupId, array $params = [])
|
|||||||
{
|
{
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$group = self::loadGroup($tenantId, $groupId);
|
$group = self::loadGroup($tenantId, $groupId);
|
||||||
if (!$group) {
|
if (!$group) {
|
||||||
return ApiResponse::error('옵션 그룹을 찾을 수 없습니다.', 404);
|
return ['error' => '옵션 그룹을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$v = Validator::make($params, [
|
$v = Validator::make($params, [
|
||||||
@@ -209,7 +209,7 @@ public static function reorder(int $groupId, array $params = [])
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
if ($v->fails()) {
|
if ($v->fails()) {
|
||||||
return ApiResponse::error($v->errors()->first(), 422);
|
return ['error' => $v->errors()->first(), 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$rows = $v->validated()['items'];
|
$rows = $v->validated()['items'];
|
||||||
@@ -223,9 +223,9 @@ public static function reorder(int $groupId, array $params = [])
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
return ApiResponse::error('정렬 순서 저장 중 오류가 발생했습니다.', 500);
|
return ['error' => '정렬 순서 저장 중 오류가 발생했습니다.', 'code' => 500];
|
||||||
}
|
}
|
||||||
|
|
||||||
return ApiResponse::response('result', ['reordered' => true]);
|
return ['reordered' => true];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ public static function getTenants(array $params = [])
|
|||||||
|
|
||||||
$paginator = $query->paginate($pageSize, ['*'], 'page', $pageNo);
|
$paginator = $query->paginate($pageSize, ['*'], 'page', $pageNo);
|
||||||
|
|
||||||
return ApiResponse::response('result', $paginator);
|
return $paginator;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -203,7 +203,7 @@ public static function getTenant(array $params = [])
|
|||||||
->first();
|
->first();
|
||||||
|
|
||||||
if (!$userTenant) {
|
if (!$userTenant) {
|
||||||
return ApiResponse::error('활성(기본) 테넌트를 찾을 수 없습니다.', 404);
|
return ['error' => '활성(기본) 테넌트를 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
$tenantId = $userTenant->tenant_id;
|
$tenantId = $userTenant->tenant_id;
|
||||||
}
|
}
|
||||||
@@ -213,7 +213,7 @@ public static function getTenant(array $params = [])
|
|||||||
->select('id','company_name','code','email','phone','address','business_num','corp_reg_no','ceo_name','homepage','fax','logo','admin_memo','options','created_at','updated_at')
|
->select('id','company_name','code','email','phone','address','business_num','corp_reg_no','ceo_name','homepage','fax','logo','admin_memo','options','created_at','updated_at')
|
||||||
->where('id', $tenantId);
|
->where('id', $tenantId);
|
||||||
|
|
||||||
return ApiResponse::response('first', $query);
|
return $query->first();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -241,7 +241,7 @@ public static function storeTenants(array $params = [])
|
|||||||
|
|
||||||
|
|
||||||
if ($validator->fails()) {
|
if ($validator->fails()) {
|
||||||
return ApiResponse::error($validator->errors()->first(), 400);
|
return ['error' => $validator->errors()->first(), 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$payload = $validator->validated();
|
$payload = $validator->validated();
|
||||||
@@ -276,7 +276,7 @@ public static function storeTenants(array $params = [])
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
// 생성된 리소스를 그대로 반환 (목록 카드용 요약 원하면 컬럼 제한)
|
// 생성된 리소스를 그대로 반환 (목록 카드용 요약 원하면 컬럼 제한)
|
||||||
return ApiResponse::response('result', $tenant);
|
return $tenant;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -303,7 +303,7 @@ public static function updateTenant(array $params = [])
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
if ($validator->fails()) {
|
if ($validator->fails()) {
|
||||||
return ApiResponse::error($validator->errors()->first(), 400);
|
return ['error' => $validator->errors()->first(), 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$payload = $validator->validated();
|
$payload = $validator->validated();
|
||||||
@@ -311,17 +311,17 @@ public static function updateTenant(array $params = [])
|
|||||||
unset($payload['tenant_id']);
|
unset($payload['tenant_id']);
|
||||||
|
|
||||||
if (empty($payload)) {
|
if (empty($payload)) {
|
||||||
return ApiResponse::error('수정할 데이터가 없습니다.', 400);
|
return ['error' => '수정할 데이터가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$tenant = Tenant::find($tenantId);
|
$tenant = Tenant::find($tenantId);
|
||||||
if (!$tenant) {
|
if (!$tenant) {
|
||||||
return ApiResponse::error('테넌트를 찾을 수 없습니다.', 404);
|
return ['error' => '테넌트를 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$tenant->update($payload);
|
$tenant->update($payload);
|
||||||
|
|
||||||
return ApiResponse::response('result', $tenant->fresh());
|
return $tenant->fresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -333,17 +333,17 @@ public static function destroyTenant(array $params = [])
|
|||||||
{
|
{
|
||||||
$tenantId = $params['tenant_id'] ?? app('tenant_id');
|
$tenantId = $params['tenant_id'] ?? app('tenant_id');
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('tenant_id가 필요합니다.', 400);
|
return ['error' => 'tenant_id가 필요합니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$tenant = Tenant::find($tenantId);
|
$tenant = Tenant::find($tenantId);
|
||||||
if (!$tenant) {
|
if (!$tenant) {
|
||||||
return ApiResponse::error('테넌트를 찾을 수 없습니다.', 404);
|
return ['error' => '테넌트를 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
$tenant->delete(); // SoftDeletes 트레이트가 있으면 소프트 삭제
|
$tenant->delete(); // SoftDeletes 트레이트가 있으면 소프트 삭제
|
||||||
|
|
||||||
return ApiResponse::response('success');
|
return 'success';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -358,19 +358,19 @@ public static function restoreTenant(array $params = [])
|
|||||||
// 소프트 삭제 포함 조회
|
// 소프트 삭제 포함 조회
|
||||||
$tenant = Tenant::withTrashed()->find($tenantId);
|
$tenant = Tenant::withTrashed()->find($tenantId);
|
||||||
if (!$tenant) {
|
if (!$tenant) {
|
||||||
return ApiResponse::error('테넌트를 찾을 수 없습니다.', 404);
|
return ['error' => '테넌트를 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_null($tenant->deleted_at)) {
|
if (is_null($tenant->deleted_at)) {
|
||||||
// 이미 활성 상태
|
// 이미 활성 상태
|
||||||
return ApiResponse::error('이미 활성화된 테넌트입니다.', 400);
|
return ['error' => '이미 활성화된 테넌트입니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$tenant->restore();
|
$tenant->restore();
|
||||||
|
|
||||||
// 복구 결과를 data에 담고 싶으면 fresh() 후 필요한 필드만 반환
|
// 복구 결과를 data에 담고 싶으면 fresh() 후 필요한 필드만 반환
|
||||||
// return ApiResponse::response('result', $tenant->fresh());
|
// return $tenant->fresh();
|
||||||
|
|
||||||
return ApiResponse::response('success');
|
return 'success';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public static function index(array $params = [])
|
|||||||
{
|
{
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
|
|
||||||
$per = (int)($params['per_page'] ?? $params['size'] ?? 20);
|
$per = (int)($params['per_page'] ?? $params['size'] ?? 20);
|
||||||
@@ -60,7 +60,7 @@ public static function index(array $params = [])
|
|||||||
$page = isset($params['page']) ? (int)$params['page'] : null;
|
$page = isset($params['page']) ? (int)$params['page'] : null;
|
||||||
$data = $q->orderByDesc('id')->paginate($per, ['*'], 'page', $page);
|
$data = $q->orderByDesc('id')->paginate($per, ['*'], 'page', $page);
|
||||||
|
|
||||||
return ApiResponse::response('result', $data);
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -70,10 +70,10 @@ public static function show(int $userId)
|
|||||||
{
|
{
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
if (!$userId) {
|
if (!$userId) {
|
||||||
return ApiResponse::error('userId가 올바르지 않습니다.', 422);
|
return ['error' => 'userId가 올바르지 않습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$item = TenantUserProfile::where('tenant_id', $tenantId)
|
$item = TenantUserProfile::where('tenant_id', $tenantId)
|
||||||
@@ -82,10 +82,10 @@ public static function show(int $userId)
|
|||||||
->first();
|
->first();
|
||||||
|
|
||||||
if (!$item) {
|
if (!$item) {
|
||||||
return ApiResponse::error('프로필을 찾을 수 없습니다.', 404);
|
return ['error' => '프로필을 찾을 수 없습니다.', 'code' => 404];
|
||||||
}
|
}
|
||||||
|
|
||||||
return ApiResponse::response('result', $item->toArray());
|
return $item->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -96,15 +96,15 @@ public static function update(int $userId, array $params = [])
|
|||||||
{
|
{
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
if (!$userId) {
|
if (!$userId) {
|
||||||
return ApiResponse::error('userId가 올바르지 않습니다.', 422);
|
return ['error' => 'userId가 올바르지 않습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
// (선택) 간단 유효성: 최소 1개 키 존재
|
// (선택) 간단 유효성: 최소 1개 키 존재
|
||||||
if (empty($params) || !is_array($params)) {
|
if (empty($params) || !is_array($params)) {
|
||||||
return ApiResponse::error('수정할 항목이 없습니다.', 422);
|
return ['error' => '수정할 항목이 없습니다.', 'code' => 422];
|
||||||
}
|
}
|
||||||
|
|
||||||
$fields = self::effectiveFieldMap($tenantId);
|
$fields = self::effectiveFieldMap($tenantId);
|
||||||
@@ -141,7 +141,7 @@ public static function update(int $userId, array $params = [])
|
|||||||
$profile->save();
|
$profile->save();
|
||||||
});
|
});
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
return ApiResponse::error('프로필 저장 중 오류가 발생했습니다.', 500);
|
return ['error' => '프로필 저장 중 오류가 발생했습니다.', 'code' => 500];
|
||||||
}
|
}
|
||||||
|
|
||||||
$fresh = TenantUserProfile::where('tenant_id', $tenantId)
|
$fresh = TenantUserProfile::where('tenant_id', $tenantId)
|
||||||
@@ -149,7 +149,7 @@ public static function update(int $userId, array $params = [])
|
|||||||
->with(['user:id,name,email'])
|
->with(['user:id,name,email'])
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
return ApiResponse::response('result', $fresh ? $fresh->toArray() : null);
|
return $fresh ? $fresh->toArray() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -159,11 +159,11 @@ public static function me(array $params = [])
|
|||||||
{
|
{
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
$userId = auth()->id();
|
$userId = auth()->id();
|
||||||
if (!$userId) {
|
if (!$userId) {
|
||||||
return ApiResponse::error('인증 정보가 없습니다.', 401);
|
return ['error' => '인증 정보가 없습니다.', 'code' => 401];
|
||||||
}
|
}
|
||||||
|
|
||||||
$item = TenantUserProfile::where('tenant_id', $tenantId)
|
$item = TenantUserProfile::where('tenant_id', $tenantId)
|
||||||
@@ -172,7 +172,7 @@ public static function me(array $params = [])
|
|||||||
->first();
|
->first();
|
||||||
|
|
||||||
// 없으면 null 반환(스펙에 따라 404로 바꾸려면 위와 동일 처리)
|
// 없으면 null 반환(스펙에 따라 404로 바꾸려면 위와 동일 처리)
|
||||||
return ApiResponse::response('result', $item ? $item->toArray() : null);
|
return $item ? $item->toArray() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -183,11 +183,11 @@ public static function updateMe(array $params = [])
|
|||||||
{
|
{
|
||||||
$tenantId = self::tenantId();
|
$tenantId = self::tenantId();
|
||||||
if (!$tenantId) {
|
if (!$tenantId) {
|
||||||
return ApiResponse::error('활성 테넌트가 없습니다.', 400);
|
return ['error' => '활성 테넌트가 없습니다.', 'code' => 400];
|
||||||
}
|
}
|
||||||
$userId = auth()->id();
|
$userId = auth()->id();
|
||||||
if (!$userId) {
|
if (!$userId) {
|
||||||
return ApiResponse::error('인증 정보가 없습니다.', 401);
|
return ['error' => '인증 정보가 없습니다.', 'code' => 401];
|
||||||
}
|
}
|
||||||
return self::update($userId, $params);
|
return self::update($userId, $params);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user