vokabeltraining/api/src/db/schema.ts

61 lines
1.7 KiB
TypeScript

import { sql } from 'drizzle-orm';
import * as t from 'drizzle-orm/pg-core';
import { pgEnum, pgTable as table } from 'drizzle-orm/pg-core';
export const rolesEnum = pgEnum('roles', ['admin', 'guest', 'pro']);
export const deck = table(
'deck',
{
id: t.integer('id').primaryKey().generatedAlwaysAsIdentity(),
deckname: t.varchar('deckname').notNull(),
bildname: t.varchar('bildname'),
bildid: t.varchar('bildid'),
x1: t.real('x1'),
x2: t.real('x2'),
y1: t.real('y1'),
y2: t.real('y2'),
due: t.integer('due'),
ivl: t.real('ivl'),
factor: t.real('factor'),
reps: t.integer('reps'),
lapses: t.integer('lapses'),
isGraduated: t.integer('isgraduated'),
user: t.varchar('user').notNull(),
inserted: t.varchar().default(sql`(CURRENT_TIMESTAMP)`), // Neue Spalte
updated: t.varchar().default(sql`(CURRENT_TIMESTAMP)`), // Neue Spalte
},
table => [t.uniqueIndex('deck_idx').on(table.id)],
);
export const users = table(
'users',
{
id: t.integer().primaryKey().generatedAlwaysAsIdentity(),
name: t.varchar('name', { length: 256 }),
email: t.varchar().notNull(),
role: rolesEnum().default('guest'),
sign_in_provider: t.varchar('sign_in_provider', { length: 50 }),
},
table => [t.uniqueIndex('users_idx').on(table.id)],
);
export type InsertDeck = typeof deck.$inferInsert;
export type SelectDeck = typeof deck.$inferSelect;
export interface User {
name: string;
picture: string;
iss: string;
aud: string;
auth_time: number;
user_id: string;
sub: string;
iat: number;
exp: number;
email: string;
email_verified: boolean;
firebase: {
identities: any;
sign_in_provider: string;
};
uid: string;
}