- api.php를 13개 도메인별 파일로 분리 (1,479줄 → 61줄) - ApiVersionMiddleware 생성 (헤더/쿼리 기반 버전 선택) - v2 요청 시 v2 없으면 v1으로 자동 폴백 - 지원 헤더: Accept-Version, X-API-Version, api_version 쿼리 분리된 도메인: auth, admin, users, tenants, hr, finance, sales, inventory, production, design, files, boards, common Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
45 lines
3.0 KiB
PHP
45 lines
3.0 KiB
PHP
<?php
|
|
|
|
/**
|
|
* 파일 관리 API 라우트 (v1)
|
|
*
|
|
* - 파일 업로드/다운로드
|
|
* - 폴더 관리
|
|
* - 저장소 사용량
|
|
* - 공유 링크
|
|
*/
|
|
|
|
use App\Http\Controllers\Api\V1\FileStorageController;
|
|
use App\Http\Controllers\Api\V1\FolderController;
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
// 파일 저장소 API
|
|
Route::prefix('files')->group(function () {
|
|
Route::post('/upload', [FileStorageController::class, 'upload'])->name('v1.files.upload'); // 파일 업로드 (임시)
|
|
Route::post('/move', [FileStorageController::class, 'move'])->name('v1.files.move'); // 파일 이동 (temp → folder)
|
|
Route::get('/', [FileStorageController::class, 'index'])->name('v1.files.index'); // 파일 목록
|
|
Route::get('/trash', [FileStorageController::class, 'trash'])->name('v1.files.trash'); // 휴지통 목록
|
|
Route::get('/{id}', [FileStorageController::class, 'show'])->name('v1.files.show'); // 파일 상세
|
|
Route::get('/{id}/download', [FileStorageController::class, 'download'])->name('v1.files.download'); // 파일 다운로드
|
|
Route::delete('/{id}', [FileStorageController::class, 'destroy'])->name('v1.files.destroy'); // 파일 삭제 (soft)
|
|
Route::post('/{id}/restore', [FileStorageController::class, 'restore'])->name('v1.files.restore'); // 파일 복구
|
|
Route::delete('/{id}/permanent', [FileStorageController::class, 'permanentDelete'])->name('v1.files.permanent'); // 파일 영구 삭제
|
|
Route::post('/{id}/share', [FileStorageController::class, 'createShareLink'])->name('v1.files.share'); // 공유 링크 생성
|
|
});
|
|
|
|
// 저장소 사용량
|
|
Route::get('/storage/usage', [FileStorageController::class, 'storageUsage'])->name('v1.storage.usage');
|
|
|
|
// 폴더 관리 API
|
|
Route::prefix('folders')->group(function () {
|
|
Route::get('/', [FolderController::class, 'index'])->name('v1.folders.index'); // 폴더 목록
|
|
Route::post('/', [FolderController::class, 'store'])->name('v1.folders.store'); // 폴더 생성
|
|
Route::get('/{id}', [FolderController::class, 'show'])->name('v1.folders.show'); // 폴더 상세
|
|
Route::put('/{id}', [FolderController::class, 'update'])->name('v1.folders.update'); // 폴더 수정
|
|
Route::delete('/{id}', [FolderController::class, 'destroy'])->name('v1.folders.destroy'); // 폴더 삭제/비활성화
|
|
Route::post('/reorder', [FolderController::class, 'reorder'])->name('v1.folders.reorder'); // 폴더 순서 변경
|
|
});
|
|
|
|
// 공유 링크 다운로드 (인증 불필요 - 메인 api.php에서 v1 그룹 밖으로 분리)
|
|
// Route::get('/files/share/{token}', [FileStorageController::class, 'downloadShared'])->name('v1.files.share.download');
|