const sqlite3 = require("sqlite3").verbose(); const path = require('path'); const dbPath = process.env.DATABASE_PATH || '../'; const db = new sqlite3.Database(path.join(dbPath, 'database.sqlite')); db.serialize(() => { db.run(` CREATE TABLE IF NOT EXISTS sheeps ( id INTEGER PRIMARY KEY AUTOINCREMENT, group_id INTEGER, name TEXT, icon TEXT, uuid TEXT, uuid_manager TEXT, appointment TEXT DEFAULT 'lamb', mode INTEGER DEFAULT 0, mode_title TEXT DEFAULT 'Користувач' ) `); db.run(` CREATE TABLE IF NOT EXISTS possibilities ( id INTEGER PRIMARY KEY AUTOINCREMENT, sheep_id INTEGER, can_add_sheeps INTEGER DEFAULT 0, can_view_sheeps INTEGER DEFAULT 0, can_add_territory INTEGER DEFAULT 0, can_view_territory INTEGER DEFAULT 0, can_manager_territory INTEGER DEFAULT 0, can_add_stand INTEGER DEFAULT 0, can_view_stand INTEGER DEFAULT 0, can_manager_stand INTEGER DEFAULT 0, can_add_schedule INTEGER DEFAULT 0, can_view_schedule INTEGER DEFAULT 0, FOREIGN KEY (sheep_id) REFERENCES sheeps(id) ) `); db.run(` CREATE TABLE IF NOT EXISTS groups ( id INTEGER PRIMARY KEY AUTOINCREMENT, group_number INTEGER, share_hash TEXT ) `); db.run(` CREATE TABLE IF NOT EXISTS subscription ( id INTEGER PRIMARY KEY AUTOINCREMENT, sheep_id INTEGER, token TEXT, FOREIGN KEY (sheep_id) REFERENCES sheeps(id) ) `); db.run(` CREATE TABLE IF NOT EXISTS badges ( id INTEGER PRIMARY KEY AUTOINCREMENT, sheep_id INTEGER, quantity INTEGER, FOREIGN KEY (sheep_id) REFERENCES sheeps(id) ) `); db.run(` CREATE TABLE IF NOT EXISTS house ( id INTEGER PRIMARY KEY AUTOINCREMENT, group_id INTEGER, title TEXT, number TEXT, points TEXT DEFAULT '[]', points_number TEXT DEFAULT '[]', geo TEXT DEFAULT '[]', osm_id TEXT DEFAULT '[]', settlement TEXT, description TEXT, created_at TIMESTAMP, updated_at TIMESTAMP, FOREIGN KEY (group_id) REFERENCES groups(group_number) ) `); db.run(` CREATE TABLE IF NOT EXISTS entrance ( id INTEGER PRIMARY KEY AUTOINCREMENT, house_id INTEGER, entrance_number INTEGER, title TEXT, points TEXT DEFAULT '[]', points_number TEXT DEFAULT '[]', floors_quantity TEXT, apartments_quantity TEXT, description TEXT, created_at TIMESTAMP, updated_at TIMESTAMP, FOREIGN KEY (house_id) REFERENCES house(id) ) `); db.run(` CREATE TABLE IF NOT EXISTS entrance_history ( id INTEGER PRIMARY KEY AUTOINCREMENT, entrance_id INTEGER, name TEXT, date_start TIMESTAMP, date_end TIMESTAMP, group_id INTEGER, sheep_id TEXT, working INTEGER DEFAULT 0, FOREIGN KEY (entrance_id) REFERENCES entrance(id) ) `); db.run(` CREATE TABLE IF NOT EXISTS apartments ( id INTEGER PRIMARY KEY AUTOINCREMENT, entrance_id INTEGER, apartment_number INTEGER, title TEXT, floors_number INTEGER, status INTEGER, description TEXT, sheep_id TEXT, updated_at TIMESTAMP, FOREIGN KEY (entrance_id) REFERENCES entrance(id) ) `); db.run(` CREATE TABLE IF NOT EXISTS apartments_history ( id INTEGER PRIMARY KEY AUTOINCREMENT, sheep_id TEXT, apartments_id INTEGER, status INTEGER, description TEXT, created_at TIMESTAMP, FOREIGN KEY (apartments_id) REFERENCES apartments(id) ) `); db.run(` CREATE TABLE IF NOT EXISTS homestead ( id INTEGER PRIMARY KEY AUTOINCREMENT, group_id INTEGER, title TEXT, number TEXT, points TEXT DEFAULT '[]', point_icons TEXT DEFAULT '[]', geo TEXT DEFAULT '[]', osm_id TEXT DEFAULT '[]', settlement TEXT, description TEXT, created_at TIMESTAMP, updated_at TIMESTAMP, FOREIGN KEY (group_id) REFERENCES groups(group_number) ) `); db.run(` CREATE TABLE IF NOT EXISTS homestead_history ( id INTEGER PRIMARY KEY AUTOINCREMENT, homestead_id INTEGER, name TEXT, date_start TIMESTAMP, date_end TIMESTAMP, group_id INTEGER, sheep_id TEXT, working INTEGER DEFAULT 0, FOREIGN KEY (homestead_id) REFERENCES homestead(id) ) `); db.run(` CREATE TABLE IF NOT EXISTS meetings_schedule ( id INTEGER PRIMARY KEY AUTOINCREMENT, date TIMESTAMP, type INTEGER, name TEXT, sheep_id TEXT, title TEXT, number TEXT, FOREIGN KEY (sheep_id) REFERENCES sheeps(id) ) `); db.run(` CREATE TABLE IF NOT EXISTS stand_list ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, hour_start INTEGER DEFAULT 10, hour_end INTEGER DEFAULT 16, quantity_sheep INTEGER DEFAULT 2, week_days TEXT DEFAULT '[0, 1, 2, 3, 4, 5, 6]' ) `); db.run(` CREATE TABLE IF NOT EXISTS stand_schedule ( id INTEGER PRIMARY KEY AUTOINCREMENT, stand INTEGER, date TIMESTAMP, hour INTEGER, sheep_id TEXT, number_sheep TEXT, updated_at TIMESTAMP, FOREIGN KEY (stand) REFERENCES stand_list(id), FOREIGN KEY (sheep_id) REFERENCES sheeps(id) ) `); }); module.exports = db;