all repos — stealth-developers @ 281c0d10fa289692cc3c6b3d88f2f8435ab2ec9c

pkgs/db/src/schemas/index.ts (view raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
import { defineRelations } from "drizzle-orm";
import * as s from "drizzle-orm/sqlite-core";

export const actors = s.sqliteTable("actors", {
	id: s.integer("id").primaryKey({ autoIncrement: true }),

	discordId: s.text("discord_id").unique(),
	displayName: s.text("display_name"),
	username: s.text("username"),
	avatar: s.text("avatar"),

	createdAt: s.integer("created_at", { mode: "timestamp" }).notNull(),
	updatedAt: s.integer("updated_at", { mode: "timestamp" }).notNull(),
	deletedAt: s.integer("deleted_at", { mode: "timestamp" }),
});

export const sessions = s.sqliteTable("sessions", {
	id: s.text("id").primaryKey(),
	userId: s
		.integer("user_id")
		.notNull()
		.references(() => actors.id),

	accessToken: s.text("access_token").notNull(),
	refreshToken: s.text("refresh_token").notNull(),
	expiresAt: s.integer("expires_at", { mode: "timestamp" }).notNull(),
	createdAt: s.integer("created_at", { mode: "timestamp" }).notNull(),

	scope: s.text("scope"),
	tokenType: s.text("token_type"),
});

export const actorRelationships = defineRelations({ actors, sessions }, (r) => ({
	actors: {
		sessions: r.many.sessions({
			from: r.actors.id,
			to: r.sessions.userId,
		}),
	},
	sessions: {
		actor: r.one.actors({
			from: r.sessions.userId,
			to: r.actors.id,
		}),
	},
}));