|
1 | | -CREATE TABLE tables ( |
2 | | - id INTEGER NOT NULL AUTO_INCREMENT, |
3 | | - number INTEGER NOT NULL, |
4 | | - occupied BOOL NOT NULL DEFAULT FALSE, |
5 | | - PRIMARY KEY (id) |
| 1 | +CREATE TABLE faction_enum ( |
| 2 | + name ENUM('alliance', 'horde') NOT NULL PRIMARY KEY |
6 | 3 | ); |
7 | 4 |
|
| 5 | +CREATE TABLE race_enum ( |
| 6 | + name ENUM('human', 'night elf', 'dwarf', 'gnome', 'orc', 'troll', 'tauren', 'undead') NOT NULL PRIMARY KEY |
| 7 | +); |
| 8 | + |
| 9 | +CREATE TABLE class_enum ( |
| 10 | + name ENUM('warrior', 'hunter', 'priest', 'paladin', 'druid', 'mage', 'warlock') NOT NULL PRIMARY KEY |
| 11 | +); |
| 12 | + |
| 13 | +-- Factions Table |
| 14 | +CREATE TABLE factions ( |
| 15 | + id INT AUTO_INCREMENT PRIMARY KEY, |
| 16 | + name ENUM('alliance', 'horde') UNIQUE NOT NULL, |
| 17 | + description TEXT |
| 18 | +); |
| 19 | + |
| 20 | +-- Races Table |
| 21 | +CREATE TABLE races ( |
| 22 | + id INT AUTO_INCREMENT PRIMARY KEY, |
| 23 | + name ENUM('human', 'night elf', 'dwarf', 'gnome', 'orc', 'troll', 'tauren', 'undead') UNIQUE NOT NULL, |
| 24 | + faction_id INT, |
| 25 | + FOREIGN KEY (faction_id) REFERENCES factions(id) ON DELETE CASCADE |
| 26 | +); |
| 27 | + |
| 28 | +-- Classes Table |
| 29 | +CREATE TABLE classes ( |
| 30 | + id INT AUTO_INCREMENT PRIMARY KEY, |
| 31 | + name ENUM('warrior', 'hunter', 'priest', 'paladin', 'druid', 'mage', 'warlock') UNIQUE NOT NULL, |
| 32 | + specialization JSON, |
| 33 | + CHECK ( |
| 34 | + JSON_VALID(specialization) AND |
| 35 | + JSON_UNQUOTE(JSON_EXTRACT(specialization, '$.role')) IN ('tank', 'healer', 'ranged', 'melee', 'hybrid') AND |
| 36 | + JSON_LENGTH(JSON_EXTRACT(specialization, '$.abilities')) > 0 AND |
| 37 | + ( |
| 38 | + JSON_EXTRACT(specialization, '$.tier') IS NULL OR |
| 39 | + CAST(JSON_UNQUOTE(JSON_EXTRACT(specialization, '$.tier')) AS UNSIGNED) BETWEEN 1 AND 5 |
| 40 | + ) |
| 41 | + ) |
| 42 | +); |
| 43 | + |
| 44 | +-- Characters Table |
| 45 | +CREATE TABLE characters ( |
| 46 | + id INT AUTO_INCREMENT PRIMARY KEY, |
| 47 | + name VARCHAR(100) NOT NULL, |
| 48 | + race_id INT, |
| 49 | + class_id INT, |
| 50 | + level SMALLINT DEFAULT 1, |
| 51 | + experience BIGINT DEFAULT 0, |
| 52 | + gold DOUBLE DEFAULT 0, |
| 53 | + last_chat_time TIME, |
| 54 | + login_time DATETIME, |
| 55 | + logout_time DATETIME, |
| 56 | + last_trade_time TIME, |
| 57 | + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| 58 | + FOREIGN KEY (race_id) REFERENCES races(id), |
| 59 | + FOREIGN KEY (class_id) REFERENCES classes(id) |
| 60 | +); |
| 61 | + |
| 62 | +-- Guilds Table |
| 63 | +CREATE TABLE guilds ( |
| 64 | + id INT AUTO_INCREMENT PRIMARY KEY, |
| 65 | + name VARCHAR(100) UNIQUE NOT NULL, |
| 66 | + description TEXT, |
| 67 | + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP |
| 68 | +); |
| 69 | + |
| 70 | +-- Guild Members Table |
| 71 | +CREATE TABLE guild_members ( |
| 72 | + guild_id INT, |
| 73 | + character_id INT, |
| 74 | + guild_rank VARCHAR(50), |
| 75 | + joined_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| 76 | + PRIMARY KEY (guild_id, character_id), |
| 77 | + FOREIGN KEY (guild_id) REFERENCES guilds(id) ON DELETE CASCADE, |
| 78 | + FOREIGN KEY (character_id) REFERENCES characters(id) ON DELETE CASCADE |
| 79 | +); |
| 80 | + |
| 81 | +-- Inventory Table |
| 82 | +CREATE TABLE inventory ( |
| 83 | + id INT AUTO_INCREMENT PRIMARY KEY, |
| 84 | + quantity INT DEFAULT 1, |
| 85 | + character_id INT, |
| 86 | + FOREIGN KEY (character_id) REFERENCES characters(id) ON DELETE CASCADE |
| 87 | +); |
| 88 | + |
| 89 | +-- Items Table |
8 | 90 | CREATE TABLE items ( |
9 | | - id INTEGER NOT NULL, |
10 | | - food_type VARCHAR(30) NOT NULL, |
11 | | - time_takes_to_cook INTEGER NOT NULL, |
12 | | - table_id INTEGER NOT NULL, |
13 | | - points SMALLINT NOT NULL, |
14 | | - description VARCHAR(255) NULL, |
15 | | - FOREIGN KEY (table_id) REFERENCES tables (id), |
16 | | - PRIMARY KEY (id) |
| 91 | + id INT AUTO_INCREMENT PRIMARY KEY, |
| 92 | + name VARCHAR(100) NOT NULL, |
| 93 | + rarity VARCHAR(50), |
| 94 | + inventory_id INT, |
| 95 | + flavor_text TEXT, |
| 96 | + FOREIGN KEY (inventory_id) REFERENCES inventory(id) ON DELETE CASCADE |
| 97 | +); |
| 98 | + |
| 99 | +-- Quests Table |
| 100 | +CREATE TABLE quests ( |
| 101 | + id INT AUTO_INCREMENT PRIMARY KEY, |
| 102 | + name VARCHAR(100) NOT NULL, |
| 103 | + description TEXT, |
| 104 | + rewards JSON, |
| 105 | + completed BOOL DEFAULT false, |
| 106 | + required_level INT DEFAULT 1 |
17 | 107 | ); |
18 | 108 |
|
19 | | -INSERT INTO tables (number) |
20 | | -VALUES |
21 | | - (1), (2), (3), (4), (5), (6), (7), (8), (9), (10); |
| 109 | +-- Character Quests Table |
| 110 | +CREATE TABLE character_quests ( |
| 111 | + character_id INT, |
| 112 | + quest_id INT, |
| 113 | + status VARCHAR(50) DEFAULT 'In Progress', |
| 114 | + PRIMARY KEY (character_id, quest_id), |
| 115 | + FOREIGN KEY (character_id) REFERENCES characters(id) ON DELETE CASCADE, |
| 116 | + FOREIGN KEY (quest_id) REFERENCES quests(id) ON DELETE CASCADE |
| 117 | +); |
22 | 118 |
|
23 | | -INSERT INTO items (id, food_type, time_takes_to_cook, table_id, points) |
24 | | -VALUES |
25 | | - (1, 'korean', 10, 1, 2), |
26 | | - (2, 'chinese', 10, 1, 2), |
27 | | - (3, 'japanese', 10, 1, 2), |
28 | | - (4, 'italian', 10, 1, 2), |
29 | | - (5, 'french', 10, 1, 2); |
| 119 | +-- Seed Data |
| 120 | +INSERT INTO factions (name, description) VALUES |
| 121 | +('alliance', 'The noble and righteous faction'), |
| 122 | +('horde', 'The fierce and battle-hardened faction'); |
30 | 123 |
|
| 124 | +INSERT INTO races (name, faction_id) VALUES |
| 125 | +('human', 1), |
| 126 | +('night elf', 1), |
| 127 | +('dwarf', 1), |
| 128 | +('gnome', 1), |
| 129 | +('orc', 2), |
| 130 | +('troll', 2), |
| 131 | +('tauren', 2), |
| 132 | +('undead', 2); |
31 | 133 |
|
32 | | --- We can primarily use this table to check how a column in MySQL can be converted to a TsFieldType |
| 134 | +INSERT INTO classes (name, specialization) VALUES |
| 135 | +('warrior', '{"role": "tank", "weapon": "sword", "abilities": ["charge", "slam", "shield block"]}'), |
| 136 | +('hunter', '{"role": "ranged", "weapon": "bow", "abilities": ["aimed shot", "multi-shot", "trap"]}'); |
33 | 137 |
|
| 138 | +-- We can primarily use this table to check how a column in MySQL can be converted to a TsFieldType |
34 | 139 | CREATE TABLE random ( |
35 | 140 | -- numeric types |
36 | 141 | intz INT, |
@@ -61,11 +166,9 @@ CREATE TABLE random ( |
61 | 166 | blob1 BLOB, |
62 | 167 | text1 TEXT, |
63 | 168 | -- ideally this one should be generated as a legit enum type |
64 | | - enum1 ENUM('x-small', 'small', 'medium', 'large', 'x-large'), |
| 169 | + enum1 ENUM('alliance', 'horde'), |
65 | 170 | set1 SET('one', 'two'), |
66 | 171 |
|
67 | 172 | -- JSON types |
68 | 173 | json1 JSON |
69 | | - |
70 | 174 | ); |
71 | | - |
|
0 commit comments