pollo/src/server/schema.ts

82 lines
2.2 KiB
TypeScript
Raw Normal View History

2023-08-12 18:17:36 -06:00
import {
timestamp,
2023-08-16 00:50:11 -06:00
pgTable,
2023-08-12 18:17:36 -06:00
varchar,
boolean,
json,
2023-08-18 23:49:35 -06:00
index,
2023-08-20 16:52:27 -06:00
unique,
2023-08-16 00:50:11 -06:00
} from "drizzle-orm/pg-core";
2023-08-12 18:17:36 -06:00
import { relations } from "drizzle-orm";
2023-08-16 00:50:11 -06:00
export const rooms = pgTable("Room", {
2023-08-12 18:17:36 -06:00
id: varchar("id", { length: 255 }).notNull().primaryKey(),
2023-08-12 20:11:55 -06:00
created_at: timestamp("created_at").defaultNow(),
2023-08-12 18:17:36 -06:00
userId: varchar("userId", { length: 255 }).notNull(),
roomName: varchar("roomName", { length: 255 }),
storyName: varchar("storyName", { length: 255 }),
visible: boolean("visible").default(false).notNull(),
scale: varchar("scale", { length: 255 }).default("0.5,1,2,3,5").notNull(),
});
export const roomsRelations = relations(rooms, ({ many }) => ({
votes: many(votes),
logs: many(logs),
}));
2023-08-18 23:49:35 -06:00
export const votes = pgTable(
"Vote",
{
id: varchar("id", { length: 255 }).notNull().primaryKey(),
created_at: timestamp("created_at").defaultNow(),
userId: varchar("userId", { length: 255 }).notNull(),
roomId: varchar("roomId", { length: 255 })
.notNull()
.references(() => rooms.id, { onDelete: "cascade" }),
value: varchar("value", { length: 255 }).notNull(),
},
(table) => {
return {
userIdx: index("user_idx").on(table.userId),
2023-08-20 16:52:27 -06:00
unq: unique().on(table.userId, table.roomId),
2023-08-18 23:49:35 -06:00
};
}
);
2023-08-12 18:17:36 -06:00
export const votesRelations = relations(votes, ({ one }) => ({
room: one(rooms, {
fields: [votes.roomId],
references: [rooms.id],
}),
}));
2023-08-18 23:49:35 -06:00
export const logs = pgTable(
"Log",
{
id: varchar("id", { length: 255 }).notNull().primaryKey(),
created_at: timestamp("created_at").defaultNow(),
userId: varchar("userId", { length: 255 })
.notNull()
.references(() => rooms.id, { onDelete: "cascade" }),
roomId: varchar("roomId", { length: 255 })
.notNull()
.references(() => rooms.id, { onDelete: "cascade" }),
scale: varchar("scale", { length: 255 }),
votes: json("votes"),
roomName: varchar("roomName", { length: 255 }),
storyName: varchar("storyName", { length: 255 }),
},
(table) => {
return {
userIdx: index("user_idx").on(table.userId),
};
}
);
2023-08-12 18:17:36 -06:00
export const logsRelations = relations(logs, ({ one }) => ({
room: one(rooms, {
fields: [logs.roomId],
references: [rooms.id],
}),
}));