|
| 1 | +/* ------------------------- |
| 2 | + MOOC CONTEXT |
| 3 | +---------------------------- */ |
| 4 | + |
| 5 | +-- Generic tables |
| 6 | + |
| 7 | +CREATE TABLE `mutations` ( |
| 8 | + `id` BIGINT AUTO_INCREMENT PRIMARY KEY, |
| 9 | + `table_name` VARCHAR(255) NOT NULL, |
| 10 | + `operation` ENUM ('INSERT', 'UPDATE', 'DELETE') NOT NULL, |
| 11 | + `old_value` JSON NULL, |
| 12 | + `new_value` JSON NULL, |
| 13 | + `mutation_timestamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP |
| 14 | +) ENGINE = InnoDB |
| 15 | + DEFAULT CHARSET = utf8mb4 |
| 16 | + COLLATE = utf8mb4_unicode_ci; |
| 17 | + |
| 18 | +CREATE TABLE `domain_events` ( |
| 19 | + `id` CHAR(36) NOT NULL, |
| 20 | + `aggregate_id` CHAR(36) NOT NULL, |
| 21 | + `name` VARCHAR(255) NOT NULL, |
| 22 | + `body` JSON NOT NULL, |
| 23 | + `occurred_on` TIMESTAMP NOT NULL, |
| 24 | + PRIMARY KEY (`id`) |
| 25 | +) ENGINE = InnoDB |
| 26 | + DEFAULT CHARSET = utf8mb4 |
| 27 | + COLLATE = utf8mb4_unicode_ci; |
| 28 | + |
| 29 | +-- Aggregates tables |
| 30 | + |
1 | 31 | CREATE TABLE `courses` (
|
2 |
| - `id` CHAR(36) NOT NULL, |
3 |
| - `name` VARCHAR(255) NOT NULL, |
4 |
| - `duration` VARCHAR(255) NOT NULL, |
5 |
| - PRIMARY KEY (`id`) |
6 |
| -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; |
| 32 | + `id` CHAR(36) NOT NULL, |
| 33 | + `name` VARCHAR(255) NOT NULL, |
| 34 | + `duration` VARCHAR(255) NOT NULL, |
| 35 | + PRIMARY KEY (`id`) |
| 36 | +) ENGINE = InnoDB |
| 37 | + DEFAULT CHARSET = utf8mb4 |
| 38 | + COLLATE = utf8mb4_unicode_ci; |
| 39 | + |
| 40 | +CREATE TRIGGER after_courses_insert |
| 41 | + AFTER INSERT |
| 42 | + ON courses |
| 43 | + FOR EACH ROW |
| 44 | +BEGIN |
| 45 | + INSERT INTO mutations (table_name, operation, new_value, mutation_timestamp) |
| 46 | + VALUES ('courses', 'INSERT', JSON_OBJECT('id', new.id, 'name', new.name, 'duration', new.duration), NOW()); |
| 47 | +END; |
| 48 | + |
| 49 | +CREATE TRIGGER after_courses_update |
| 50 | + AFTER UPDATE |
| 51 | + ON courses |
| 52 | + FOR EACH ROW |
| 53 | +BEGIN |
| 54 | + INSERT INTO mutations (table_name, operation, old_value, new_value, mutation_timestamp) |
| 55 | + VALUES ('courses', |
| 56 | + 'UPDATE', |
| 57 | + JSON_OBJECT('id', old.id, 'name', old.name, 'duration', old.duration), |
| 58 | + JSON_OBJECT('id', new.id, 'name', new.name, 'duration', new.duration), |
| 59 | + NOW()); |
| 60 | +END; |
| 61 | + |
| 62 | +CREATE TRIGGER after_courses_delete |
| 63 | + AFTER DELETE |
| 64 | + ON courses |
| 65 | + FOR EACH ROW |
| 66 | +BEGIN |
| 67 | + INSERT INTO mutations (table_name, operation, old_value, mutation_timestamp) |
| 68 | + VALUES ('courses', 'DELETE', JSON_OBJECT('id', old.id, 'name', old.name, 'duration', old.duration), NOW()); |
| 69 | +END; |
7 | 70 |
|
8 | 71 | CREATE TABLE `courses_counter` (
|
9 |
| - `id` CHAR(36) NOT NULL, |
10 |
| - `total` INT NOT NULL, |
11 |
| - `existing_courses` JSON NOT NULL, |
12 |
| - PRIMARY KEY (`id`) |
13 |
| -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; |
| 72 | + `id` CHAR(36) NOT NULL, |
| 73 | + `total` INT NOT NULL, |
| 74 | + `existing_courses` JSON NOT NULL, |
| 75 | + PRIMARY KEY (`id`) |
| 76 | +) ENGINE = InnoDB |
| 77 | + DEFAULT CHARSET = utf8mb4 |
| 78 | + COLLATE = utf8mb4_unicode_ci; |
14 | 79 |
|
15 |
| -INSERT INTO `courses_counter` VALUES ("cdf26d7d-3deb-4e8c-9f73-4ac085a8d6f3", 0, "[]"); |
| 80 | +INSERT INTO `courses_counter` |
| 81 | +VALUES ("cdf26d7d-3deb-4e8c-9f73-4ac085a8d6f3", 0, "[]"); |
16 | 82 |
|
17 |
| -CREATE TABLE `domain_events` ( |
18 |
| - `id` CHAR(36) NOT NULL, |
19 |
| - `aggregate_id` CHAR(36) NOT NULL, |
20 |
| - `name` VARCHAR(255) NOT NULL, |
21 |
| - `body` JSON NOT NULL, |
22 |
| - `occurred_on` timestamp NOT NULL, |
23 |
| - PRIMARY KEY (`id`) |
24 |
| -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; |
| 83 | + |
| 84 | +/* ------------------------- |
| 85 | + BACKOFFICE CONTEXT |
| 86 | +---------------------------- */ |
25 | 87 |
|
26 | 88 | CREATE TABLE `backoffice_courses` (
|
27 |
| - `id` CHAR(36) NOT NULL, |
28 |
| - `name` VARCHAR(255) NOT NULL, |
29 |
| - `duration` VARCHAR(255) NOT NULL, |
30 |
| - PRIMARY KEY (`id`) |
31 |
| -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; |
| 89 | + `id` CHAR(36) NOT NULL, |
| 90 | + `name` VARCHAR(255) NOT NULL, |
| 91 | + `duration` VARCHAR(255) NOT NULL, |
| 92 | + PRIMARY KEY (`id`) |
| 93 | +) ENGINE = InnoDB |
| 94 | + DEFAULT CHARSET = utf8mb4 |
| 95 | + COLLATE = utf8mb4_unicode_ci; |
0 commit comments