diff options
Diffstat (limited to 'lib/vendor-investigation')
| -rw-r--r-- | lib/vendor-investigation/service.ts | 66 | ||||
| -rw-r--r-- | lib/vendor-investigation/table/update-investigation-sheet.tsx | 43 |
2 files changed, 84 insertions, 25 deletions
diff --git a/lib/vendor-investigation/service.ts b/lib/vendor-investigation/service.ts index f0eb411e..c5097e75 100644 --- a/lib/vendor-investigation/service.ts +++ b/lib/vendor-investigation/service.ts @@ -15,6 +15,8 @@ import { v4 as uuid } from "uuid" import { vendorsLogs } from "@/db/schema"; import { cache } from "react" import { deleteFile } from "../file-stroage"; +import { saveDRMFile } from "../file-stroage"; +import { decryptWithServerAction } from "@/components/drm/drmUtils"; export async function getVendorsInvestigation(input: GetVendorsInvestigationSchema) { return unstable_cache( @@ -629,4 +631,66 @@ export const getAllItems = cache(async () => { console.error("Error fetching all items:", error) throw new Error("Failed to fetch items") } -})
\ No newline at end of file +}) + +/** + * Create vendor investigation attachment + */ +export async function createVendorInvestigationAttachmentAction(input: { + investigationId: number; + file: File; + userId?: string; +}) { + unstable_noStore(); + + try { + console.log(`π μ€μ¬ 첨λΆνμΌ μμ± μμ: ${input.file.name}`); + + // 1. saveDRMFileμ μ¬μ©νμ¬ νμΌ μ μ₯ + const saveResult = await saveDRMFile( + input.file, + decryptWithServerAction, + `vendor-investigation/${input.investigationId}`, + input.userId + ); + + if (!saveResult.success) { + throw new Error(`νμΌ μ μ₯ μ€ν¨: ${input.file.name} - ${saveResult.error}`); + } + + console.log(`β
νμΌ μ μ₯ μλ£: ${input.file.name} -> ${saveResult.fileName}`); + + // 2. DBμ 첨λΆνμΌ λ μ½λ μμ± + const [insertedAttachment] = await db + .insert(vendorInvestigationAttachments) + .values({ + investigationId: input.investigationId, + fileName: saveResult.fileName!, + originalFileName: input.file.name, + filePath: saveResult.publicPath!, + fileSize: input.file.size, + mimeType: input.file.type || 'application/octet-stream', + attachmentType: 'DOCUMENT', // λλ νμΌ νμ
μ λ°λΌ κ²°μ + createdAt: new Date(), + updatedAt: new Date(), + }) + .returning(); + + console.log(`β
첨λΆνμΌ DB λ μ½λ μμ± μλ£: ID ${insertedAttachment.id}`); + + // 3. μΊμ 무ν¨ν + revalidateTag(`vendor-investigation-${input.investigationId}`); + revalidateTag("vendor-investigations"); + + return { + success: true, + attachment: insertedAttachment, + }; + } catch (error) { + console.error(`β μ€μ¬ 첨λΆνμΌ μμ± μ€ν¨: ${input.file.name}`, error); + return { + success: false, + error: error instanceof Error ? error.message : "μ μ μλ μ€λ₯", + }; + } +}
\ No newline at end of file diff --git a/lib/vendor-investigation/table/update-investigation-sheet.tsx b/lib/vendor-investigation/table/update-investigation-sheet.tsx index 14350815..37d1b2cd 100644 --- a/lib/vendor-investigation/table/update-investigation-sheet.tsx +++ b/lib/vendor-investigation/table/update-investigation-sheet.tsx @@ -64,7 +64,7 @@ import { updateVendorInvestigationSchema, type UpdateVendorInvestigationSchema, } from "../validations" -import { updateVendorInvestigationAction, getInvestigationAttachments, deleteInvestigationAttachment } from "../service" +import { updateVendorInvestigationAction, getInvestigationAttachments, deleteInvestigationAttachment, createVendorInvestigationAttachmentAction } from "../service" import { VendorInvestigationsViewWithContacts } from "@/config/vendorInvestigationsColumnsConfig" import prettyBytes from "pretty-bytes" import { downloadFile } from "@/lib/file-download" @@ -183,15 +183,7 @@ export function UpdateVendorInvestigationSheet({ if (!investigation) return try { - const response = await fetch(`/api/vendor-investigations/${investigation.investigationId}/attachments?attachmentId=${attachmentId}`, { - method: "DELETE", - }) - - if (!response.ok) { - const errorData = await response.json() - throw new Error(errorData.error || "첨λΆνμΌ μμ μ€ν¨") - } - + await deleteInvestigationAttachment(attachmentId) toast.success("첨λΆνμΌμ΄ μμ λμμ΅λλ€.") // λͺ©λ‘ μλ‘κ³ μΉ¨ loadExistingAttachments(investigation.investigationId) @@ -409,23 +401,26 @@ export function UpdateVendorInvestigationSheet({ // νμΌ μ
λ‘λ ν¨μ const uploadFiles = async (files: File[], investigationId: number) => { const uploadPromises = files.map(async (file) => { - const formData = new FormData() - formData.append("file", file) - - const response = await fetch(`/api/vendor-investigations/${investigationId}/attachments`, { - method: "POST", - body: formData, - }) + try { + // μλ² μ‘μ
μ νΈμΆνμ¬ νμΌ μ μ₯ λ° DB λ μ½λ μμ± + const result = await createVendorInvestigationAttachmentAction({ + investigationId, + file, + userId: undefined // νμμ μ¬μ©μ ID μΆκ° + }); + + if (!result.success) { + throw new Error(result.error || "νμΌ μ
λ‘λ μ€ν¨"); + } - if (!response.ok) { - const errorData = await response.json() - throw new Error(errorData.error || "νμΌ μ
λ‘λ μ€ν¨") + return result.attachment; + } catch (error) { + console.error(`νμΌ μ
λ‘λ μ€ν¨: ${file.name}`, error); + throw error; } + }); - return await response.json() - }) - - return await Promise.all(uploadPromises) + return await Promise.all(uploadPromises); } // Submit handler |
