all repos — stealth-developers @ 60fe6db0e7f98b1e1053f30208437a0df900c7af

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
 47
 48
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").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,
      }),
    },
  })
)