source: database/drizzle/schema/builds.ts@ 9d40151

main
Last change on this file since 9d40151 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
RevLine 
[ea09e98]1import {pgTable, serial, integer, text, numeric, boolean, date, primaryKey, check, unique} from "drizzle-orm/pg-core";
[fdd776b]2import { usersTable } from "./users";
3import { componentsTable } from "./components";
[b615094]4import {sql} from "drizzle-orm";
[fdd776b]5
[1ebac59]6export const buildsTable = pgTable("build", {
[fdd776b]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
[1ebac59]18export const buildComponentsTable = pgTable("build_component", {
[fdd776b]19 buildId: integer("build_id")
20 .notNull()
[1ebac59]21 .references(() => buildsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
[fdd776b]22 componentId: integer("component_id")
23 .notNull()
24 .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
[e03e6fb]25 numComponents: integer("num_components")
26 .notNull()
27 .default(1),
[fdd776b]28 },
[e03e6fb]29 (t) => ({
30 pk: primaryKey({ columns: [t.buildId, t.componentId] }),
31 }),
[fdd776b]32);
33
[1ebac59]34export const favoriteBuildsTable = pgTable("favorite_build", {
[fdd776b]35 buildId: integer("build_id")
36 .notNull()
[1ebac59]37 .references(() => buildsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
[fdd776b]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
[1ebac59]47export const ratingBuildsTable = pgTable("rating_build", {
[fdd776b]48 buildId: integer("build_id")
49 .notNull()
[1ebac59]50 .references(() => buildsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
[fdd776b]51 userId: integer("user_id")
52 .notNull()
53 .references(() => usersTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
[37bcb87]54 value: numeric("value", { mode: "number" }).notNull(),
[fdd776b]55 },
56 (t) => ({
57 pk: primaryKey({ columns: [t.buildId, t.userId] }),
[b615094]58 checkValue: check("check_value", sql`${t.value} BETWEEN 1 AND 5`),
[fdd776b]59 }),
60);
61
[1ebac59]62export const reviewsTable = pgTable("review", {
[ea09e98]63 id: serial("id").primaryKey(),
[fdd776b]64
[ea09e98]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);
[fdd776b]78
[1ebac59]79export type buildItem = typeof buildsTable.$inferSelect;
80export type buildInsert = typeof buildsTable.$inferInsert;
[fdd776b]81
[1ebac59]82export type buildComponentItem = typeof buildComponentsTable.$inferSelect;
83export type buildComponentInsert = typeof buildComponentsTable.$inferInsert;
[fdd776b]84
[1ebac59]85export type favoriteBuildItem = typeof favoriteBuildsTable.$inferSelect;
86export type favoriteBuildInsert = typeof favoriteBuildsTable.$inferInsert;
[fdd776b]87
[1ebac59]88export type ratingBuildItem = typeof ratingBuildsTable.$inferSelect;
89export type ratingBuildInsert = typeof ratingBuildsTable.$inferInsert;
[fdd776b]90
[1ebac59]91export type reviewItem = typeof reviewsTable.$inferSelect;
92export type reviewInsert = typeof reviewsTable.$inferInsert;
Note: See TracBrowser for help on using the repository browser.