diff --git a/DEVELOPING.md b/DEVELOPING.md new file mode 100644 index 0000000..4138344 --- /dev/null +++ b/DEVELOPING.md @@ -0,0 +1,11 @@ +Setting Up A Dev Server +======================= + +*Note: this documentation is heavily in flux during the initial development phase of the project.* + +Starting with a fresh install of Debian 12 on a virtual machine or SBC: + +1. apt install nginx +2. apt install php-fpm +3. apt install sqlite3 php-sqlite3 + diff --git a/db/sqlite/20240506-initialize-db.sql b/db/sqlite/20240506-initialize-db.sql new file mode 100644 index 0000000..eb8d331 --- /dev/null +++ b/db/sqlite/20240506-initialize-db.sql @@ -0,0 +1,178 @@ +-- Items definition + +CREATE TABLE Items ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + description TEXT NOT NULL, + image_path TEXT, + model_path TEXT, + map_icon_path TEXT, + is_active INTEGER DEFAULT (1) NOT NULL, + is_unique_per_player INTEGER DEFAULT (0) NOT NULL, + is_unique_per_world INTEGER DEFAULT (0) NOT NULL +); + + +-- NPCs definition + +CREATE TABLE NPCs ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + description TEXT NOT NULL, + is_active INTEGER DEFAULT (1) NOT NULL, + is_unique INTEGER DEFAULT (0) NOT NULL, + model_path TEXT, + image_path TEXT, + avatar_path TEXT +, minimum_group INTEGER DEFAULT (1) NOT NULL, maximum_group INTEGER DEFAULT (1) NOT NULL); + + +-- Players definition + +CREATE TABLE Players ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + nickname TEXT NOT NULL, + is_active INTEGER DEFAULT (1) NOT NULL +); + + +-- POIs definition + +CREATE TABLE POIs ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + latitude NUMERIC NOT NULL, + longitude NUMERIC NOT NULL, + radius NUMERIC DEFAULT (25) NOT NULL, + is_active INTEGER DEFAULT (0) NOT NULL +, description TEXT, map_marker_icon TEXT); + +CREATE INDEX POIs_latitude_IDX ON POIs (latitude); +CREATE INDEX POIs_longitude_IDX ON POIs (longitude); +CREATE INDEX POIs_is_active_IDX ON POIs (is_active); +CREATE INDEX POIs_name_IDX ON POIs (name); + + +-- PlayerAuth definition + +CREATE TABLE PlayerAuth ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + player_id INTEGER NOT NULL, + email TEXT, + hashed_pw TEXT(255) NOT NULL, + is_active INTEGER DEFAULT (1) NOT NULL, + is_email_verified INTEGER DEFAULT (0) NOT NULL, + CONSTRAINT PlayerAuth_Players_FK FOREIGN KEY (player_id) REFERENCES Players(id) +); + + +-- PlayerEncounters definition + +CREATE TABLE PlayerEncounters ( + player_id INTEGER NOT NULL, + npc_id INTEGER NOT NULL, + encounter_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + CONSTRAINT PlayerEncounters_Players_FK FOREIGN KEY (player_id) REFERENCES Players(id), + CONSTRAINT PlayerEncounters_NPCs_FK FOREIGN KEY (npc_id) REFERENCES NPCs(id) +); + + +-- PlayerFriends definition + +CREATE TABLE PlayerFriends ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + player_id INTEGER NOT NULL, + friend_id INTEGER NOT NULL, + CONSTRAINT PlayerFriends_Players_FK FOREIGN KEY (player_id) REFERENCES Players(id), + CONSTRAINT PlayerFriends_Players_FK_1 FOREIGN KEY (friend_id) REFERENCES Players(id) +); + + +-- PlayerItems definition + +CREATE TABLE PlayerItems ( + player_id INTEGER NOT NULL, + item_id INTEGER NOT NULL, + quantity INTEGER DEFAULT (1) NOT NULL, + is_active INTEGER DEFAULT (1) NOT NULL, + CONSTRAINT PlayerItems_Players_FK FOREIGN KEY (player_id) REFERENCES Players(id), + CONSTRAINT PlayerItems_Items_FK FOREIGN KEY (item_id) REFERENCES Items(id) +); + + +-- PlayerNPCs definition + +CREATE TABLE PlayerNPCs ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + player_id INTEGER NOT NULL, + npc_id INTEGER NOT NULL, + group_size INTEGER DEFAULT (1) NOT NULL, + is_active INTEGER DEFAULT (1) NOT NULL, + CONSTRAINT PlayerNPCs_Players_FK FOREIGN KEY (player_id) REFERENCES Players(id), + CONSTRAINT PlayerNPCs_NPCs_FK FOREIGN KEY (npc_id) REFERENCES NPCs(id) +); + + +-- PlayerPWChanges definition + +CREATE TABLE PlayerPWChanges ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + player_id INTEGER NOT NULL, + token TEXT NOT NULL, + is_used INTEGER DEFAULT (0) NOT NULL, + expires INTEGER NOT NULL, + CONSTRAINT PlayerPWChanges_Players_FK FOREIGN KEY (player_id) REFERENCES Players(id) +); + + +-- PlayerSessions definition + +CREATE TABLE PlayerSessions ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + player_id INTEGER NOT NULL, + session_id TEXT NOT NULL, + CONSTRAINT PlayerSessions_Players_FK FOREIGN KEY (player_id) REFERENCES Players(id) +); + +CREATE INDEX PlayerSessions_session_id_IDX ON PlayerSessions (session_id); + + +-- "POI-Items" definition + +CREATE TABLE "POI-Items" ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + poi_id INTEGER NOT NULL, + item_id INTEGER NOT NULL, + is_active INTEGER DEFAULT (1) NOT NULL, + refresh_rate_in_seconds INTEGER DEFAULT (0) NOT NULL, + CONSTRAINT POI_Items_POIs_FK FOREIGN KEY (poi_id) REFERENCES POIs(id), + CONSTRAINT POI_Items_Items_FK FOREIGN KEY (item_id) REFERENCES Items(id) +); + + +-- "POI-NPCs" definition + +CREATE TABLE "POI-NPCs" ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + poi_id INTEGER NOT NULL, + npc_id INTEGER NOT NULL, + group_size INTEGER DEFAULT (1) NOT NULL, + name INTEGER, + description INTEGER, + CONSTRAINT POI_NPCs_POIs_FK FOREIGN KEY (poi_id) REFERENCES POIs(id), + CONSTRAINT POI_NPCs_NPCs_FK FOREIGN KEY (npc_id) REFERENCES NPCs(id) +); + + +-- "POI-NPC-Items" definition + +CREATE TABLE "POI-NPC-Items" ( + poi_npc_id INTEGER NOT NULL, + item_id INTEGER NOT NULL, + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + quantity INTEGER DEFAULT (1) NOT NULL, + refresh_rate_in_seconds INTEGER DEFAULT (0) NOT NULL, + CONSTRAINT POI_NPC_Items_POI_NPCs_FK FOREIGN KEY (poi_npc_id) REFERENCES "POI-NPCs"(id), + CONSTRAINT POI_NPC_Items_Items_FK FOREIGN KEY (item_id) REFERENCES Items(id) +); +