-- +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;