diff options
Diffstat (limited to 'lib/forms-plant/services.ts')
| -rw-r--r-- | lib/forms-plant/services.ts | 161 |
1 files changed, 82 insertions, 79 deletions
diff --git a/lib/forms-plant/services.ts b/lib/forms-plant/services.ts index 3f50bd47..64d353de 100644 --- a/lib/forms-plant/services.ts +++ b/lib/forms-plant/services.ts @@ -21,7 +21,7 @@ import { VendorDataReportTempsPlant, } from "@/db/schema/vendorData"; import { eq, and, desc, sql, DrizzleError, inArray, or, type SQL, type InferSelectModel } from "drizzle-orm"; -import { unstable_cache } from "next/cache"; +import { unstable_cache ,unstable_noStore } from "next/cache"; import { revalidateTag } from "next/cache"; import { getErrorMessage } from "../handle-error"; import { DataTableColumnJSON } from "@/components/form-data/form-data-table-columns"; @@ -234,9 +234,10 @@ export async function getEditableFieldsByTag( * 그리고 이 로직 전체를 unstable_cache로 감싸 캐싱. */ export async function getFormData(formCode: string, projectCode: string, packageCode:string) { + unstable_noStore(); try { - console.log(formCode,projectCode, packageCode) + // console.log(formCode,projectCode, packageCode) const project = await db.query.projects.findFirst({ where: eq(projects.code, projectCode), @@ -329,83 +330,84 @@ export async function getFormData(formCode: string, projectCode: string, package console.error(`[getFormData] Cache operation failed:`, cacheError); // Fallback logic (기존과 동일하게 editableFieldsMap 추가) - try { - console.log(`[getFormData] Fallback DB query for (${formCode}, ${packageCode})`); - - const project = await db.query.projects.findFirst({ - where: eq(projects.code, projectCode), - columns: { - id: true - } - }); - - const projectId = project.id; - - const metaRows = await db - .select() - .from(formMetas) - .where( - and( - eq(formMetas.formCode, formCode), - eq(formMetas.projectId, projectId) - ) - ) - .orderBy(desc(formMetas.updatedAt)) - .limit(1); - - const meta = metaRows[0] ?? null; - if (!meta) { - console.warn(`[getFormData] Fallback: No form meta found for formCode: ${formCode} and projectId: ${projectId}`); - return { columns: null, data: [], editableFieldsMap: new Map() }; - } - - const entryRows = await db - .select() - .from(formEntriesPlant) - .where( - and( - eq(formEntriesPlant.formCode, formCode), - eq(formEntriesPlant.projectCode, projectCode), - eq(formEntriesPlant.packageCode, packageCode) - ) - ) - .orderBy(desc(formEntriesPlant.updatedAt)) - .limit(1); - - const entry = entryRows[0] ?? null; - - let columns = meta.columns as DataTableColumnJSON[]; - const excludeKeys = ['BF_TAG_NO', 'TAG_TYPE_ID', 'PIC_NO']; - columns = columns.filter(col => !excludeKeys.includes(col.key)); - - columns.forEach((col) => { - if (!col.displayLabel) { - if (col.uom) { - col.displayLabel = `${col.label} (${col.uom})`; - } else { - col.displayLabel = col.label; - } - } - }); - - let data: Array<Record<string, any>> = []; - if (entry) { - if (Array.isArray(entry.data)) { - data = entry.data; - } else { - console.warn("formEntries data was not an array. Using empty array (fallback)."); - } - } - - // Fallback에서도 편집 가능 필드 정보 계산 - const editableFieldsMap = await getEditableFieldsByTag(projectCode, packageCode, projectId); - - return { columns, data, projectId, editableFieldsMap }; - } catch (dbError) { - console.error(`[getFormData] Fallback DB query failed:`, dbError); - return { columns: null, data: [], editableFieldsMap: new Map() }; - } - } + // try { + // console.log(`[getFormData] Fallback DB query for (${formCode}, ${packageCode})`); + + // const project = await db.query.projects.findFirst({ + // where: eq(projects.code, projectCode), + // columns: { + // id: true + // } + // }); + + // const projectId = project.id; + + // const metaRows = await db + // .select() + // .from(formMetas) + // .where( + // and( + // eq(formMetas.formCode, formCode), + // eq(formMetas.projectId, projectId) + // ) + // ) + // .orderBy(desc(formMetas.updatedAt)) + // .limit(1); + + // const meta = metaRows[0] ?? null; + // if (!meta) { + // console.warn(`[getFormData] Fallback: No form meta found for formCode: ${formCode} and projectId: ${projectId}`); + // return { columns: null, data: [], editableFieldsMap: new Map() }; + // } + + // const entryRows = await db + // .select() + // .from(formEntriesPlant) + // .where( + // and( + // eq(formEntriesPlant.formCode, formCode), + // eq(formEntriesPlant.projectCode, projectCode), + // eq(formEntriesPlant.packageCode, packageCode) + // ) + // ) + // .orderBy(desc(formEntriesPlant.updatedAt)) + // .limit(1); + + // const entry = entryRows[0] ?? null; + + // let columns = meta.columns as DataTableColumnJSON[]; + // const excludeKeys = ['BF_TAG_NO', 'TAG_TYPE_ID', 'PIC_NO']; + // columns = columns.filter(col => !excludeKeys.includes(col.key)); + + // columns.forEach((col) => { + // if (!col.displayLabel) { + // if (col.uom) { + // col.displayLabel = `${col.label} (${col.uom})`; + // } else { + // col.displayLabel = col.label; + // } + // } + // }); + + // let data: Array<Record<string, any>> = []; + // if (entry) { + // if (Array.isArray(entry.data)) { + // data = entry.data; + // } else { + // console.warn("formEntries data was not an array. Using empty array (fallback)."); + // } + // } + + // // Fallback에서도 편집 가능 필드 정보 계산 + // const editableFieldsMap = await getEditableFieldsByTag(projectCode, packageCode, projectId); + + // return { columns, data, projectId, editableFieldsMap }; + // } catch (dbError) { + // console.error(`[getFormData] Fallback DB query failed:`, dbError); + // return { columns: null, data: [], editableFieldsMap: new Map() }; + // } + // } +} } /** * contractId와 formCode(itemCode)를 사용하여 contractItemId를 찾는 서버 액션 @@ -1052,6 +1054,7 @@ type GetReportFileList = ( }>; export const getFormId: GetReportFileList = async (projectCode, packageCode, formCode, mode) => { + unstable_noStore(); const result: { formId: number } = { formId: 0, }; |
