summaryrefslogtreecommitdiff
path: root/lib/vendor-investigation/service.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/vendor-investigation/service.ts')
-rw-r--r--lib/vendor-investigation/service.ts66
1 files changed, 65 insertions, 1 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