2025-07-17 10:05:47 +09:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
use Illuminate\Http\Request;
|
|
|
|
|
use Illuminate\Support\Facades\Route;
|
2025-07-18 11:37:07 +09:00
|
|
|
use App\Http\Controllers\Api\V1\CommonController;
|
|
|
|
|
use App\Http\Controllers\Api\V1\ApiController;
|
|
|
|
|
use App\Http\Controllers\Api\V1\AdminApiController;
|
|
|
|
|
use App\Http\Controllers\Api\V1\FileController;
|
2025-07-23 18:06:33 +09:00
|
|
|
use App\Http\Controllers\Api\V1\ProductController;
|
2025-08-01 17:25:31 +09:00
|
|
|
use App\Http\Controllers\Api\V1\MaterialController;
|
|
|
|
|
use App\Http\Controllers\Api\V1\ModelController;
|
|
|
|
|
use App\Http\Controllers\Api\V1\BomController;
|
2025-08-14 00:55:08 +09:00
|
|
|
use App\Http\Controllers\Api\V1\UserController;
|
2025-08-14 17:20:28 +09:00
|
|
|
use App\Http\Controllers\Api\V1\TenantController;
|
2025-08-15 16:32:11 +09:00
|
|
|
use App\Http\Controllers\Api\V1\AdminController;
|
2025-07-17 10:05:47 +09:00
|
|
|
|
2025-07-24 17:55:20 +09:00
|
|
|
// error test
|
|
|
|
|
Route::get('/test-error', function () {
|
|
|
|
|
throw new \Exception('슬랙 전송 테스트 예외');
|
|
|
|
|
});
|
|
|
|
|
|
2025-07-18 11:37:07 +09:00
|
|
|
// V1 초기 개발
|
|
|
|
|
Route::prefix('v1')->group(function () {
|
2025-07-17 10:05:47 +09:00
|
|
|
|
2025-08-04 08:38:47 +09:00
|
|
|
# API KEY 인증
|
|
|
|
|
Route::middleware('auth.apikey')->get('/debug-apikey', [ApiController::class, 'debugApikey']);
|
|
|
|
|
|
2025-07-18 11:37:07 +09:00
|
|
|
# SAM API
|
|
|
|
|
Route::middleware('auth.apikey')->group(function () {
|
2025-07-17 10:05:47 +09:00
|
|
|
|
2025-07-23 18:06:33 +09:00
|
|
|
# Auth API
|
2025-08-14 00:55:08 +09:00
|
|
|
Route::post('login', [ApiController::class, 'login']);
|
2025-07-28 11:44:07 +09:00
|
|
|
Route::middleware('auth:sanctum')->post('/logout', [ApiController::class, 'logout']);
|
2025-07-23 18:06:33 +09:00
|
|
|
|
|
|
|
|
|
2025-07-18 11:37:07 +09:00
|
|
|
// Admin API
|
2025-08-14 00:55:08 +09:00
|
|
|
Route::post('admin/list', [AdminApiController::class, 'list'])->middleware('permission:SR'); // 관리자 리스트 조회
|
2025-07-17 10:05:47 +09:00
|
|
|
|
2025-07-23 18:06:33 +09:00
|
|
|
|
2025-07-18 11:37:07 +09:00
|
|
|
// Common API
|
|
|
|
|
Route::prefix('common')->group(function () {
|
2025-08-14 00:55:08 +09:00
|
|
|
Route::get('code', [CommonController::class, 'getComeCode'])->name('v1.common.code'); // 공통코드 조회
|
2025-07-18 11:37:07 +09:00
|
|
|
});
|
2025-07-17 10:05:47 +09:00
|
|
|
|
|
|
|
|
|
2025-07-23 18:06:33 +09:00
|
|
|
// Product API
|
|
|
|
|
Route::prefix('product')->group(function () {
|
2025-08-14 00:55:08 +09:00
|
|
|
Route::get('category', [ProductController::class, 'getCategory'])->name('v1.product.category'); // 제품 카테고리
|
2025-07-23 18:06:33 +09:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
2025-08-15 16:32:11 +09:00
|
|
|
// Tenant Admin API
|
|
|
|
|
Route::prefix('admin')->group(function () {
|
|
|
|
|
// 목록/생성
|
|
|
|
|
Route::get('users', [AdminController::class, 'index'])->name('v1.admin.users.index'); // 테넌트 사용자 목록 조회
|
|
|
|
|
Route::post('users', [AdminController::class, 'store'])->name('v1.admin.users.store'); // 테넌트 사용자 생성
|
|
|
|
|
|
|
|
|
|
// 단건
|
|
|
|
|
Route::get('users/{id}', [AdminController::class, 'show'])->name('v1.admin.users.show'); // 테넌트 사용자 단건 조회
|
|
|
|
|
Route::put('users/{id}', [AdminController::class, 'update'])->name('v1.admin.users.update'); // 테넌트 사용자 수정
|
|
|
|
|
|
|
|
|
|
// 소프트 삭제 복구
|
|
|
|
|
Route::delete('users/{id}', [AdminController::class, 'destroy'])->name('v1.admin.users.destroy'); // 테넌트 사용자 삭제(연결 삭제)
|
|
|
|
|
Route::post('users/{id}/restore', [AdminController::class, 'restore'])->name('v1.admin.users.restore'); // 테넌트 사용자 삭제 복구
|
|
|
|
|
|
|
|
|
|
// 상태 토글
|
|
|
|
|
Route::patch('users/{id}/status', [AdminController::class, 'toggle'])->name('v1.admin.users.status.toggle'); // 테넌트 사용자 활성/비활성
|
|
|
|
|
|
|
|
|
|
// 역할 부여/해제
|
|
|
|
|
Route::post('users/{id}/roles', [AdminController::class, 'attach'])->name('v1.admin.users.roles.attach'); // 테넌트 사용자 역할 부여
|
|
|
|
|
Route::delete('users/{id}/roles/{role}', [AdminController::class, 'detach'])->name('v1.admin.users.roles.detach'); // 테넌트 사용자 역할 해제
|
|
|
|
|
|
|
|
|
|
// 비밀번호 초기화
|
|
|
|
|
Route::post('users/{id}/reset-password', [AdminController::class, 'reset'])->name('v1.admin.users.password.reset'); // 테넌트 사용자 비밀번호 초기화
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
2025-07-18 11:37:07 +09:00
|
|
|
// Member API
|
2025-08-14 00:55:08 +09:00
|
|
|
Route::prefix('users')->group(function () {
|
|
|
|
|
Route::get('index', [UserController::class, 'index'])->name('v1.users.index'); // 회원 목록 조회
|
|
|
|
|
Route::get('show/{user_no}', [UserController::class, 'show'])->name('v1.users.show'); // 회원 상세 조회
|
|
|
|
|
Route::post('store', [UserController::class, 'store'])->name('v1.users.store')->middleware('permission:AC'); // 회원 저장 (등록/수정)
|
|
|
|
|
|
|
|
|
|
Route::get('me', [UserController::class, 'me'])->name('v1.users.users.me'); // 내 정보 조회
|
|
|
|
|
Route::put('me', [UserController::class, 'meUpdate'])->name('v1.users.me.update'); // 내 정보 수정
|
|
|
|
|
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'); // 내 테넌트 목록
|
2025-08-13 18:34:28 +09:00
|
|
|
Route::patch('me/tenants/switch', [UserController::class, 'switchTenant'])->name('v1.users.me.tenants.switch'); // 활성 테넌트 전환
|
2025-08-14 00:55:08 +09:00
|
|
|
});
|
2025-07-17 10:05:47 +09:00
|
|
|
|
2025-08-14 17:20:28 +09:00
|
|
|
|
|
|
|
|
// Tenant API
|
|
|
|
|
Route::prefix('tenants')->group(function () {
|
|
|
|
|
Route::get('list', [TenantController::class, 'index'])->name('v1.tenant.index'); // 테넌트 목록 조회
|
|
|
|
|
Route::get('/', [TenantController::class, 'show'])->name('v1.tenant.show'); // 테넌트 정보 조회
|
|
|
|
|
Route::put('/', [TenantController::class, 'update'])->name('v1.tenant.update'); // 테넌트 정보 수정
|
|
|
|
|
Route::post('/', [TenantController::class, 'store'])->name('v1.tenant.store'); // 테넌트 등록
|
|
|
|
|
Route::delete('/', [TenantController::class, 'destroy'])->name('v1.tenant.destroy'); // 테넌트 삭제(탈퇴)
|
|
|
|
|
Route::put('/restore/{tenant_id}', [TenantController::class, 'restore'])->name('v1.tenant.restore'); // 테넌트 복구
|
|
|
|
|
});
|
|
|
|
|
|
2025-07-18 11:37:07 +09:00
|
|
|
// File API
|
|
|
|
|
Route::prefix('file')->group(function () {
|
2025-08-14 00:55:08 +09:00
|
|
|
Route::post('upload', [FileController::class, 'upload'])->name('v1.file.upload'); // 파일 업로드 (등록/수정)
|
|
|
|
|
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'); // 파일 정보 조회
|
2025-08-13 18:34:28 +09:00
|
|
|
});
|
2025-07-17 10:05:47 +09:00
|
|
|
|
|
|
|
|
|
2025-08-01 17:25:31 +09:00
|
|
|
// Material, Model, BOM API
|
2025-08-14 00:55:08 +09:00
|
|
|
Route::resource('materials', MaterialController::class)->except(['v1.create', 'edit']); // 자재관리
|
|
|
|
|
Route::resource('models', ModelController::class)->except(['v1.create', 'edit']); // 모델관리
|
|
|
|
|
Route::resource('boms', BomController::class)->except(['v1.create', 'edit']); // BOM관리
|
2025-08-01 17:25:31 +09:00
|
|
|
|
2025-07-18 11:37:07 +09:00
|
|
|
});
|
2025-07-17 10:05:47 +09:00
|
|
|
});
|
|
|
|
|
|
2025-08-14 00:55:08 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| V1 - Admin 영역 (관리자 전용 사용자 관리)
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Swagger: AdminApi.php
|
|
|
|
|
| - GET /api/v1/admin/users
|
|
|
|
|
| - POST /api/v1/admin/users
|
|
|
|
|
| - GET /api/v1/admin/users/{id}
|
|
|
|
|
| - PUT /api/v1/admin/users/{id}
|
|
|
|
|
| - PATCH /api/v1/admin/users/{id}/status
|
|
|
|
|
| - DELETE /api/v1/admin/users/{id}
|
|
|
|
|
| - POST /api/v1/admin/users/{id}/restore
|
|
|
|
|
| - POST /api/v1/admin/users/{id}/roles
|
|
|
|
|
| - DELETE /api/v1/admin/users/{id}/roles/{role}
|
|
|
|
|
| - POST /api/v1/admin/users/{id}/reset-password
|
|
|
|
|
*/
|
|
|
|
|
Route::prefix('v1_DEV/admin')
|
|
|
|
|
->middleware(['apikey', 'auth:sanctum', 'can:admin']) // 예: 'can:admin' 또는 커스텀 'is_admin'
|
|
|
|
|
->group(function () {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
});
|