inventory/database/sqlite/migration/00001_init.sql
2025-02-26 00:09:11 +01:00

144 lines
4.2 KiB
SQL

-- +goose Up
-- SQL in section 'Up' is executed when this migration is applied.
CREATE TABLE users
(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
Username TEXT UNIQUE NOT NULL
);
CREATE TABLE userlogin_provider
(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
user_ID INTEGER NOT NULL,
login_stub TEXT UNIQUE NOT NULL,
FOREIGN KEY (user_ID) REFERENCES users (ID)
);
CREATE TABLE user_sessions
(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
user_ID INTEGER NOT NULL,
session_token TEXT UNIQUE NOT NULL,
created_at TEXT NOT NULL,
valid_until TEXT NOT NULL,
name TEXT,
FOREIGN KEY (user_ID) REFERENCES users (ID)
);
CREATE TABLE storagespace
(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
Parent INTEGER,
Location TEXT,
FOREIGN KEY (Parent) REFERENCES storagespace (ID)
);
CREATE TABLE objects
(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
storagespace_ID INTEGER NOT NULL,
Name TEXT NOT NULL,
Description TEXT,
Serialnumber TEXT UNIQUE,
created DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (storagespace_ID) REFERENCES storagespace (ID)
);
CREATE TABLE events
(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
user_ID INTEGER NOT NULL,
Name TEXT NOT NULL,
Description TEXT,
Location TEXT,
Start_Date TEXT NOT NULL,
End_Date TEXT NOT NULL,
FOREIGN KEY (user_ID) REFERENCES users (ID)
);
CREATE TABLE pictures
(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
user_ID INTEGER NOT NULL,
storagespace_ID INTEGER,
object_ID INTEGER,
event_ID INTEGER,
check_in_ID INTEGER,
Path TEXT NOT NULL,
Description TEXT,
datetime TEXT NOT NULL,
FOREIGN KEY (user_ID) REFERENCES users (ID),
FOREIGN KEY (storagespace_ID) REFERENCES storagespace (ID),
FOREIGN KEY (object_ID) REFERENCES objects (ID),
FOREIGN KEY (event_ID) REFERENCES events (ID),
FOREIGN KEY (check_in_ID) REFERENCES check_in (ID)
);
CREATE TABLE events_objects
(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
event_ID INTEGER NOT NULL,
object_ID INTEGER NOT NULL,
FOREIGN KEY (event_ID) REFERENCES events (ID),
FOREIGN KEY (object_ID) REFERENCES objects (ID)
);
CREATE TABLE checkin_events
(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
Name TEXT NOT NULL
);
CREATE TABLE checkin_states
(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
Name TEXT NOT NULL
);
CREATE TABLE check_in
(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
user_ID INTEGER NOT NULL,
checkin_event_ID INTEGER NOT NULL,
event_ID INTEGER,
object_ID INTEGER,
checkin_state_ID INTEGER NOT NULL,
datetime TEXT NOT NULL,
FOREIGN KEY (user_ID) REFERENCES users (ID),
FOREIGN KEY (checkin_event_ID) REFERENCES checkin_events (ID),
FOREIGN KEY (event_ID) REFERENCES events (ID),
FOREIGN KEY (object_ID) REFERENCES objects (ID),
FOREIGN KEY (checkin_state_ID) REFERENCES checkin_states (ID)
);
CREATE TABLE annotations
(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
user_ID INTEGER NOT NULL,
object_ID INTEGER,
event_ID INTEGER,
check_in_ID INTEGER,
events_object_ID INTEGER,
text TEXT NOT NULL,
datetime TEXT NOT NULL,
FOREIGN KEY (user_ID) REFERENCES users (ID),
FOREIGN KEY (object_ID) REFERENCES objects (ID),
FOREIGN KEY (event_ID) REFERENCES events (ID),
FOREIGN KEY (check_in_ID) REFERENCES check_in (ID),
FOREIGN KEY (events_object_ID) REFERENCES events_objects (ID)
);
-- +goose Down
-- SQL in section 'Down' is executed when this migration is rolled back.
DROP TABLE IF EXISTS annotations;
DROP TABLE IF EXISTS check_in;
DROP TABLE IF EXISTS checkin_states;
DROP TABLE IF EXISTS checkin_events;
DROP TABLE IF EXISTS events_objects;
DROP TABLE IF EXISTS pictures;
DROP TABLE IF EXISTS events;
DROP TABLE IF EXISTS objects;
DROP TABLE IF EXISTS storagespace;
DROP TABLE IF EXISTS user_sessions;
DROP TABLE IF EXISTS userlogin_provider;
DROP TABLE IF EXISTS users;