From 5a622b4137e19c01b70cc9b86e0ff4529c8c7bfd Mon Sep 17 00:00:00 2001 From: hskwon Date: Wed, 13 Aug 2025 18:34:28 +0900 Subject: [PATCH] =?UTF-8?q?fix=20:=20API=20-=20User=20=ED=99=94=EB=A9=B4?= =?UTF-8?q?=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Api/V1/TenantController.php | 73 ++++ app/Swagger/v1/AdminApi.php | 316 ++++++++++++++++++ app/Swagger/v1/AuthApi.php | 43 ++- app/Swagger/v1/CommonComponents.php | 105 ++++++ app/Swagger/v1/MemberApi.php | 192 +---------- app/Swagger/v1/ProductApi.php | 75 +++-- app/Swagger/v1/SAMInfo.php | 31 +- routes/api.php | 34 +- 8 files changed, 614 insertions(+), 255 deletions(-) create mode 100644 app/Http/Controllers/Api/V1/TenantController.php create mode 100644 app/Swagger/v1/AdminApi.php create mode 100644 app/Swagger/v1/CommonComponents.php diff --git a/app/Http/Controllers/Api/V1/TenantController.php b/app/Http/Controllers/Api/V1/TenantController.php new file mode 100644 index 0000000..882889a --- /dev/null +++ b/app/Http/Controllers/Api/V1/TenantController.php @@ -0,0 +1,73 @@ + $e->getMessage(), + ]); + } + } + + + /** + * 나의 테넌트 전환 + */ + public function switch() + { + // + } + + /** + * Store a newly created resource in storage. + */ + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + // + } + + /** + * Remove the specified resource from storage. + */ + public function delAdmin($userNo, Request $request) + { + return ApiResponse::handle(function () use ($userNo, $request) { + return MemberService::delAdmin($userNo); + }, '관리자 제외 성공', '관리자 제외 실패'); + } + + /** + * 관리자 설정 + */ + public function setAdmin($userNo, Request $request) + { + return ApiResponse::handle(function () use ($userNo, $request) { + return MemberService::setAdmin($userNo); + }, '관리자 설정 성공', '관리자 설정 실패'); + } +} + diff --git a/app/Swagger/v1/AdminApi.php b/app/Swagger/v1/AdminApi.php new file mode 100644 index 0000000..e55706e --- /dev/null +++ b/app/Swagger/v1/AdminApi.php @@ -0,0 +1,316 @@ +[공통 에러 응답 포맷]
400: 필수 파라미터 누락
401: 인증 실패
403: 권한 없음
404: 존재하지 않는 URI 또는 데이터
405: 허용되지 않는 메서드
500: 서버 에러

모든 에러 응답 예시:
{
  "success": false,
  "message": "에러 메시지",
  "data": null
}
===============================", + * description="===============================
[공통 에러 응답 포맷]
400: 필수 파라미터 누락
401: 인증 실패
403: 권한 없음
404: 존재하지 않는 URI 또는 데이터
405: 허용되지 않는 메서드
500: 서버 에러

모든 에러 응답 예시:
{
  "success": false,
  "message": "에러 메시지",
  "data": null
}
===============================", * @OA\Contact( * email="shine1324@gmail.com" * ) @@ -22,13 +22,38 @@ * type="apiKey", * in="header", * name="X-API-KEY" - * ) + * ) + * * @OA\SecurityScheme( * securityScheme="BearerAuth", * type="http", * scheme="bearer", * bearerFormat="JWT" - * ) + * ) * + * @OA\Tag( + * name="Auth", + * description="로그인/로그아웃 및 인증 관련 API" + * ) + * @OA\Tag( + * name="API Key 인증", + * description="API Key 유효성 검사" + * ) + * @OA\Tag( + * name="User", + * description="사용자 자기 계정 관련 API" + * ) + * @OA\Tag( + * name="Member", + * description="회원 관리 API" + * ) + * @OA\Tag( + * name="Admin-Users", + * description="관리자 사용자 관리 API" + * ) + * @OA\Tag( + * name="Product", + * description="제품 관련 API" + * ) */ class SAMInfo {} diff --git a/routes/api.php b/routes/api.php index 84eea74..7e18f67 100644 --- a/routes/api.php +++ b/routes/api.php @@ -4,14 +4,12 @@ use Illuminate\Support\Facades\Route; use App\Http\Controllers\Api\V1\CommonController; use App\Http\Controllers\Api\V1\ApiController; -use App\Http\Controllers\Api\V1\MemberController; use App\Http\Controllers\Api\V1\AdminApiController; use App\Http\Controllers\Api\V1\FileController; use App\Http\Controllers\Api\V1\ProductController; use App\Http\Controllers\Api\V1\MaterialController; use App\Http\Controllers\Api\V1\ModelController; use App\Http\Controllers\Api\V1\BomController; -use App\Http\Controllers\Api\V1\TenantController; use App\Http\Controllers\Api\V1\UserController; // error test @@ -60,10 +58,8 @@ Route::put('me/password', [UserController::class, 'changePassword'])->name('v1.users.me.password'); // 비밀번호 변겅 Route::get('me/tenants', [UserController::class, 'tenants'])->name('v1.users.me.tenants.index'); // 내 테넌트 목록 - Route::patch('me/tenants/switch',[UserController::class, 'switchTenant'])->name('v1.users.me.tenants.switch'); // 활성 테넌트 전환 + Route::patch('me/tenants/switch', [UserController::class, 'switchTenant'])->name('v1.users.me.tenants.switch'); // 활성 테넌트 전환 }); - }); - // File API Route::prefix('file')->group(function () { @@ -71,6 +67,7 @@ Route::get('list', [FileController::class, 'list'])->name('v1.file.list'); // 파일 목록 조회 Route::delete('delete', [FileController::class, 'delete'])->name('v1.file.delete'); // 파일 삭제 Route::get('info', [FileController::class, 'findFile'])->name('v1.file.info'); // 파일 정보 조회 + }); // Material, Model, BOM API @@ -82,7 +79,6 @@ }); - // ───────────────────────────────────────────────────────────── // 공통 미들웨어 메모: // - 'apikey' : X-API-KEY 검사 미들웨어 (커스텀) @@ -109,7 +105,7 @@ // Auth (User) Route::prefix('auth')->group(function () { - Route::post('login', [\App\Http\Controllers\Api\V1\AuthController::class, 'login']) + Route::post('login', [\App\Http\Controllers\Api\V1\AuthController::class, 'login']) ->name('v1.auth.login'); // Bearer 불필요(로그인) Route::post('logout', [\App\Http\Controllers\Api\V1\AuthController::class, 'logout']) @@ -119,12 +115,12 @@ // Users (me) Route::prefix('users')->middleware('auth:sanctum')->group(function () { - Route::get('me', [\App\Http\Controllers\Api\V1\User\MeController::class, 'show'])->name('v1.users.me.show'); - Route::put('me', [\App\Http\Controllers\Api\V1\User\MeController::class, 'update'])->name('v1.users.me.update'); - Route::put('me/password', [\App\Http\Controllers\Api\V1\User\MeController::class, 'changePassword'])->name('v1.users.me.password'); + Route::get('me', [\App\Http\Controllers\Api\V1\User\MeController::class, 'show'])->name('v1.users.me.show'); + Route::put('me', [\App\Http\Controllers\Api\V1\User\MeController::class, 'update'])->name('v1.users.me.update'); + Route::put('me/password', [\App\Http\Controllers\Api\V1\User\MeController::class, 'changePassword'])->name('v1.users.me.password'); - Route::get('me/tenants', [\App\Http\Controllers\Api\V1\User\TenantController::class, 'index'])->name('v1.users.me.tenants.index'); - Route::patch('me/tenants/switch',[\App\Http\Controllers\Api\V1\User\TenantController::class, 'switch'])->name('v1.users.me.tenants.switch'); + Route::get('me/tenants', [\App\Http\Controllers\Api\V1\User\TenantController::class, 'index'])->name('v1.users.me.tenants.index'); + Route::patch('me/tenants/switch', [\App\Http\Controllers\Api\V1\User\TenantController::class, 'switch'])->name('v1.users.me.tenants.switch'); }); }); @@ -150,13 +146,13 @@ ->group(function () { // 목록/생성 - Route::get('users', [\App\Http\Controllers\Api\V1\Admin\UserController::class, 'index'])->name('v1.admin.users.index'); - Route::post('users', [\App\Http\Controllers\Api\V1\Admin\UserController::class, 'store'])->name('v1.admin.users.store'); + Route::get('users', [\App\Http\Controllers\Api\V1\Admin\UserController::class, 'index'])->name('v1.admin.users.index'); + Route::post('users', [\App\Http\Controllers\Api\V1\Admin\UserController::class, 'store'])->name('v1.admin.users.store'); // 단건 - Route::get('users/{id}', [\App\Http\Controllers\Api\V1\Admin\UserController::class, 'show'])->name('v1.admin.users.show'); - Route::put('users/{id}', [\App\Http\Controllers\Api\V1\Admin\UserController::class, 'update'])->name('v1.admin.users.update'); - Route::delete('users/{id}',[\App\Http\Controllers\Api\V1\Admin\UserController::class, 'destroy'])->name('v1.admin.users.destroy'); + Route::get('users/{id}', [\App\Http\Controllers\Api\V1\Admin\UserController::class, 'show'])->name('v1.admin.users.show'); + Route::put('users/{id}', [\App\Http\Controllers\Api\V1\Admin\UserController::class, 'update'])->name('v1.admin.users.update'); + Route::delete('users/{id}', [\App\Http\Controllers\Api\V1\Admin\UserController::class, 'destroy'])->name('v1.admin.users.destroy'); // 상태 토글 Route::patch('users/{id}/status', [\App\Http\Controllers\Api\V1\Admin\UserStatusController::class, 'toggle'])->name('v1.admin.users.status.toggle'); @@ -165,8 +161,8 @@ Route::post('users/{id}/restore', [\App\Http\Controllers\Api\V1\Admin\UserRestoreController::class, 'restore'])->name('v1.admin.users.restore'); // 역할 부여/해제 - Route::post('users/{id}/roles', [\App\Http\Controllers\Api\V1\Admin\UserRoleController::class, 'attach'])->name('v1.admin.users.roles.attach'); - Route::delete('users/{id}/roles/{role}', [\App\Http\Controllers\Api\V1\Admin\UserRoleController::class, 'detach'])->name('v1.admin.users.roles.detach'); + Route::post('users/{id}/roles', [\App\Http\Controllers\Api\V1\Admin\UserRoleController::class, 'attach'])->name('v1.admin.users.roles.attach'); + Route::delete('users/{id}/roles/{role}', [\App\Http\Controllers\Api\V1\Admin\UserRoleController::class, 'detach'])->name('v1.admin.users.roles.detach'); // 비밀번호 초기화 Route::post('users/{id}/reset-password', [\App\Http\Controllers\Api\V1\Admin\UserPasswordController::class, 'reset'])->name('v1.admin.users.password.reset');