summaryrefslogtreecommitdiff
path: root/db/schema/projects.ts
blob: a67b2c339ff907347031e688f1ac437727d77fef (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
68
69
import { pgTable, varchar, text, timestamp, char, decimal, serial, uniqueIndex } from "drizzle-orm/pg-core"

export const projects = pgTable("projects", {
  id: serial("id").primaryKey(),
  code: varchar("code", { length: 50 }).notNull(),
  name: text("name").notNull(),
  type: varchar("type", { length: 20 }).default("ship").notNull(),

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

export type Project = typeof projects.$inferSelect


export const biddingProjects = pgTable("bidding_projects", {
  id: serial("id").primaryKey(),
  pspid: char('pspid', { length: 24 }).notNull().unique(), // 견적프로젝트번호
  projNm: varchar('proj_nm', { length: 90 }), // 견적프로젝트명
  sector: char('sector', { length: 1 }), // 부문(S / M)
  projMsrm: decimal('proj_msrm', { precision: 3, scale: 0 }), // 척수
  kunnr: char('kunnr', { length: 10 }), // 선주코드
  kunnrNm: varchar('kunnr_nm', { length: 30 }), // 선주명
  cls1: char('cls_1', { length: 10 }), // 선급코드
  cls1Nm: varchar('cls1_nm', { length: 30 }), // 선급명
  ptype: char('ptype', { length: 3 }), // 선종코드
  ptypeNm: varchar('ptype_nm', { length: 40 }), // 선종명
  pmodelCd: char('pmodel_cd', { length: 10 }), // 선형코드
  pmodelNm: varchar('pmodel_nm', { length: 40 }), // 선형명
  pmodelSz: varchar('pmodel_sz', { length: 20 }), // 선형크기
  pmodelUom: char('pmodel_uom', { length: 5 }), // 선형단위
  txt04: char('txt04', { length: 4 }), // 견적상태코드
  txt30: varchar('txt30', { length: 30 }), // 견적상태명
  estmPm: varchar('estm_pm', { length: 30 }), // 견적대표PM 성명

  // 조선, 해양 헐, 해양 탑 구분 컬럼
  // 조선 및 해양 헐은 ECC에서 SOAP으로 가져오며, 해양 탑은 NONSAP에서 ESTM_PROJ_NO 테이블에서 가져온다.
  // 조선/해양 헐을 구분할 수 있는 방법은 ECC에서 sector가 S(SHIP)인지 M(MARINE)인지 구분하면 된다.
  pjtType: varchar('pjt_type', { enum: ['SHIP','TOP', 'HULL'] }),
  
  createdAt: timestamp("created_at").defaultNow().notNull(),
  updatedAt: timestamp("updated_at").defaultNow().notNull(),
});

export const projectSeries = pgTable('project_series', {
  pspid: char('pspid', { length: 24 }).notNull().references(() => biddingProjects.pspid), // 견적프로젝트번호
  sersNo: char('sers_no', { length: 3 }).notNull(), // 시리즈번호
  scDt: char('sc_dt', {length: 8}), // Steel Cutting Date
  klDt: char('kl_dt', {length: 8}), // Keel Laying Date
  lcDt: char('lc_dt', {length: 8}), // Launching Date
  dlDt: char('dl_dt', {length: 8}), // Delivery Date
  dockNo: char('dock_no', { length: 3 }), // 도크코드
  dockNm: varchar('dock_nm', { length: 40 }), // 도크명
  projNo: char('proj_no', { length: 24 }), // SN공사번호(계약후)
  post1: varchar('post1', { length: 40 }), // SN공사명(계약후)
}, (table) => {
  return {
    pk: uniqueIndex("project_sersNo_unique").on(
      table.pspid,
      table.sersNo
    )
  }
});

export type BiddingProjects = typeof biddingProjects.$inferSelect
export type ProjectSeries = typeof projectSeries.$inferSelect
// 새로 데이터 수신 시 구분을 위해 사용
export type NewBiddingProject = typeof biddingProjects.$inferInsert
export type NewProjectSeries = typeof projectSeries.$inferInsert