query('type', 'day1_audit'); return $this->service->getByType($type); }, __('message.fetched')); } /** * 템플릿 저장 (전체 덮어쓰기) */ public function update(SaveChecklistTemplateRequest $request, int $id) { return ApiResponse::handle(function () use ($request, $id) { return $this->service->save($id, $request->validated()); }, __('message.updated')); } /** * 항목별 파일 목록 조회 */ public function documents(Request $request) { return ApiResponse::handle(function () use ($request) { $templateId = (int) $request->query('template_id'); $subItemId = $request->query('sub_item_id'); return $this->service->getDocuments($templateId, $subItemId); }, __('message.fetched')); } /** * 파일 업로드 */ public function uploadDocument(Request $request) { $request->validate([ 'template_id' => ['required', 'integer'], 'sub_item_id' => ['required', 'string', 'max:50'], 'file' => ['required', 'file', 'max:10240'], // 10MB ]); return ApiResponse::handle(function () use ($request) { return $this->service->uploadDocument( (int) $request->input('template_id'), $request->input('sub_item_id'), $request->file('file') ); }, __('message.created')); } /** * 파일 삭제 */ public function deleteDocument(int $id, Request $request) { return ApiResponse::handle(function () use ($id, $request) { $replace = filter_var($request->query('replace', false), FILTER_VALIDATE_BOOLEAN); $this->service->deleteDocument($id, $replace); return 'success'; }, __('message.deleted')); } }