source: database/drizzle/schema/components.ts@ 80f6cdb

main
Last change on this file since 80f6cdb was 76b980b, checked in by Tome <gjorgievtome@…>, 7 months ago

add pci_express_slots attribute

  • Property mode set to 100644
File size: 10.0 KB
RevLine 
[c4dd17d]1import {pgTable, serial, integer, text, numeric, boolean, date, primaryKey, check} from "drizzle-orm/pg-core";
2import {sql} from "drizzle-orm";
[fdd776b]3
4export const componentsTable = pgTable("components", {
5 id: serial("id").primaryKey(),
6 name: text("name").notNull(),
7 brand: text("brand").notNull(),
8 price: numeric("price").notNull(),
9 imgUrl: text("img_url"),
[c4dd17d]10 type: text("type").notNull()
11 },
12 (t) => ({
13 checkType: check("check_type", sql`${t.type} in
14 ('cpu', 'gpu', 'memory', 'storage', 'power_supply', 'motherboard', 'case', 'cooler', 'memory_card', 'optical_drive', 'sound_card', 'cables', 'network_adapter', 'network_card')`)
15 }),
16);
[fdd776b]17
18// Base Components
19export const CPUTable = pgTable("cpu", {
20 componentId: integer("component_id")
21 .primaryKey()
22 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
23 socket: text("socket").notNull(),
24 cores: integer("cores").notNull(),
25 threads: integer("threads").notNull(),
26 baseClock: numeric("base_clock").notNull(),
27 boostClock: numeric("boost_clock"),
[76b980b]28 tdp: numeric("tdp").notNull()
[fdd776b]29});
30
31export const GPUTable = pgTable("gpu", {
32 componentId: integer("component_id")
33 .primaryKey()
34 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
35 vram: numeric("vram").notNull(),
36 tdp: numeric("tdp").notNull(),
37 baseClock: numeric("base_clock"),
38 boostClock: numeric("boost_clock"),
39 chipset: text("chipset").notNull(),
[76b980b]40 length: numeric("length").notNull()
[fdd776b]41});
42
43export const memoryTable = pgTable("memory", {
44 componentId: integer("component_id")
45 .primaryKey()
46 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
47 type: text("type").notNull(),
48 speed: numeric("speed").notNull(),
49 capacity: numeric("capacity").notNull(),
[76b980b]50 modules: integer("modules").notNull()
[fdd776b]51});
52
53export const powerSupplyTable = pgTable("power_supply", {
54 componentId: integer("component_id")
55 .primaryKey()
56 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
57 type: text("type").notNull(),
58 wattage: numeric("wattage").notNull(),
[76b980b]59 formFactor: text("form_factor").notNull()
[fdd776b]60});
61
[1ebac59]62export const pcCasesTable = pgTable("pc_case", {
[fdd776b]63 componentId: integer("component_id")
64 .primaryKey()
65 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
66 coolerMaxHeight: numeric("cooler_max_height").notNull(),
[76b980b]67 gpuMaxLength: numeric("gpu_max_length").notNull()
[fdd776b]68});
69
70// Case multi-values
71export const caseStorageFormFactorsTable = pgTable("case_storage_form_factors", {
72 caseId: integer("case_id")
73 .notNull()
[1ebac59]74 .references(() => pcCasesTable.componentId, {onDelete: "cascade", onUpdate: "cascade" }),
[fdd776b]75 formFactor: text("form_factor").notNull(),
[76b980b]76 numSlots: integer("num_slots").notNull()
[fdd776b]77 },
78 (t) => ({
[76b980b]79 pk: primaryKey({ columns: [t.caseId, t.formFactor] })
[fdd776b]80 }),
81);
82
83export const casePsFormFactorsTable = pgTable( "case_ps_form_factors", {
84 caseId: integer("case_id")
85 .notNull()
[1ebac59]86 .references(() => pcCasesTable.componentId, { onDelete: "cascade", onUpdate: "cascade"}),
[76b980b]87 formFactor: text("form_factor").notNull()
[fdd776b]88 },
89 (t) => ({
[76b980b]90 pk: primaryKey({ columns: [t.caseId, t.formFactor] })
[fdd776b]91 }),
92);
93
94export const caseMoboFormFactorsTable = pgTable("case_mobo_form_factors", {
95 caseId: integer("case_id")
96 .notNull()
[1ebac59]97 .references(() => pcCasesTable.componentId, { onDelete: "cascade", onUpdate: "cascade"}),
[76b980b]98 formFactor: text("form_factor").notNull()
[fdd776b]99 },
100 (t) => ({
[76b980b]101 pk: primaryKey({ columns: [t.caseId, t.formFactor] })
[fdd776b]102 }),
103);
104
[1ebac59]105export const coolersTable = pgTable("cooler", {
[fdd776b]106 componentId: integer("component_id")
107 .primaryKey()
108 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
109 type: text("type").notNull(),
110 height: numeric("height").notNull(),
[76b980b]111 maxTdpSupported: numeric("max_tdp_supported").notNull()
[fdd776b]112});
113
114// Cooler multi-values
115export const coolerCPUSocketsTable = pgTable("cooler_cpu_sockets", {
[b615094]116 coolerId: integer("cooler_id")
[fdd776b]117 .notNull()
[1ebac59]118 .references(() => coolersTable.componentId, { onDelete: "cascade", onUpdate: "cascade" }),
[76b980b]119 socket: text("socket").notNull()
[fdd776b]120 },
121 (t) => ({
[76b980b]122 pk: primaryKey({ columns: [t.coolerId, t.socket] })
[fdd776b]123 })
124);
125
[1ebac59]126export const motherboardsTable = pgTable("motherboard", {
[fdd776b]127 componentId: integer("component_id")
128 .primaryKey()
129 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
130
131 socket: text("socket").notNull(),
132 chipset: text("chipset").notNull(),
133 formFactor: text("form_factor").notNull(),
134 ramType: text("ram_type").notNull(),
135 numRamSlots: integer("num_ram_slots").notNull(),
136 maxRamCapacity: numeric("max_ram_capacity").notNull(),
[76b980b]137 pciExpressSlots: numeric("pci_express_slots").notNull()
[fdd776b]138});
139
140export const storageTable = pgTable("storage", {
141 componentId: integer("component_id")
142 .primaryKey()
143 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
144 type: text("type").notNull(),
145 capacity: numeric("capacity").notNull(),
[76b980b]146 formFactor: text("form_factor").notNull()
[fdd776b]147});
148
149// Other Components
[1ebac59]150export const memoryCardsTable = pgTable("memory_card", {
[fdd776b]151 componentId: integer("component_id")
152 .primaryKey()
153 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
154 numSlots: integer("num_slots").notNull(),
[76b980b]155 interface: text("interface").notNull()
[fdd776b]156});
157
[1ebac59]158export const opticalDrivesTable = pgTable("optical_drive", {
[fdd776b]159 componentId: integer("component_id")
160 .primaryKey()
161 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
162 formFactor: text("form_factor").notNull(),
163 type: text("type").notNull(),
164 interface: text("interface").notNull(),
165 writeSpeed: numeric("write_speed").notNull(),
[76b980b]166 readSpeed: numeric("read_speed").notNull()
[fdd776b]167});
168
[1ebac59]169export const soundCardsTable = pgTable("sound_card", {
[fdd776b]170 componentId: integer("component_id")
171 .primaryKey()
172 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
173 sampleRate: numeric("sample_rate").notNull(),
174 bitDepth: numeric("bit_depth").notNull(),
175 chipset: text("chipset").notNull(),
176 interface: text("interface").notNull(),
[76b980b]177 channel: text("channel").notNull()
[fdd776b]178});
179
180export const cablesTable = pgTable("cables", {
181 componentId: integer("component_id")
182 .primaryKey()
183 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
184 lengthCm: numeric("length_cm").notNull(),
[76b980b]185 type: text("type").notNull()
[fdd776b]186});
187
[1ebac59]188export const networkAdaptersTable = pgTable("network_adapter", {
[fdd776b]189 componentId: integer("component_id")
190 .primaryKey()
191 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
192 wifiVersion: text("wifi_version").notNull(),
193 interface: text("interface").notNull(),
[76b980b]194 numAntennas: integer("num_antennas").notNull()
[fdd776b]195});
196
[1ebac59]197export const networkCardsTable = pgTable("network_card", {
[fdd776b]198 componentId: integer("component_id")
199 .primaryKey()
200 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
201 numPorts: integer("num_ports").notNull(),
202 speed: numeric("speed").notNull(),
[76b980b]203 interface: text("interface").notNull()
[fdd776b]204});
205
206export type componentItem = typeof componentsTable.$inferSelect;
207export type componentInsert = typeof componentsTable.$inferInsert;
208
209export type cpuItem = typeof CPUTable.$inferSelect;
210export type cpuInsert = typeof CPUTable.$inferInsert;
211
212export type gpuItem = typeof GPUTable.$inferSelect;
213export type gpuInsert = typeof GPUTable.$inferInsert;
214
215export type memoryItem = typeof memoryTable.$inferSelect;
216export type memoryInsert = typeof memoryTable.$inferInsert;
217
218export type powerSupplyItem = typeof powerSupplyTable.$inferSelect;
219export type powerSupplyInsert = typeof powerSupplyTable.$inferInsert;
220
[1ebac59]221export type caseItem = typeof pcCasesTable.$inferSelect;
222export type caseInsert = typeof pcCasesTable.$inferInsert;
[fdd776b]223
224export type caseStorageFormFactorsItem = typeof caseStorageFormFactorsTable.$inferSelect;
225export type caseStorageFormFactorsInsert = typeof caseStorageFormFactorsTable.$inferInsert;
226
227export type casePsFormFactorsItem = typeof casePsFormFactorsTable.$inferSelect;
228export type casePsFormFactorsInsert = typeof casePsFormFactorsTable.$inferInsert;
229
230export type caseMoboFormFactorsItem = typeof caseMoboFormFactorsTable.$inferSelect;
231export type caseMoboFormFactorsInsert = typeof caseMoboFormFactorsTable.$inferInsert;
232
[1ebac59]233export type coolerItem = typeof coolersTable.$inferSelect;
234export type coolerInsert = typeof coolersTable.$inferInsert;
[fdd776b]235
236export type coolerCPUSocketsItem = typeof coolerCPUSocketsTable.$inferSelect;
237export type coolerCPUSocketsInsert = typeof coolerCPUSocketsTable.$inferInsert;
238
[1ebac59]239export type motherboardItem = typeof motherboardsTable.$inferSelect;
240export type motherboardInsert = typeof motherboardsTable.$inferInsert;
[fdd776b]241
242export type storageItem = typeof storageTable.$inferSelect;
243export type storageInsert = typeof storageTable.$inferInsert
244
[1ebac59]245export type memoryCardItem = typeof memoryCardsTable.$inferSelect;
246export type memoryCardInsert = typeof memoryCardsTable.$inferInsert;
[fdd776b]247
[1ebac59]248export type opticalDriveItem = typeof opticalDrivesTable.$inferSelect;
249export type opticalDriveInsert = typeof opticalDrivesTable.$inferInsert;
[fdd776b]250
[1ebac59]251export type soundCardItem = typeof soundCardsTable.$inferSelect;
252export type soundCardInsert = typeof soundCardsTable.$inferInsert;
[fdd776b]253
254export type cablesItem = typeof cablesTable.$inferSelect;
255export type cablesInsert = typeof cablesTable.$inferInsert;
256
[1ebac59]257export type networkAdapterItem = typeof networkAdaptersTable.$inferSelect;
258export type networkAdapterInsert = typeof networkAdaptersTable.$inferInsert;
[fdd776b]259
[1ebac59]260export type networkCardItem = typeof networkCardsTable.$inferSelect;
261export type networkCardInsert = typeof networkCardsTable.$inferInsert;
[fdd776b]262
Note: See TracBrowser for help on using the repository browser.