diff options
Diffstat (limited to 'lib/docu-list-rule')
6 files changed, 138 insertions, 6 deletions
diff --git a/lib/docu-list-rule/number-type-configs/service.ts b/lib/docu-list-rule/number-type-configs/service.ts index f4cadc70..c29af464 100644 --- a/lib/docu-list-rule/number-type-configs/service.ts +++ b/lib/docu-list-rule/number-type-configs/service.ts @@ -121,6 +121,7 @@ export async function getNumberTypeConfigs(input: GetNumberTypeConfigsSchema) { codeGroupId: documentNumberTypeConfigs.codeGroupId, sdq: documentNumberTypeConfigs.sdq, description: documentNumberTypeConfigs.description, + delimiter: documentNumberTypeConfigs.delimiter, remark: documentNumberTypeConfigs.remark, isActive: documentNumberTypeConfigs.isActive, createdAt: documentNumberTypeConfigs.createdAt, diff --git a/lib/docu-list-rule/number-type-configs/table/number-type-configs-table-columns.tsx b/lib/docu-list-rule/number-type-configs/table/number-type-configs-table-columns.tsx index 260c50cd..27a9f707 100644 --- a/lib/docu-list-rule/number-type-configs/table/number-type-configs-table-columns.tsx +++ b/lib/docu-list-rule/number-type-configs/table/number-type-configs-table-columns.tsx @@ -64,6 +64,19 @@ export function getColumns({ setRowAction }: GetColumnsProps): ColumnDef<NumberT minSize: 50 }, { + accessorKey: "delimiter", + enableResizing: true, + header: ({ column }) => ( + <DataTableColumnHeaderSimple column={column} title="delimiter" /> + ), + meta: { + excelHeader: "delimiter", + type: "text", + }, + cell: ({ row }) => row.getValue("delimiter") ?? "", + minSize: 50 + }, + { accessorKey: "codeGroupName", enableResizing: true, header: ({ column }) => ( diff --git a/lib/docu-list-rule/number-types/service.ts b/lib/docu-list-rule/number-types/service.ts index 3fb51abd..c4a0cdac 100644 --- a/lib/docu-list-rule/number-types/service.ts +++ b/lib/docu-list-rule/number-types/service.ts @@ -524,4 +524,22 @@ export async function getNumberTypesWithConfigs(input: { pageCount: 0, } } -}
\ No newline at end of file +} + +export async function checkNumberTypesExist(projectId: number, names: string[]): Promise<boolean> { + try { + const existing = await db + .select({ name: documentNumberTypes.name }) + .from(documentNumberTypes) + .where(and( + eq(documentNumberTypes.projectId, projectId), + inArray(documentNumberTypes.name, names) + )) + + // 모든 name이 존재하는지 체크 + return existing.length === names.length + } catch (error) { + console.error("Error checking number types:", error) + return false + } +}
\ No newline at end of file diff --git a/lib/docu-list-rule/number-types/table/number-type-initialize-button.tsx b/lib/docu-list-rule/number-types/table/number-type-initialize-button.tsx new file mode 100644 index 00000000..904cdda5 --- /dev/null +++ b/lib/docu-list-rule/number-types/table/number-type-initialize-button.tsx @@ -0,0 +1,99 @@ +// number-type-initialize-button.tsx +"use client" + +import * as React from "react" +import { Button } from "@/components/ui/button" +import { Plus } from "lucide-react" +import { toast } from "sonner" +import { createNumberType } from "@/lib/docu-list-rule/number-types/service" +import { useParams } from "next/navigation" +import { checkNumberTypesExist } from "@/lib/docu-list-rule/number-types/service" + +interface NumberTypeInitializeButtonProps { + onSuccess: () => void +} + +export function NumberTypeInitializeButton({ onSuccess }: NumberTypeInitializeButtonProps) { + const params = useParams() + const projectId = Number(params?.projectId) + const [loading, setLoading] = React.useState(false) + const [isInitialized, setIsInitialized] = React.useState(false) + + console.log(projectId,"projectId") + + // 컴포넌트 마운트 시 이미 존재하는지 체크 + React.useEffect(() => { + const checkExisting = async () => { + if (!projectId) return + + const exists = await checkNumberTypesExist(projectId, ["SHI", "CPY"]) + setIsInitialized(exists) + } + + checkExisting() + }, [projectId]) + + const handleInitialize = async () => { + if (isInitialized) return + + setLoading(true) + try { + const numberTypes = [ + { + projectId: projectId, + name: "SHI", + description: "삼성중공업 도서번호", + }, + { + projectId: projectId, + name: "CPY", + description: "프로젝트 문서번호", + } + ] + + let allSuccess = true + let createdCount = 0 + + for (const numberType of numberTypes) { + const result = await createNumberType(numberType) + + if (result.success) { + createdCount++ + } else if (result.error?.includes("already exists")) { + // 이미 존재하는 경우는 무시 + continue + } else { + allSuccess = false + toast.error(`${numberType.name} 생성 실패: ${result.error}`) + } + } + + if (createdCount > 0) { + toast.success(`${createdCount}개의 Number Type이 생성되었습니다.`) + setIsInitialized(true) + onSuccess() + } else if (allSuccess) { + toast.info("이미 모든 Number Type이 존재합니다.") + setIsInitialized(true) + } + + } catch (error) { + console.error("Number Type 초기화 실패:", error) + toast.error("Number Type 초기화에 실패했습니다.") + } finally { + setLoading(false) + } + } + + return ( + <Button + variant="outline" + size="sm" + onClick={handleInitialize} + disabled={loading || isInitialized} + > + <Plus className="mr-2 h-4 w-4" /> + {loading ? "초기화 중..." : isInitialized ? "초기화 완료" : "기본 Type 생성"} + </Button> + ) +}
\ No newline at end of file diff --git a/lib/docu-list-rule/number-types/table/number-types-table-columns.tsx b/lib/docu-list-rule/number-types/table/number-types-table-columns.tsx index 59403f3d..56708f57 100644 --- a/lib/docu-list-rule/number-types/table/number-types-table-columns.tsx +++ b/lib/docu-list-rule/number-types/table/number-types-table-columns.tsx @@ -159,6 +159,6 @@ export function getColumns({ setRowAction }: GetColumnsProps): ColumnDef<NumberT return [ selectColumn, ...dataColumns, - actionsColumn, + // actionsColumn, ] }
\ No newline at end of file diff --git a/lib/docu-list-rule/number-types/table/number-types-table-toolbar.tsx b/lib/docu-list-rule/number-types/table/number-types-table-toolbar.tsx index 3d2d9312..863088de 100644 --- a/lib/docu-list-rule/number-types/table/number-types-table-toolbar.tsx +++ b/lib/docu-list-rule/number-types/table/number-types-table-toolbar.tsx @@ -1,3 +1,4 @@ +// number-types-table-toolbar-actions.tsx "use client" import * as React from "react" @@ -7,7 +8,7 @@ import { Download } from "lucide-react" import { exportTableToExcel } from "@/lib/export" import { Button } from "@/components/ui/button" import { DeleteNumberTypesDialog } from "@/lib/docu-list-rule/number-types/table/delete-number-types-dialog" -import { NumberTypeAddDialog } from "@/lib/docu-list-rule/number-types/table/number-type-add-dialog" +import { NumberTypeInitializeButton } from "@/lib/docu-list-rule/number-types/table/number-type-initialize-button" import { documentNumberTypes } from "@/db/schema/docu-list-rule" // Number Type with configs 타입 정의 @@ -39,8 +40,8 @@ export function NumberTypesTableToolbarActions({ table, onSuccess }: NumberTypes /> ) : null} - <NumberTypeAddDialog onSuccess={onSuccess || (() => {})} /> - + {/** 2) 기본 Type 생성 버튼 */} + <NumberTypeInitializeButton onSuccess={onSuccess || (() => {})} /> </div> ) -}
\ No newline at end of file +}
\ No newline at end of file |
