115 lines
4.2 KiB
SQL
115 lines
4.2 KiB
SQL
CREATE TYPE role AS ENUM ('staff', 'areamanager', 'admin');
|
|
CREATE TYPE function AS ENUM ('posten', 'fuehrungsassistent', 'wachhabender');
|
|
|
|
CREATE TABLE area
|
|
(
|
|
id SERIAL PRIMARY KEY,
|
|
name TEXT NOT NULL
|
|
);
|
|
|
|
INSERT INTO area (name) VALUES ('Leipzig Ost');
|
|
|
|
CREATE TABLE location
|
|
(
|
|
id SERIAL PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
areaId INTEGER NOT NULL REFERENCES area (id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE user_
|
|
(
|
|
id SERIAL PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
email TEXT NOT NULL,
|
|
password TEXT ,
|
|
salt TEXT ,
|
|
role role NOT NULL,
|
|
function function ARRAY NOT NULL,
|
|
areaId INTEGER NOT NULL REFERENCES area (id) ON DELETE CASCADE,
|
|
locked BOOLEAN NOT NULL DEFAULT false,
|
|
lastLogin TIMESTAMP WITH TIME ZONE,
|
|
receiveNotifications BOOLEAN NOT NULL DEFAULT true
|
|
);
|
|
|
|
CREATE TABLE availabillity
|
|
(
|
|
id SERIAL PRIMARY KEY,
|
|
userId INTEGER NOT NULL REFERENCES user_ (id) ON DELETE CASCADE,
|
|
date DATE NOT NULL,
|
|
startTime TIME,
|
|
endTime TIME,
|
|
comment TEXT
|
|
);
|
|
|
|
CREATE TABLE event
|
|
(
|
|
id SERIAL PRIMARY KEY,
|
|
date DATE NOT NULL,
|
|
startTime TIME NOT NULL,
|
|
endTime TIME NOT NULL,
|
|
name TEXT NOT NULL,
|
|
locationId INTEGER NOT NULL REFERENCES location (id) ON DELETE CASCADE,
|
|
voluntaryWachhabender BOOLEAN NOT NULL,
|
|
voluntaryFuehrungsassistent BOOLEAN NOT NULL,
|
|
amountOfPosten SMALLINT NOT NULL CHECK (amountOfPosten >= 0),
|
|
clothing TEXT NOT NULL,
|
|
note TEXT,
|
|
canceled BOOLEAN NOT NULL DEFAULT false
|
|
);
|
|
|
|
CREATE TABLE assignment
|
|
(
|
|
eventId INTEGER REFERENCES event (id) ON DELETE CASCADE,
|
|
availabillityId INTEGER REFERENCES availabillity (id) ON DELETE CASCADE,
|
|
function function NOT NULL,
|
|
startTime TIME NOT NULL,
|
|
endTime TIME NOT NULL,
|
|
PRIMARY KEY (eventId, availabillityId)
|
|
);
|
|
|
|
CREATE TABLE vehicle
|
|
(
|
|
id SERIAL PRIMARY KEY,
|
|
radioCallName TEXT NOT NULL,
|
|
station TEXT NOT NULL
|
|
);
|
|
|
|
CREATE TABLE vehicleassignement
|
|
(
|
|
eventId INTEGER REFERENCES event (id) ON DELETE CASCADE,
|
|
vehicleId INTEGER REFERENCES vehicle (id) ON DELETE CASCADE,
|
|
startTime TIME NOT NULL,
|
|
endTime TIME NOT NULL,
|
|
PRIMARY KEY (eventId, vehicleId)
|
|
);
|
|
|
|
CREATE UNLOGGED TABLE session
|
|
(
|
|
id SERIAL PRIMARY KEY,
|
|
key TEXT UNIQUE NOT NULL,
|
|
sessionstate JSONB,
|
|
expires TIMESTAMP
|
|
);
|
|
|
|
CREATE INDEX session_key_idx ON session (key);
|
|
|
|
CREATE UNLOGGED TABLE passwordReset
|
|
(
|
|
id SERIAL PRIMARY KEY,
|
|
token TEXT UNIQUE NOT NULL,
|
|
userId INTEGER NOT NULL REFERENCES user_ (id) ON DELETE CASCADE,
|
|
expires TIMESTAMP NOT NULL
|
|
);
|
|
|
|
CREATE INDEX passwordReset_token_idx ON passwordReset (token);
|
|
|
|
CREATE UNLOGGED TABLE registration
|
|
(
|
|
id SERIAL PRIMARY KEY,
|
|
token TEXT UNIQUE NOT NULL,
|
|
userId INTEGER NOT NULL REFERENCES user_ (id) ON DELETE CASCADE,
|
|
expires TIMESTAMP NOT NULL
|
|
);
|
|
|
|
CREATE INDEX registration_token_idx ON registration (token);
|