init
This commit is contained in:
99
drizzle/0000_initial.sql
Normal file
99
drizzle/0000_initial.sql
Normal file
@@ -0,0 +1,99 @@
|
||||
-- Initial migration for Zeiterfassung UniCon
|
||||
|
||||
CREATE TYPE role AS ENUM ('mitarbeiter', 'admin');
|
||||
CREATE TYPE absence_type AS ENUM ('urlaub', 'krank', 'sonderurlaub');
|
||||
|
||||
CREATE TABLE users (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
first_name VARCHAR(100) NOT NULL,
|
||||
last_name VARCHAR(100) NOT NULL,
|
||||
email VARCHAR(255) NOT NULL UNIQUE,
|
||||
password_hash TEXT,
|
||||
role role NOT NULL DEFAULT 'mitarbeiter',
|
||||
bundesland VARCHAR(2) NOT NULL DEFAULT 'MV',
|
||||
standard_start TIME NOT NULL DEFAULT '08:00',
|
||||
standard_end TIME NOT NULL DEFAULT '17:00',
|
||||
break_minutes_default INTEGER NOT NULL DEFAULT 30,
|
||||
weekly_hours DECIMAL(4,1) NOT NULL DEFAULT 40.0,
|
||||
vacation_days_per_year INTEGER NOT NULL DEFAULT 30,
|
||||
active BOOLEAN NOT NULL DEFAULT true,
|
||||
invite_token TEXT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE TABLE sessions (
|
||||
id TEXT PRIMARY KEY,
|
||||
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
expires_at TIMESTAMP NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE TABLE time_entries (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
date DATE NOT NULL,
|
||||
start_time TIME,
|
||||
end_time TIME,
|
||||
break_minutes INTEGER NOT NULL DEFAULT 30,
|
||||
is_auto_filled BOOLEAN NOT NULL DEFAULT false,
|
||||
is_corrected BOOLEAN NOT NULL DEFAULT false,
|
||||
confirmed_at TIMESTAMP,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT now(),
|
||||
UNIQUE(user_id, date)
|
||||
);
|
||||
|
||||
CREATE TABLE absences (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
date_from DATE NOT NULL,
|
||||
date_to DATE NOT NULL,
|
||||
type absence_type NOT NULL,
|
||||
notes TEXT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE TABLE holidays (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
bundesland VARCHAR(2) NOT NULL,
|
||||
date DATE NOT NULL,
|
||||
name VARCHAR(200) NOT NULL,
|
||||
year INTEGER NOT NULL,
|
||||
UNIQUE(bundesland, date)
|
||||
);
|
||||
|
||||
CREATE TABLE vacation_balances (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
year INTEGER NOT NULL,
|
||||
total_days INTEGER NOT NULL,
|
||||
carried_over_days INTEGER NOT NULL DEFAULT 0,
|
||||
UNIQUE(user_id, year)
|
||||
);
|
||||
|
||||
-- Feiertage Mecklenburg-Vorpommern 2025 & 2026
|
||||
INSERT INTO holidays (bundesland, date, name, year) VALUES
|
||||
-- 2025
|
||||
('MV', '2025-01-01', 'Neujahr', 2025),
|
||||
('MV', '2025-04-18', 'Karfreitag', 2025),
|
||||
('MV', '2025-04-21', 'Ostermontag', 2025),
|
||||
('MV', '2025-05-01', 'Tag der Arbeit', 2025),
|
||||
('MV', '2025-05-29', 'Christi Himmelfahrt', 2025),
|
||||
('MV', '2025-06-09', 'Pfingstmontag', 2025),
|
||||
('MV', '2025-10-03', 'Tag der Deutschen Einheit', 2025),
|
||||
('MV', '2025-10-31', 'Reformationstag', 2025),
|
||||
('MV', '2025-12-24', 'Heiligabend (halber Tag)', 2025),
|
||||
('MV', '2025-12-25', '1. Weihnachtstag', 2025),
|
||||
('MV', '2025-12-26', '2. Weihnachtstag', 2025),
|
||||
('MV', '2025-12-31', 'Silvester (halber Tag)', 2025),
|
||||
-- 2026
|
||||
('MV', '2026-01-01', 'Neujahr', 2026),
|
||||
('MV', '2026-04-03', 'Karfreitag', 2026),
|
||||
('MV', '2026-04-06', 'Ostermontag', 2026),
|
||||
('MV', '2026-05-01', 'Tag der Arbeit', 2026),
|
||||
('MV', '2026-05-14', 'Christi Himmelfahrt', 2026),
|
||||
('MV', '2026-05-25', 'Pfingstmontag', 2026),
|
||||
('MV', '2026-10-03', 'Tag der Deutschen Einheit', 2026),
|
||||
('MV', '2026-10-31', 'Reformationstag', 2026),
|
||||
('MV', '2026-12-25', '1. Weihnachtstag', 2026),
|
||||
('MV', '2026-12-26', '2. Weihnachtstag', 2026);
|
||||
Reference in New Issue
Block a user