87 lines
2.7 KiB
TypeScript
87 lines
2.7 KiB
TypeScript
import { relations } from "drizzle-orm";
|
|
import {
|
|
bigserial,
|
|
boolean,
|
|
integer,
|
|
pgTable,
|
|
text,
|
|
timestamp,
|
|
uuid,
|
|
} from "drizzle-orm/pg-core";
|
|
|
|
import { users } from "./users";
|
|
|
|
export const session = pgTable("session", {
|
|
id: bigserial("id", { mode: "number" }).primaryKey(),
|
|
expiresAt: timestamp("expiresAt").notNull(),
|
|
token: text("token").notNull().unique(),
|
|
createdAt: timestamp("createdAt").notNull(),
|
|
updatedAt: timestamp("updatedAt").notNull(),
|
|
ipAddress: text("ipAddress"),
|
|
userAgent: text("userAgent"),
|
|
userId: uuid("userId")
|
|
.notNull()
|
|
.references(() => users.id, { onDelete: "cascade" }),
|
|
}).enableRLS();
|
|
|
|
export const account = pgTable("account", {
|
|
id: bigserial("id", { mode: "number" }).primaryKey(),
|
|
accountId: text("accountId").notNull(),
|
|
providerId: text("providerId").notNull(),
|
|
userId: uuid("userId")
|
|
.notNull()
|
|
.references(() => users.id, { onDelete: "cascade" }),
|
|
accessToken: text("accessToken"),
|
|
refreshToken: text("refreshToken"),
|
|
idToken: text("idToken"),
|
|
accessTokenExpiresAt: timestamp("accessTokenExpiresAt"),
|
|
refreshTokenExpiresAt: timestamp("refreshTokenExpiresAt"),
|
|
scope: text("scope"),
|
|
password: text("password"),
|
|
createdAt: timestamp("createdAt").notNull(),
|
|
updatedAt: timestamp("updatedAt").notNull(),
|
|
}).enableRLS();
|
|
|
|
export const verification = pgTable("verification", {
|
|
id: bigserial("id", { mode: "number" }).primaryKey(),
|
|
identifier: text("identifier").notNull(),
|
|
value: text("value").notNull(),
|
|
expiresAt: timestamp("expiresAt").notNull(),
|
|
createdAt: timestamp("createdAt"),
|
|
updatedAt: timestamp("updatedAt"),
|
|
}).enableRLS();
|
|
|
|
export const apikey = pgTable("apiKey", {
|
|
id: bigserial("id", { mode: "number" }).primaryKey(),
|
|
name: text("name"),
|
|
start: text("start"),
|
|
prefix: text("prefix"),
|
|
key: text("key").notNull(),
|
|
userId: uuid("userId")
|
|
.notNull()
|
|
.references(() => users.id, { onDelete: "cascade" }),
|
|
refillInterval: integer("refillInterval"),
|
|
refillAmount: integer("refillAmount"),
|
|
lastRefillAt: timestamp("lastRefillAt"),
|
|
enabled: boolean("enabled"),
|
|
rateLimitEnabled: boolean("rateLimitEnabled"),
|
|
rateLimitTimeWindow: integer("rateLimitTimeWindow"),
|
|
rateLimitMax: integer("rateLimitMax"),
|
|
requestCount: integer("requestCount"),
|
|
remaining: integer("remaining"),
|
|
lastRequest: timestamp("lastRequest"),
|
|
expiresAt: timestamp("expiresAt"),
|
|
createdAt: timestamp("createdAt").notNull(),
|
|
updatedAt: timestamp("updatedAt").notNull(),
|
|
permissions: text("permissions"),
|
|
metadata: text("metadata"),
|
|
}).enableRLS();
|
|
|
|
export const apiKeyRelations = relations(apikey, ({ one }) => ({
|
|
user: one(users, {
|
|
fields: [apikey.userId],
|
|
references: [users.id],
|
|
relationName: "apiKeyUser",
|
|
}),
|
|
}));
|