init
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
import { drizzle } from 'drizzle-orm/node-postgres';
|
||||
import { Pool } from 'pg';
|
||||
import * as schema from './schema';
|
||||
import { env } from '$env/dynamic/private';
|
||||
|
||||
const pool = new Pool({
|
||||
connectionString: env.DATABASE_URL
|
||||
});
|
||||
|
||||
export const db = drizzle(pool, { schema });
|
||||
@@ -0,0 +1,76 @@
|
||||
import { pgTable, uuid, varchar, text, boolean, integer, decimal, time, date, timestamp, pgEnum } from 'drizzle-orm/pg-core';
|
||||
|
||||
export const roleEnum = pgEnum('role', ['mitarbeiter', 'admin']);
|
||||
export const absenceTypeEnum = pgEnum('absence_type', ['urlaub', 'krank', 'sonderurlaub']);
|
||||
|
||||
export const users = pgTable('users', {
|
||||
id: uuid('id').primaryKey().defaultRandom(),
|
||||
firstName: varchar('first_name', { length: 100 }).notNull(),
|
||||
lastName: varchar('last_name', { length: 100 }).notNull(),
|
||||
email: varchar('email', { length: 255 }).notNull().unique(),
|
||||
passwordHash: text('password_hash'),
|
||||
role: roleEnum('role').notNull().default('mitarbeiter'),
|
||||
bundesland: varchar('bundesland', { length: 2 }).notNull().default('MV'),
|
||||
standardStart: time('standard_start').notNull().default('08:00'),
|
||||
standardEnd: time('standard_end').notNull().default('17:00'),
|
||||
breakMinutesDefault: integer('break_minutes_default').notNull().default(30),
|
||||
weeklyHours: decimal('weekly_hours', { precision: 4, scale: 1 }).notNull().default('40.0'),
|
||||
vacationDaysPerYear: integer('vacation_days_per_year').notNull().default(30),
|
||||
active: boolean('active').notNull().default(true),
|
||||
inviteToken: text('invite_token'),
|
||||
createdAt: timestamp('created_at').notNull().defaultNow()
|
||||
});
|
||||
|
||||
export const sessions = pgTable('sessions', {
|
||||
id: text('id').primaryKey(),
|
||||
userId: uuid('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
|
||||
expiresAt: timestamp('expires_at').notNull(),
|
||||
createdAt: timestamp('created_at').notNull().defaultNow()
|
||||
});
|
||||
|
||||
export const timeEntries = pgTable('time_entries', {
|
||||
id: uuid('id').primaryKey().defaultRandom(),
|
||||
userId: uuid('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
|
||||
date: date('date').notNull(),
|
||||
startTime: time('start_time'),
|
||||
endTime: time('end_time'),
|
||||
breakMinutes: integer('break_minutes').notNull().default(30),
|
||||
isAutoFilled: boolean('is_auto_filled').notNull().default(false),
|
||||
isCorrected: boolean('is_corrected').notNull().default(false),
|
||||
confirmedAt: timestamp('confirmed_at'),
|
||||
createdAt: timestamp('created_at').notNull().defaultNow(),
|
||||
updatedAt: timestamp('updated_at').notNull().defaultNow()
|
||||
});
|
||||
|
||||
export const absences = pgTable('absences', {
|
||||
id: uuid('id').primaryKey().defaultRandom(),
|
||||
userId: uuid('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
|
||||
dateFrom: date('date_from').notNull(),
|
||||
dateTo: date('date_to').notNull(),
|
||||
type: absenceTypeEnum('type').notNull(),
|
||||
notes: text('notes'),
|
||||
createdAt: timestamp('created_at').notNull().defaultNow()
|
||||
});
|
||||
|
||||
export const holidays = pgTable('holidays', {
|
||||
id: uuid('id').primaryKey().defaultRandom(),
|
||||
bundesland: varchar('bundesland', { length: 2 }).notNull(),
|
||||
date: date('date').notNull(),
|
||||
name: varchar('name', { length: 200 }).notNull(),
|
||||
year: integer('year').notNull()
|
||||
});
|
||||
|
||||
export const vacationBalances = pgTable('vacation_balances', {
|
||||
id: uuid('id').primaryKey().defaultRandom(),
|
||||
userId: uuid('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
|
||||
year: integer('year').notNull(),
|
||||
totalDays: integer('total_days').notNull(),
|
||||
carriedOverDays: integer('carried_over_days').notNull().default(0)
|
||||
});
|
||||
|
||||
export type User = typeof users.$inferSelect;
|
||||
export type NewUser = typeof users.$inferInsert;
|
||||
export type TimeEntry = typeof timeEntries.$inferSelect;
|
||||
export type Absence = typeof absences.$inferSelect;
|
||||
export type Holiday = typeof holidays.$inferSelect;
|
||||
export type VacationBalance = typeof vacationBalances.$inferSelect;
|
||||
Reference in New Issue
Block a user