mirror of
https://git.moonleay.net/Websites/liljudd-website.git
synced 2025-07-23 17:25:08 +02:00
- Update checksums for browser compatibility - Add script to kill running server process - Refactor time planning structure and handling - Adjust database schema and type definitions accordingly
100 lines
3 KiB
TypeScript
100 lines
3 KiB
TypeScript
import { relations } from "drizzle-orm";
|
|
import {
|
|
bigint,
|
|
boolean,
|
|
pgTable,
|
|
primaryKey,
|
|
serial,
|
|
smallint,
|
|
text,
|
|
timestamp,
|
|
varchar,
|
|
} from "drizzle-orm/pg-core";
|
|
|
|
export const users = pgTable("user", {
|
|
id: varchar("id", { length: 24 }).primaryKey(),
|
|
discord_id: text("discord_id").notNull(),
|
|
name: text("name"),
|
|
image: text("image"),
|
|
});
|
|
|
|
export const sessions = pgTable("session", {
|
|
id: varchar("id", { length: 24 }).primaryKey(),
|
|
userId: varchar("user_id", { length: 24 })
|
|
.notNull()
|
|
.references(() => users.id, { onDelete: "cascade" }),
|
|
expiresAt: timestamp("expires_at", {
|
|
withTimezone: true,
|
|
mode: "date",
|
|
}).notNull(),
|
|
});
|
|
|
|
export const discordTokens = pgTable("tokens", {
|
|
userId: varchar("user_id", { length: 24 })
|
|
.primaryKey()
|
|
.references(() => users.id, { onDelete: "cascade" }),
|
|
refreshToken: text("refresh_token").notNull(),
|
|
accessToken: text("access_token").notNull(),
|
|
expiresAt: timestamp("expires_at", { mode: "date" }).notNull(),
|
|
});
|
|
|
|
export const guilds = pgTable("guilds", {
|
|
id: bigint("id", { mode: "bigint" }).primaryKey(),
|
|
timezone: text("timezone").notNull().default("Etc/UTC"),
|
|
tpChannelId: bigint("tp_channel_id", { mode: "bigint" }),
|
|
tpInterval: smallint("target_interval").notNull().default(64),
|
|
tpRolesEnabled: boolean("tp_roles_enabled").notNull().default(false),
|
|
isAvailableRoleId: bigint("is_available_role_id", { mode: "bigint" }),
|
|
wantsToBeNotifieRoledId: bigint("wants_to_be_notified_role_id", {
|
|
mode: "bigint",
|
|
}),
|
|
});
|
|
|
|
export const guildsRelations = relations(guilds, ({ many }) => ({
|
|
tpMessages: many(tpMessages),
|
|
matches: many(matches),
|
|
}));
|
|
|
|
export const tpMessages = pgTable(
|
|
"tp_messages",
|
|
{
|
|
messageId: bigint("message_id", { mode: "bigint" }),
|
|
day: smallint("day").notNull(),
|
|
guildId: bigint("guild_id", { mode: "bigint" })
|
|
.notNull()
|
|
.references(() => guilds.id, { onDelete: "cascade" }),
|
|
},
|
|
(table) => {
|
|
return {
|
|
pk: primaryKey({ columns: [table.guildId, table.day] }),
|
|
};
|
|
},
|
|
);
|
|
|
|
export const tpMessagesRelations = relations(tpMessages, ({ one }) => ({
|
|
guild: one(guilds, {
|
|
fields: [tpMessages.guildId],
|
|
references: [guilds.id],
|
|
}),
|
|
}));
|
|
|
|
export const matches = pgTable("matches", {
|
|
id: serial("id").primaryKey(),
|
|
channelId: bigint("channel_id", { mode: "bigint" }).notNull(),
|
|
matchType: varchar("match_type", { length: 50 }).notNull(),
|
|
createrId: bigint("creater_id", { mode: "bigint" }).notNull(),
|
|
roleId: bigint("role_id", { mode: "bigint" }).notNull(),
|
|
opponentName: varchar("opponent_name", { length: 100 }).notNull(),
|
|
messageId: bigint("message_id", { mode: "bigint" }).notNull(),
|
|
utc_ts: timestamp("utc_ts").notNull(),
|
|
guildId: bigint("guild_id", { mode: "bigint" })
|
|
.notNull()
|
|
.references(() => guilds.id, { onDelete: "cascade" }),
|
|
});
|
|
|
|
export const matchPlanningsRelations = relations(matches, ({ one }) => ({
|
|
guild: one(guilds, {
|
|
fields: [matches.guildId],
|
|
references: [guilds.id],
|
|
}),
|
|
}));
|