| [ea09e98] | 1 | import {pgTable, serial, integer, text, numeric, boolean, date, primaryKey, check, unique} from "drizzle-orm/pg-core";
|
|---|
| [fdd776b] | 2 | import { usersTable } from "./users";
|
|---|
| 3 | import { componentsTable } from "./components";
|
|---|
| [b615094] | 4 | import {sql} from "drizzle-orm";
|
|---|
| [fdd776b] | 5 |
|
|---|
| [1ebac59] | 6 | export 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] | 18 | export 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] | 34 | export 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] | 47 | export 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] | 62 | export 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] | 79 | export type buildItem = typeof buildsTable.$inferSelect;
|
|---|
| 80 | export type buildInsert = typeof buildsTable.$inferInsert;
|
|---|
| [fdd776b] | 81 |
|
|---|
| [1ebac59] | 82 | export type buildComponentItem = typeof buildComponentsTable.$inferSelect;
|
|---|
| 83 | export type buildComponentInsert = typeof buildComponentsTable.$inferInsert;
|
|---|
| [fdd776b] | 84 |
|
|---|
| [1ebac59] | 85 | export type favoriteBuildItem = typeof favoriteBuildsTable.$inferSelect;
|
|---|
| 86 | export type favoriteBuildInsert = typeof favoriteBuildsTable.$inferInsert;
|
|---|
| [fdd776b] | 87 |
|
|---|
| [1ebac59] | 88 | export type ratingBuildItem = typeof ratingBuildsTable.$inferSelect;
|
|---|
| 89 | export type ratingBuildInsert = typeof ratingBuildsTable.$inferInsert;
|
|---|
| [fdd776b] | 90 |
|
|---|
| [1ebac59] | 91 | export type reviewItem = typeof reviewsTable.$inferSelect;
|
|---|
| 92 | export type reviewInsert = typeof reviewsTable.$inferInsert; |
|---|