summaryrefslogtreecommitdiff
path: root/db/schema/pq.ts
blob: 59ec8f07a2475f14619534963d6f4da45f3b6542 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import {
    pgTable, serial, integer, varchar, text,
    timestamp, uniqueIndex
} from "drizzle-orm/pg-core";
import { vendors } from "./vendors";

export const pqCriterias = pgTable("pq_criterias", {
    id: serial("id").primaryKey(),
    code: varchar("code", { length: 50 }).notNull(),        // 예: "1-1"
    checkPoint: varchar("check_point", { length: 255 }).notNull(),
    description: text("description"),
    remarks: text("remarks"),

    // (선택) "GENERAL", "Quality Management System" 등 큰 분류
    groupName: varchar("group_name", { length: 255 }),
    createdAt: timestamp("created_at").defaultNow().notNull(),
    updatedAt: timestamp("updated_at").defaultNow().notNull(),
});

export const vendorPqCriteriaAnswers = pgTable("vendor_pq_criteria_answers", {
    id: serial("id").primaryKey(),
    vendorId: integer("vendor_id")
    .notNull()
    .references(() => vendors.id, { onDelete: "cascade" }),

    criteriaId: integer("criteria_id")
        .notNull()
        .references(() => pqCriterias.id, { onDelete: "cascade" }),

    answer: text("answer"),

    createdAt: timestamp("created_at").defaultNow().notNull(),
    updatedAt: timestamp("updated_at").defaultNow().notNull(),
});

export const vendorCriteriaAttachments = pgTable("vendor_criteria_attachments", {
    id: serial("id").primaryKey(),
    vendorCriteriaAnswerId: integer("vendor_criteria_answer_id")
        .references(() => vendorPqCriteriaAnswers.id, { onDelete: "cascade" })
        .notNull(),

    fileName: varchar("file_name", { length: 255 }).notNull(),
    filePath: varchar("file_path", { length: 1024 }).notNull(),
    fileType: varchar("file_type", { length: 50 }),
    fileSize: integer("file_size"),

    createdAt: timestamp("created_at").defaultNow().notNull(),
    updatedAt: timestamp("updated_at").defaultNow().notNull(),
});

export const vendorPqReviewLogs = pgTable("vendor_pq_review_logs", {
    id: serial("id").primaryKey(),
  
    // Each log references a single vendorPqCriteriaAnswers row
    vendorPqCriteriaAnswerId: integer("vendor_pq_criteria_answer_id")
      .references(() => vendorPqCriteriaAnswers.id, { onDelete: "cascade" })
      .notNull(),
  
    // The reviewer's comment text
    reviewerComment: text("reviewer_comment").notNull(),
  
    // Optionally store the reviewer name or user ID, if you have it
    reviewerName: text("reviewer_name"),
  
    createdAt: timestamp("created_at").defaultNow().notNull(),
  })
export type PqCriterias = typeof pqCriterias.$inferSelect