source: database/drizzle/schema/components.ts@ c4dd17d

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

update queries

  • Property mode set to 100644
File size: 10.0 KB
Line 
1import {pgTable, serial, integer, text, numeric, boolean, date, primaryKey, check} from "drizzle-orm/pg-core";
2import {sql} from "drizzle-orm";
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"),
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);
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"),
28 tdp: numeric("tdp").notNull(),
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(),
40 length: numeric("length").notNull(),
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(),
50 modules: integer("modules").notNull(),
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(),
59 formFactor: text("form_factor").notNull(),
60});
61
62export const pcCasesTable = pgTable("pc_case", {
63 componentId: integer("component_id")
64 .primaryKey()
65 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
66 coolerMaxHeight: numeric("cooler_max_height").notNull(),
67 gpuMaxLength: numeric("gpu_max_length").notNull(),
68});
69
70// Case multi-values
71export const caseStorageFormFactorsTable = pgTable("case_storage_form_factors", {
72 caseId: integer("case_id")
73 .notNull()
74 .references(() => pcCasesTable.componentId, {onDelete: "cascade", onUpdate: "cascade" }),
75 formFactor: text("form_factor").notNull(),
76 numSlots: integer("num_slots").notNull(),
77 },
78 (t) => ({
79 pk: primaryKey({ columns: [t.caseId, t.formFactor] }),
80 }),
81);
82
83export const casePsFormFactorsTable = pgTable( "case_ps_form_factors", {
84 caseId: integer("case_id")
85 .notNull()
86 .references(() => pcCasesTable.componentId, { onDelete: "cascade", onUpdate: "cascade"}),
87 formFactor: text("form_factor").notNull(),
88 },
89 (t) => ({
90 pk: primaryKey({ columns: [t.caseId, t.formFactor] }),
91 }),
92);
93
94export const caseMoboFormFactorsTable = pgTable("case_mobo_form_factors", {
95 caseId: integer("case_id")
96 .notNull()
97 .references(() => pcCasesTable.componentId, { onDelete: "cascade", onUpdate: "cascade"}),
98 formFactor: text("form_factor").notNull(),
99 },
100 (t) => ({
101 pk: primaryKey({ columns: [t.caseId, t.formFactor] }),
102 }),
103);
104
105export const coolersTable = pgTable("cooler", {
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(),
111 maxTdpSupported: numeric("max_tdp_supported").notNull(),
112});
113
114// Cooler multi-values
115export const coolerCPUSocketsTable = pgTable("cooler_cpu_sockets", {
116 coolerId: integer("cooler_id")
117 .notNull()
118 .references(() => coolersTable.componentId, { onDelete: "cascade", onUpdate: "cascade" }),
119 socket: text("socket").notNull(),
120 },
121 (t) => ({
122 pk: primaryKey({ columns: [t.coolerId, t.socket] }),
123 })
124);
125
126export const motherboardsTable = pgTable("motherboard", {
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(),
137});
138
139export const storageTable = pgTable("storage", {
140 componentId: integer("component_id")
141 .primaryKey()
142 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
143 type: text("type").notNull(),
144 capacity: numeric("capacity").notNull(),
145 formFactor: text("form_factor").notNull(),
146});
147
148// Other Components
149export const memoryCardsTable = pgTable("memory_card", {
150 componentId: integer("component_id")
151 .primaryKey()
152 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
153 numSlots: integer("num_slots").notNull(),
154 interface: text("interface").notNull(),
155});
156
157export const opticalDrivesTable = pgTable("optical_drive", {
158 componentId: integer("component_id")
159 .primaryKey()
160 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
161 formFactor: text("form_factor").notNull(),
162 type: text("type").notNull(),
163 interface: text("interface").notNull(),
164 writeSpeed: numeric("write_speed").notNull(),
165 readSpeed: numeric("read_speed").notNull(),
166});
167
168export const soundCardsTable = pgTable("sound_card", {
169 componentId: integer("component_id")
170 .primaryKey()
171 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
172 sampleRate: numeric("sample_rate").notNull(),
173 bitDepth: numeric("bit_depth").notNull(),
174 chipset: text("chipset").notNull(),
175 interface: text("interface").notNull(),
176 channel: text("channel").notNull(),
177});
178
179export const cablesTable = pgTable("cables", {
180 componentId: integer("component_id")
181 .primaryKey()
182 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
183 lengthCm: numeric("length_cm").notNull(),
184 type: text("type").notNull(),
185});
186
187export const networkAdaptersTable = pgTable("network_adapter", {
188 componentId: integer("component_id")
189 .primaryKey()
190 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
191 wifiVersion: text("wifi_version").notNull(),
192 interface: text("interface").notNull(),
193 numAntennas: integer("num_antennas").notNull(),
194});
195
196export const networkCardsTable = pgTable("network_card", {
197 componentId: integer("component_id")
198 .primaryKey()
199 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
200 numPorts: integer("num_ports").notNull(),
201 speed: numeric("speed").notNull(),
202 interface: text("interface").notNull(),
203});
204
205export type componentItem = typeof componentsTable.$inferSelect;
206export type componentInsert = typeof componentsTable.$inferInsert;
207
208export type cpuItem = typeof CPUTable.$inferSelect;
209export type cpuInsert = typeof CPUTable.$inferInsert;
210
211export type gpuItem = typeof GPUTable.$inferSelect;
212export type gpuInsert = typeof GPUTable.$inferInsert;
213
214export type memoryItem = typeof memoryTable.$inferSelect;
215export type memoryInsert = typeof memoryTable.$inferInsert;
216
217export type powerSupplyItem = typeof powerSupplyTable.$inferSelect;
218export type powerSupplyInsert = typeof powerSupplyTable.$inferInsert;
219
220export type caseItem = typeof pcCasesTable.$inferSelect;
221export type caseInsert = typeof pcCasesTable.$inferInsert;
222
223export type caseStorageFormFactorsItem = typeof caseStorageFormFactorsTable.$inferSelect;
224export type caseStorageFormFactorsInsert = typeof caseStorageFormFactorsTable.$inferInsert;
225
226export type casePsFormFactorsItem = typeof casePsFormFactorsTable.$inferSelect;
227export type casePsFormFactorsInsert = typeof casePsFormFactorsTable.$inferInsert;
228
229export type caseMoboFormFactorsItem = typeof caseMoboFormFactorsTable.$inferSelect;
230export type caseMoboFormFactorsInsert = typeof caseMoboFormFactorsTable.$inferInsert;
231
232export type coolerItem = typeof coolersTable.$inferSelect;
233export type coolerInsert = typeof coolersTable.$inferInsert;
234
235export type coolerCPUSocketsItem = typeof coolerCPUSocketsTable.$inferSelect;
236export type coolerCPUSocketsInsert = typeof coolerCPUSocketsTable.$inferInsert;
237
238export type motherboardItem = typeof motherboardsTable.$inferSelect;
239export type motherboardInsert = typeof motherboardsTable.$inferInsert;
240
241export type storageItem = typeof storageTable.$inferSelect;
242export type storageInsert = typeof storageTable.$inferInsert
243
244export type memoryCardItem = typeof memoryCardsTable.$inferSelect;
245export type memoryCardInsert = typeof memoryCardsTable.$inferInsert;
246
247export type opticalDriveItem = typeof opticalDrivesTable.$inferSelect;
248export type opticalDriveInsert = typeof opticalDrivesTable.$inferInsert;
249
250export type soundCardItem = typeof soundCardsTable.$inferSelect;
251export type soundCardInsert = typeof soundCardsTable.$inferInsert;
252
253export type cablesItem = typeof cablesTable.$inferSelect;
254export type cablesInsert = typeof cablesTable.$inferInsert;
255
256export type networkAdapterItem = typeof networkAdaptersTable.$inferSelect;
257export type networkAdapterInsert = typeof networkAdaptersTable.$inferInsert;
258
259export type networkCardItem = typeof networkCardsTable.$inferSelect;
260export type networkCardInsert = typeof networkCardsTable.$inferInsert;
261
Note: See TracBrowser for help on using the repository browser.