source: database/drizzle/schema/builds.ts@ 41a2f81

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

Update and add

  • Property mode set to 100644
File size: 3.4 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" }),
25 },
26 (t) => ({
27 pk: primaryKey({ columns: [t.buildId, t.componentId] }),
28 }),
29);
30
[1ebac59]31export const favoriteBuildsTable = pgTable("favorite_build", {
[fdd776b]32 buildId: integer("build_id")
33 .notNull()
[1ebac59]34 .references(() => buildsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
[fdd776b]35 userId: integer("user_id")
36 .notNull()
37 .references(() => usersTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
38 },
39 (t) => ({
40 pk: primaryKey({ columns: [t.buildId, t.userId] }),
41 }),
42);
43
[1ebac59]44export const ratingBuildsTable = pgTable("rating_build", {
[fdd776b]45 buildId: integer("build_id")
46 .notNull()
[1ebac59]47 .references(() => buildsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
[fdd776b]48 userId: integer("user_id")
49 .notNull()
50 .references(() => usersTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
[37bcb87]51 value: numeric("value", { mode: "number" }).notNull(),
[fdd776b]52 },
53 (t) => ({
54 pk: primaryKey({ columns: [t.buildId, t.userId] }),
[b615094]55 checkValue: check("check_value", sql`${t.value} BETWEEN 1 AND 5`),
[fdd776b]56 }),
57);
58
[1ebac59]59export const reviewsTable = pgTable("review", {
[ea09e98]60 id: serial("id").primaryKey(),
[fdd776b]61
[ea09e98]62 buildId: integer("build_id")
63 .notNull()
64 .references(() => buildsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
65 userId: integer("user_id")
66 .notNull()
67 .references(() => usersTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
68 content: text("content").notNull(),
69 createdAt: date("created_at").notNull()
70 },
71 (t) => ({
72 uniqueUserBuild: unique().on(t.buildId, t.userId),
73 }),
74);
[fdd776b]75
[1ebac59]76export type buildItem = typeof buildsTable.$inferSelect;
77export type buildInsert = typeof buildsTable.$inferInsert;
[fdd776b]78
[1ebac59]79export type buildComponentItem = typeof buildComponentsTable.$inferSelect;
80export type buildComponentInsert = typeof buildComponentsTable.$inferInsert;
[fdd776b]81
[1ebac59]82export type favoriteBuildItem = typeof favoriteBuildsTable.$inferSelect;
83export type favoriteBuildInsert = typeof favoriteBuildsTable.$inferInsert;
[fdd776b]84
[1ebac59]85export type ratingBuildItem = typeof ratingBuildsTable.$inferSelect;
86export type ratingBuildInsert = typeof ratingBuildsTable.$inferInsert;
[fdd776b]87
[1ebac59]88export type reviewItem = typeof reviewsTable.$inferSelect;
89export type reviewInsert = typeof reviewsTable.$inferInsert;
Note: See TracBrowser for help on using the repository browser.