Mbonea commited on
Commit
d0d5b6c
·
verified ·
1 Parent(s): c29db00

Update entrypoint.sh

Browse files
Files changed (1) hide show
  1. entrypoint.sh +135 -11
entrypoint.sh CHANGED
@@ -31,18 +31,142 @@ mysql --socket=/run/mysqld/mysqld.sock -e "
31
  FLUSH PRIVILEGES;
32
  "
33
 
34
- echo "Dropping old tables with wrong schema..."
35
- mysql --socket=/run/mysqld/mysqld.sock sms_gateway -e "
36
- SET FOREIGN_KEY_CHECKS = 0;
37
- DROP TABLE IF EXISTS webhooks;
38
- DROP TABLE IF EXISTS message_recipients;
39
- DROP TABLE IF EXISTS messages;
40
- DROP TABLE IF EXISTS devices;
41
- DROP TABLE IF EXISTS users;
42
- SET FOREIGN_KEY_CHECKS = 1;
43
- "
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
 
45
- echo "Database ready. GORM will create tables on startup."
46
 
47
  sed -i "s|\${GATEWAY__PRIVATE_TOKEN}|${GATEWAY__PRIVATE_TOKEN}|g" /app/config.yml
48
 
 
31
  FLUSH PRIVILEGES;
32
  "
33
 
34
+ echo "Creating tables if needed..."
35
+ mysql --socket=/run/mysqld/mysqld.sock sms_gateway <<'EOSQL'
36
+ SET FOREIGN_KEY_CHECKS = 0;
37
+
38
+ CREATE TABLE IF NOT EXISTS goose_db_version (
39
+ id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
40
+ version_id BIGINT NOT NULL,
41
+ is_applied TINYINT(1) NOT NULL,
42
+ tstamp TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
43
+ PRIMARY KEY (id),
44
+ UNIQUE KEY id (id)
45
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
46
+
47
+ CREATE TABLE IF NOT EXISTS users (
48
+ id VARCHAR(32) NOT NULL,
49
+ password_hash VARCHAR(72) NOT NULL,
50
+ created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
51
+ updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
52
+ deleted_at DATETIME(3) DEFAULT NULL,
53
+ PRIMARY KEY (id)
54
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
55
+
56
+ CREATE TABLE IF NOT EXISTS devices (
57
+ id CHAR(21) NOT NULL,
58
+ name VARCHAR(128) DEFAULT NULL,
59
+ auth_token CHAR(21) NOT NULL,
60
+ push_token VARCHAR(256) DEFAULT NULL,
61
+ user_id VARCHAR(32) NOT NULL,
62
+ created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
63
+ updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
64
+ deleted_at DATETIME(3) DEFAULT NULL,
65
+ last_seen DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
66
+ PRIMARY KEY (id),
67
+ UNIQUE KEY idx_devices_auth_token (auth_token),
68
+ KEY fk_users_devices (user_id),
69
+ KEY idx_devices_last_seen (last_seen),
70
+ CONSTRAINT fk_users_devices FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE
71
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
72
+
73
+ CREATE TABLE IF NOT EXISTS device_settings (
74
+ user_id VARCHAR(32) NOT NULL,
75
+ settings JSON NOT NULL,
76
+ created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
77
+ updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
78
+ PRIMARY KEY (user_id),
79
+ CONSTRAINT fk_device_settings_user FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE
80
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
81
+
82
+ CREATE TABLE IF NOT EXISTS messages (
83
+ id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
84
+ device_id CHAR(21) NOT NULL,
85
+ ext_id VARCHAR(36) NOT NULL,
86
+ state ENUM('Pending','Processed','Sent','Delivered','Failed') NOT NULL DEFAULT 'Pending',
87
+ created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
88
+ updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
89
+ deleted_at DATETIME(3) DEFAULT NULL,
90
+ valid_until DATETIME(3) DEFAULT NULL,
91
+ sim_number TINYINT UNSIGNED DEFAULT NULL,
92
+ with_delivery_report TINYINT UNSIGNED NOT NULL DEFAULT 1,
93
+ is_hashed TINYINT UNSIGNED NOT NULL DEFAULT 0,
94
+ is_encrypted TINYINT UNSIGNED NOT NULL DEFAULT 0,
95
+ priority TINYINT NOT NULL DEFAULT 0,
96
+ type ENUM('Text','Data') NOT NULL DEFAULT 'Text',
97
+ content TEXT NOT NULL,
98
+ PRIMARY KEY (id),
99
+ UNIQUE KEY unq_messages_id_device (ext_id, device_id),
100
+ KEY idx_messages_device_state (device_id, state),
101
+ KEY idx_messages_is_hashed (is_hashed),
102
+ CONSTRAINT fk_messages_device FOREIGN KEY (device_id) REFERENCES devices (id) ON DELETE CASCADE
103
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
104
+
105
+ CREATE TABLE IF NOT EXISTS message_recipients (
106
+ id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
107
+ message_id BIGINT UNSIGNED NOT NULL,
108
+ phone_number VARCHAR(128) NOT NULL,
109
+ state ENUM('Pending','Processed','Sent','Delivered','Failed') NOT NULL DEFAULT 'Pending',
110
+ error VARCHAR(256) DEFAULT NULL,
111
+ PRIMARY KEY (id),
112
+ UNIQUE KEY unq_message_recipients_message_id_phone_number (message_id, phone_number),
113
+ UNIQUE KEY id (id),
114
+ CONSTRAINT fk_messages_recipients FOREIGN KEY (message_id) REFERENCES messages (id) ON DELETE CASCADE
115
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
116
+
117
+ CREATE TABLE IF NOT EXISTS message_states (
118
+ id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
119
+ message_id BIGINT UNSIGNED NOT NULL,
120
+ state ENUM('Pending','Sent','Processed','Delivered','Failed') NOT NULL,
121
+ updated_at DATETIME(3) NOT NULL,
122
+ PRIMARY KEY (id),
123
+ UNIQUE KEY unq_message_states_message_id_state (message_id, state),
124
+ CONSTRAINT fk_messages_states FOREIGN KEY (message_id) REFERENCES messages (id) ON DELETE CASCADE
125
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
126
+
127
+ CREATE TABLE IF NOT EXISTS tokens (
128
+ id CHAR(21) NOT NULL,
129
+ user_id CHAR(21) NOT NULL,
130
+ expires_at DATETIME(3) NOT NULL,
131
+ created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
132
+ updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
133
+ revoked_at DATETIME(3) DEFAULT NULL,
134
+ token_use ENUM('access','refresh') NOT NULL DEFAULT 'access',
135
+ parent_jti CHAR(21) DEFAULT NULL,
136
+ PRIMARY KEY (id),
137
+ KEY idx_tokens_user_id (user_id),
138
+ KEY idx_tokens_expires_at (expires_at),
139
+ KEY idx_tokens_parent_jti (parent_jti),
140
+ CONSTRAINT fk_tokens_user FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE
141
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
142
+
143
+ CREATE TABLE IF NOT EXISTS webhooks (
144
+ id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
145
+ ext_id VARCHAR(36) NOT NULL,
146
+ user_id VARCHAR(32) NOT NULL,
147
+ url VARCHAR(256) NOT NULL,
148
+ event VARCHAR(32) NOT NULL,
149
+ created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
150
+ updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
151
+ deleted_at DATETIME(3) DEFAULT NULL,
152
+ device_id CHAR(21) DEFAULT NULL,
153
+ PRIMARY KEY (id),
154
+ UNIQUE KEY unq_webhooks_user_extid (user_id, ext_id),
155
+ KEY idx_webhooks_device (device_id),
156
+ CONSTRAINT fk_webhooks_device FOREIGN KEY (device_id) REFERENCES devices (id) ON DELETE CASCADE,
157
+ CONSTRAINT fk_webhooks_user FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE
158
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
159
+
160
+ INSERT IGNORE INTO goose_db_version (version_id, is_applied) VALUES
161
+ (0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1),
162
+ (8, 1), (9, 1), (10, 1), (11, 1), (12, 1), (13, 1), (14, 1),
163
+ (15, 1), (16, 1), (17, 1), (18, 1), (19, 1), (20, 1), (21, 1),
164
+ (22, 1), (23, 1), (24, 1), (25, 1);
165
+
166
+ SET FOREIGN_KEY_CHECKS = 1;
167
+ EOSQL
168
 
169
+ echo "Database and tables ready."
170
 
171
  sed -i "s|\${GATEWAY__PRIVATE_TOKEN}|${GATEWAY__PRIVATE_TOKEN}|g" /app/config.yml
172