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

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

Add schema

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