source: database/drizzle/schema/builds.ts@ be22289

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

Fix missing attribute in buildComponents relation

  • Property mode set to 100644
File size: 3.5 KB
Line 
1import {pgTable, serial, integer, text, numeric, boolean, date, primaryKey, check, unique} from "drizzle-orm/pg-core";
2import { usersTable } from "./users";
3import { componentsTable } from "./components";
4import {sql} from "drizzle-orm";
5
6export const buildsTable = pgTable("build", {
7 id: serial("id").primaryKey(),
8 userId: integer("user_id")
9 .notNull()
10 .references(() => usersTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
11 name: text("name").notNull(),
12 createdAt: date("created_at").notNull(),
13 description: text("description"),
14 totalPrice: numeric("total_price").notNull(),
15 isApproved: boolean("is_approved").notNull(),
16});
17
18export const buildComponentsTable = pgTable("build_component", {
19 buildId: integer("build_id")
20 .notNull()
21 .references(() => buildsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
22 componentId: integer("component_id")
23 .notNull()
24 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
25 numComponents: integer("num_components")
26 .notNull()
27 .default(1),
28 },
29 (t) => ({
30 pk: primaryKey({ columns: [t.buildId, t.componentId] }),
31 }),
32);
33
34export const favoriteBuildsTable = pgTable("favorite_build", {
35 buildId: integer("build_id")
36 .notNull()
37 .references(() => buildsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
38 userId: integer("user_id")
39 .notNull()
40 .references(() => usersTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
41 },
42 (t) => ({
43 pk: primaryKey({ columns: [t.buildId, t.userId] }),
44 }),
45);
46
47export const ratingBuildsTable = pgTable("rating_build", {
48 buildId: integer("build_id")
49 .notNull()
50 .references(() => buildsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
51 userId: integer("user_id")
52 .notNull()
53 .references(() => usersTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
54 value: numeric("value", { mode: "number" }).notNull(),
55 },
56 (t) => ({
57 pk: primaryKey({ columns: [t.buildId, t.userId] }),
58 checkValue: check("check_value", sql`${t.value} BETWEEN 1 AND 5`),
59 }),
60);
61
62export const reviewsTable = pgTable("review", {
63 id: serial("id").primaryKey(),
64
65 buildId: integer("build_id")
66 .notNull()
67 .references(() => buildsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
68 userId: integer("user_id")
69 .notNull()
70 .references(() => usersTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
71 content: text("content").notNull(),
72 createdAt: date("created_at").notNull()
73 },
74 (t) => ({
75 uniqueUserBuild: unique().on(t.buildId, t.userId),
76 }),
77);
78
79export type buildItem = typeof buildsTable.$inferSelect;
80export type buildInsert = typeof buildsTable.$inferInsert;
81
82export type buildComponentItem = typeof buildComponentsTable.$inferSelect;
83export type buildComponentInsert = typeof buildComponentsTable.$inferInsert;
84
85export type favoriteBuildItem = typeof favoriteBuildsTable.$inferSelect;
86export type favoriteBuildInsert = typeof favoriteBuildsTable.$inferInsert;
87
88export type ratingBuildItem = typeof ratingBuildsTable.$inferSelect;
89export type ratingBuildInsert = typeof ratingBuildsTable.$inferInsert;
90
91export type reviewItem = typeof reviewsTable.$inferSelect;
92export type reviewInsert = typeof reviewsTable.$inferInsert;
Note: See TracBrowser for help on using the repository browser.