import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, OneToMany, ValueTransformer, } from "typeorm" const transformer = { date: { from: (date ) => date && new Date(parseInt(date, 10)), to: (date) => date?.valueOf().toString(), }, bigint: { from: (bigInt) => bigInt && parseInt(bigInt, 10), to: (bigInt) => bigInt?.toString(), }, } @Entity({ name: "users" }) export class UserEntity { @PrimaryGeneratedColumn("uuid") id = undefined; @Column("varchar") name! @Column({ type: "varchar", nullable: true, unique: true }) email!: string | null @Column({ type: "varchar", nullable: true, transformer: transformer.date }) emailVerified!: string | null @Column("varchar") image!: string | null @OneToMany(() => SessionEntity, (session) => session.userId) sessions!: SessionEntity[] @OneToMany(() => AccountEntity, (account) => account.userId) accounts!: AccountEntity[] } @Entity({ name: "accounts" }) export class AccountEntity { @PrimaryGeneratedColumn("uuid") id!: string @Column({ type: "uuid" }) userId!: string @Column() type!: string @Column() provider!: string @Column() providerAccountId!: string @Column("varchar") refresh_token!: string | null @Column("varchar") access_token!: string | null @Column({ nullable: true, type: "bigint", transformer: transformer.bigint, }) expires_at!: number | null @Column("varchar") token_type!: string | null @Column("varchar") scope!: string | null @Column("varchar") id_token!: string | null @Column("varchar") session_state!: string | null @ManyToOne(() => UserEntity, (user) => user.accounts, { createForeignKeyConstraints: true, }) user!: UserEntity } @Entity({ name: "sessions" }) export class SessionEntity { @PrimaryGeneratedColumn("uuid") id!: string @Column({ unique: true }) sessionToken!: string @Column({ type: "uuid" }) userId!: string @Column({ transformer: transformer.date }) expires!: string @ManyToOne(() => UserEntity, (user) => user.sessions) user!: UserEntity } @Entity({ name: "verification_tokens" }) export class VerificationTokenEntity { @PrimaryGeneratedColumn("uuid") id!: string @Column() token!: string @Column() identifier!: string @Column({ transformer: transformer.date }) expires!: string }