| 1 | import {pgTable, serial, integer, text, numeric, boolean, date, primaryKey, check, unique} from "drizzle-orm/pg-core";
|
|---|
| 2 | import { usersTable } from "./users";
|
|---|
| 3 | import { componentsTable } from "./components";
|
|---|
| 4 | import {sql} from "drizzle-orm";
|
|---|
| 5 |
|
|---|
| 6 | export 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 |
|
|---|
| 18 | export const buildComponentsTable = pgTable("build_component", {
|
|---|
| 19 | id: serial("id").primaryKey(),
|
|---|
| 20 | buildId: integer("build_id")
|
|---|
| 21 | .notNull()
|
|---|
| 22 | .references(() => buildsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
|
|---|
| 23 | componentId: integer("component_id")
|
|---|
| 24 | .notNull()
|
|---|
| 25 | .references(() => componentsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
|
|---|
| 26 | },
|
|---|
| 27 | );
|
|---|
| 28 |
|
|---|
| 29 | export const favoriteBuildsTable = pgTable("favorite_build", {
|
|---|
| 30 | buildId: integer("build_id")
|
|---|
| 31 | .notNull()
|
|---|
| 32 | .references(() => buildsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
|
|---|
| 33 | userId: integer("user_id")
|
|---|
| 34 | .notNull()
|
|---|
| 35 | .references(() => usersTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
|
|---|
| 36 | },
|
|---|
| 37 | (t) => ({
|
|---|
| 38 | pk: primaryKey({ columns: [t.buildId, t.userId] }),
|
|---|
| 39 | }),
|
|---|
| 40 | );
|
|---|
| 41 |
|
|---|
| 42 | export const ratingBuildsTable = pgTable("rating_build", {
|
|---|
| 43 | buildId: integer("build_id")
|
|---|
| 44 | .notNull()
|
|---|
| 45 | .references(() => buildsTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
|
|---|
| 46 | userId: integer("user_id")
|
|---|
| 47 | .notNull()
|
|---|
| 48 | .references(() => usersTable.id, { onDelete: "cascade", onUpdate: "cascade" }),
|
|---|
| 49 | value: numeric("value", { mode: "number" }).notNull(),
|
|---|
| 50 | },
|
|---|
| 51 | (t) => ({
|
|---|
| 52 | pk: primaryKey({ columns: [t.buildId, t.userId] }),
|
|---|
| 53 | checkValue: check("check_value", sql`${t.value} BETWEEN 1 AND 5`),
|
|---|
| 54 | }),
|
|---|
| 55 | );
|
|---|
| 56 |
|
|---|
| 57 | export const reviewsTable = pgTable("review", {
|
|---|
| 58 | id: serial("id").primaryKey(),
|
|---|
| 59 |
|
|---|
| 60 | buildId: integer("build_id")
|
|---|
| 61 | .notNull()
|
|---|
| 62 | .references(() => buildsTable.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 | (t) => ({
|
|---|
| 70 | uniqueUserBuild: unique().on(t.buildId, t.userId),
|
|---|
| 71 | }),
|
|---|
| 72 | );
|
|---|
| 73 |
|
|---|
| 74 | export type buildItem = typeof buildsTable.$inferSelect;
|
|---|
| 75 | export type buildInsert = typeof buildsTable.$inferInsert;
|
|---|
| 76 |
|
|---|
| 77 | export type buildComponentItem = typeof buildComponentsTable.$inferSelect;
|
|---|
| 78 | export type buildComponentInsert = typeof buildComponentsTable.$inferInsert;
|
|---|
| 79 |
|
|---|
| 80 | export type favoriteBuildItem = typeof favoriteBuildsTable.$inferSelect;
|
|---|
| 81 | export type favoriteBuildInsert = typeof favoriteBuildsTable.$inferInsert;
|
|---|
| 82 |
|
|---|
| 83 | export type ratingBuildItem = typeof ratingBuildsTable.$inferSelect;
|
|---|
| 84 | export type ratingBuildInsert = typeof ratingBuildsTable.$inferInsert;
|
|---|
| 85 |
|
|---|
| 86 | export type reviewItem = typeof reviewsTable.$inferSelect;
|
|---|
| 87 | export type reviewInsert = typeof reviewsTable.$inferInsert; |
|---|