- feat: [barobill] 바로빌 카드/은행/홈택스 REST API 구현 - feat: [equipment] 설비관리 API 백엔드 구현 - feat: [payroll] 급여관리 계산 엔진 및 일괄 처리 API - feat: [QMS] 점검표 템플릿 관리 + 로트심사 개선 - feat: [생산/출하] 수주 단위 출하 자동생성 + 상태 흐름 개선 - feat: [receiving] 입고 성적서 파일 연결 - feat: [견적] 제어기 타입 체계 변경 - feat: [email] 테넌트 메일 설정 마이그레이션 및 모델 - feat: [pmis] 시공관리 테이블 마이그레이션 - feat: [R2] 파일 업로드 커맨드 + filesystems 설정 - feat: [배포] Jenkinsfile 롤백 기능 추가 - fix: [approval] SAM API 규칙 준수 코드 개선 - fix: [account-codes] 계정과목 중복 데이터 정리 - fix: [payroll] 일괄 생성 시 삭제된 사용자 건너뛰기 - fix: [db] codebridge DB 분리 후 깨진 FK 제약조건 제거 - refactor: [barobill] 바로빌 연동 코드 전면 개선
186 lines
4.5 KiB
PHP
186 lines
4.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api\V1;
|
|
|
|
use App\Helpers\ApiResponse;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\Api\V1\FileMoveRequest;
|
|
use App\Http\Requests\Api\V1\FileUploadRequest;
|
|
use App\Http\Requests\Api\V1\ShareLinkRequest;
|
|
use App\Services\FileStorageService;
|
|
use Illuminate\Http\Request;
|
|
|
|
class FileStorageController extends Controller
|
|
{
|
|
/**
|
|
* Upload file to temp
|
|
*/
|
|
public function upload(FileUploadRequest $request)
|
|
{
|
|
return ApiResponse::handle(function () use ($request) {
|
|
$service = new FileStorageService;
|
|
$file = $service->upload(
|
|
$request->file('file'),
|
|
$request->input('description')
|
|
);
|
|
|
|
return $file;
|
|
}, __('message.file_uploaded'));
|
|
}
|
|
|
|
/**
|
|
* Move files from temp to folder
|
|
*/
|
|
public function move(FileMoveRequest $request)
|
|
{
|
|
return ApiResponse::handle(function () use ($request) {
|
|
$service = new FileStorageService;
|
|
$files = $service->moveToFolder(
|
|
$request->input('file_ids'),
|
|
$request->input('folder_id'),
|
|
$request->input('document_id'),
|
|
$request->input('document_type')
|
|
);
|
|
|
|
return $files;
|
|
}, __('message.files_moved'));
|
|
}
|
|
|
|
/**
|
|
* Get file by ID
|
|
*/
|
|
public function show(int $id)
|
|
{
|
|
return ApiResponse::handle(function () use ($id) {
|
|
$service = new FileStorageService;
|
|
|
|
return $service->getFile($id);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* List files
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
return ApiResponse::handle(function () use ($request) {
|
|
$service = new FileStorageService;
|
|
|
|
return $service->listFiles($request->all());
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Get trash files
|
|
*/
|
|
public function trash()
|
|
{
|
|
return ApiResponse::handle(function () {
|
|
$service = new FileStorageService;
|
|
|
|
return $service->getTrash();
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Download file (attachment)
|
|
*/
|
|
public function download(int $id)
|
|
{
|
|
$service = new FileStorageService;
|
|
$file = $service->getFile($id);
|
|
|
|
return $file->download(inline: false);
|
|
}
|
|
|
|
/**
|
|
* View file inline (이미지/PDF 브라우저에서 바로 표시)
|
|
*/
|
|
public function view(int $id)
|
|
{
|
|
$service = new FileStorageService;
|
|
$file = $service->getFile($id);
|
|
|
|
return $file->download(inline: true);
|
|
}
|
|
|
|
/**
|
|
* Soft delete file
|
|
*/
|
|
public function destroy(int $id)
|
|
{
|
|
return ApiResponse::handle(function () use ($id) {
|
|
$service = new FileStorageService;
|
|
|
|
return $service->deleteFile($id);
|
|
}, __('message.file_deleted'));
|
|
}
|
|
|
|
/**
|
|
* Restore file from trash
|
|
*/
|
|
public function restore(int $id)
|
|
{
|
|
return ApiResponse::handle(function () use ($id) {
|
|
$service = new FileStorageService;
|
|
|
|
return $service->restoreFile($id);
|
|
}, __('message.file_restored'));
|
|
}
|
|
|
|
/**
|
|
* Permanently delete file
|
|
*/
|
|
public function permanentDelete(int $id)
|
|
{
|
|
return ApiResponse::handle(function () use ($id) {
|
|
$service = new FileStorageService;
|
|
$service->permanentDelete($id);
|
|
|
|
return ['success' => true];
|
|
}, __('message.file_permanently_deleted'));
|
|
}
|
|
|
|
/**
|
|
* Create share link
|
|
*/
|
|
public function createShareLink(ShareLinkRequest $request)
|
|
{
|
|
return ApiResponse::handle(function () use ($request) {
|
|
$service = new FileStorageService;
|
|
$link = $service->createShareLink(
|
|
$request->input('file_id'),
|
|
$request->input('expiry_hours', 24)
|
|
);
|
|
|
|
return [
|
|
'token' => $link->token,
|
|
'url' => url("/api/v1/files/share/{$link->token}"),
|
|
'expires_at' => $link->expires_at,
|
|
];
|
|
}, __('message.share_link_created'));
|
|
}
|
|
|
|
/**
|
|
* Download file by share token (public, no auth)
|
|
*/
|
|
public function downloadShared(string $token)
|
|
{
|
|
$file = FileStorageService::getFileByShareToken($token);
|
|
|
|
return $file->download();
|
|
}
|
|
|
|
/**
|
|
* Get storage usage
|
|
*/
|
|
public function storageUsage()
|
|
{
|
|
return ApiResponse::handle(function () {
|
|
$service = new FileStorageService;
|
|
|
|
return $service->getStorageUsage();
|
|
});
|
|
}
|
|
}
|