this repo has no description
1import { relations } from "drizzle-orm";
2import {
3 boolean,
4 index,
5 integer,
6 pgTable,
7 primaryKey,
8 text,
9 timestamp,
10 varchar,
11} from "drizzle-orm/pg-core";
12
13import { user } from "./auth-schema";
14
15export * from "./auth-schema";
16
17export const group = pgTable("group", {
18 id: integer().primaryKey().generatedAlwaysAsIdentity(),
19 userId: text()
20 .notNull()
21 .references(() => user.id, { onDelete: "cascade" }),
22 name: varchar({ length: 255 }).notNull(),
23 description: text(),
24 invite: varchar({ length: 12 }).notNull().unique(),
25});
26
27export const voucher = pgTable(
28 "voucher",
29 {
30 id: integer().primaryKey().generatedAlwaysAsIdentity(),
31 groupId: integer()
32 .notNull()
33 .references(() => group.id, { onDelete: "cascade" }),
34 name: varchar({ length: 255 }).notNull(),
35 description: text(),
36 },
37 (t) => [index("voucher_group_idx").on(t.groupId)],
38);
39
40export const member = pgTable(
41 "member",
42 {
43 groupId: integer()
44 .notNull()
45 .references(() => group.id, { onDelete: "cascade" }),
46 userId: text()
47 .notNull()
48 .references(() => user.id, { onDelete: "cascade" }),
49 },
50 (t) => [
51 primaryKey({ columns: [t.groupId, t.userId] }),
52 index("member_user_idx").on(t.userId),
53 ],
54);
55
56export const setting = pgTable("setting", {
57 userId: text()
58 .primaryKey()
59 .references(() => user.id, { onDelete: "cascade" }),
60 notify: boolean().notNull().default(true),
61});
62
63export const redemption = pgTable(
64 "redemption",
65 {
66 id: integer().primaryKey().generatedAlwaysAsIdentity(),
67 voucherId: integer()
68 .notNull()
69 .references(() => voucher.id, { onDelete: "cascade" }),
70 userId: text()
71 .notNull()
72 .references(() => user.id, { onDelete: "cascade" }),
73 date: timestamp().defaultNow().notNull(),
74 },
75 (t) => [index("redemption_user_idx").on(t.userId)],
76);
77
78export const groupRelations = relations(group, ({ many, one }) => ({
79 members: many(member),
80 owner: one(user, {
81 fields: [group.userId],
82 references: [user.id],
83 }),
84}));
85
86export const memberRelations = relations(member, ({ one, many }) => ({
87 group: one(group, {
88 fields: [member.groupId],
89 references: [group.id],
90 }),
91 user: one(user, {
92 fields: [member.userId],
93 references: [user.id],
94 }),
95 redemptions: many(redemption),
96}));
97
98export const redemptionRelations = relations(redemption, ({ one }) => ({
99 voucher: one(voucher, {
100 fields: [redemption.voucherId],
101 references: [voucher.id],
102 }),
103 member: one(member, {
104 fields: [redemption.userId],
105 references: [member.userId],
106 }),
107}));