| 1 | import { pgTable, serial, integer, text, numeric, boolean, date, primaryKey } from "drizzle-orm/pg-core";
|
|---|
| 2 | import { usersTable } from "./users";
|
|---|
| 3 | import { componentsTable } from "./components";
|
|---|
| 4 |
|
|---|
| 5 | export 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 |
|
|---|
| 17 | export 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 |
|
|---|
| 30 | export 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 |
|
|---|
| 43 | export 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 |
|
|---|
| 57 | export 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 |
|
|---|
| 70 | export type buildItem = typeof buildTable.$inferSelect;
|
|---|
| 71 | export type buildInsert = typeof buildTable.$inferInsert;
|
|---|
| 72 |
|
|---|
| 73 | export type buildComponentItem = typeof buildComponentTable.$inferSelect;
|
|---|
| 74 | export type buildComponentInsert = typeof buildComponentTable.$inferInsert;
|
|---|
| 75 |
|
|---|
| 76 | export type favoriteBuildItem = typeof favoriteBuildTable.$inferSelect;
|
|---|
| 77 | export type favoriteBuildInsert = typeof favoriteBuildTable.$inferInsert;
|
|---|
| 78 |
|
|---|
| 79 | export type ratingBuildItem = typeof ratingBuildTable.$inferSelect;
|
|---|
| 80 | export type ratingBuildInsert = typeof ratingBuildTable.$inferInsert;
|
|---|
| 81 |
|
|---|
| 82 | export type reviewItem = typeof reviewTable.$inferSelect;
|
|---|
| 83 | export type reviewInsert = typeof reviewTable.$inferInsert; |
|---|