Repository navigation
Expand file tree
/
Copy pathdb-updates.php
More file actions
135 lines (111 loc) · 6.32 KB
/
Copy pathdb-updates.php
File metadata and controls
135 lines (111 loc) · 6.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?php
use function MapasCulturais\__table_exists;
use function MapasCulturais\__try;
return [
'conectaente: cria as tabelas de ente federado' => function () {
if (!__table_exists('conectaente_federative_entity')) {
__try("CREATE SEQUENCE conectaente_federative_entity_id_seq INCREMENT BY 1 MINVALUE 1 START 1");
__try("CREATE TABLE conectaente_federative_entity (
id INT NOT NULL DEFAULT nextval('conectaente_federative_entity_id_seq'),
name VARCHAR(255) NOT NULL,
document VARCHAR(14) NOT NULL,
token TEXT NOT NULL,
status SMALLINT NOT NULL DEFAULT 1,
create_timestamp TIMESTAMP(0) NOT NULL,
update_timestamp TIMESTAMP(0) NULL,
PRIMARY KEY(id)
)");
__try("CREATE UNIQUE INDEX unq_conectaente_federative_entity_document ON conectaente_federative_entity (document)");
__try("CREATE UNIQUE INDEX unq_conectaente_federative_entity_token ON conectaente_federative_entity (token)");
}
if (!__table_exists('conectaente_federative_entity_seal')) {
__try("CREATE SEQUENCE conectaente_federative_entity_seal_id_seq INCREMENT BY 1 MINVALUE 1 START 1");
__try("CREATE TABLE conectaente_federative_entity_seal (
id INT NOT NULL DEFAULT nextval('conectaente_federative_entity_seal_id_seq'),
federative_entity_id INT NOT NULL,
seal_id INT NOT NULL,
create_timestamp TIMESTAMP(0) NOT NULL,
PRIMARY KEY(id)
)");
__try("CREATE UNIQUE INDEX unq_conectaente_fe_seal_seal_id ON conectaente_federative_entity_seal (seal_id)");
__try("CREATE UNIQUE INDEX unq_conectaente_fe_seal_entity_id ON conectaente_federative_entity_seal (federative_entity_id)");
__try("ALTER TABLE conectaente_federative_entity_seal
ADD CONSTRAINT fk_conectaente_fe_seal_entity
FOREIGN KEY (federative_entity_id) REFERENCES conectaente_federative_entity(id) ON DELETE CASCADE");
__try("ALTER TABLE conectaente_federative_entity_seal
ADD CONSTRAINT fk_conectaente_fe_seal_seal
FOREIGN KEY (seal_id) REFERENCES seal(id) ON DELETE CASCADE");
}
},
'conectaente: um selo por ente federado' => function () {
__try("DROP INDEX IF EXISTS idx_conectaente_fe_seal_entity_id");
__try("CREATE UNIQUE INDEX IF NOT EXISTS unq_conectaente_fe_seal_entity_id ON conectaente_federative_entity_seal (federative_entity_id)");
},
'conectaente: lixeira do Ente Federado' => function () {
__try("ALTER TABLE conectaente_federative_entity ADD COLUMN IF NOT EXISTS status SMALLINT NOT NULL DEFAULT 1");
},
'conectaente: copia os metadados do PAR para as chaves prefixadas' => function () {
\ConectaEnte\Migrations\CopyLegacyParKeys::run();
},
'conectaente: cria as tabelas de histórico de envio' => function () {
if (!__table_exists('conectaente_log')) {
__try("CREATE SEQUENCE conectaente_log_id_seq INCREMENT BY 1 MINVALUE 1 START 1");
// opportunity_id sem chave estrangeira: excluir a oportunidade não pode apagar nem travar o histórico
__try("CREATE TABLE conectaente_log (
id INT NOT NULL DEFAULT nextval('conectaente_log_id_seq'),
uuid VARCHAR(36) NOT NULL,
opportunity_id INT NOT NULL,
par_edital_id INT NULL,
outcome VARCHAR(20) NOT NULL,
triggered_by_user_id INT NULL,
create_timestamp TIMESTAMP(0) NOT NULL,
update_timestamp TIMESTAMP(0) NULL,
PRIMARY KEY(id)
)");
__try("CREATE UNIQUE INDEX unq_conectaente_log_uuid ON conectaente_log (uuid)");
__try("CREATE INDEX idx_conectaente_log_opportunity ON conectaente_log (opportunity_id, create_timestamp DESC)");
__try("ALTER TABLE conectaente_log
ADD CONSTRAINT fk_conectaente_log_user
FOREIGN KEY (triggered_by_user_id) REFERENCES usr(id) ON DELETE SET NULL");
}
if (!__table_exists('conectaente_log_attempt')) {
__try("CREATE SEQUENCE conectaente_log_attempt_id_seq INCREMENT BY 1 MINVALUE 1 START 1");
__try("CREATE TABLE conectaente_log_attempt (
id INT NOT NULL DEFAULT nextval('conectaente_log_attempt_id_seq'),
log_id INT NOT NULL,
attempt SMALLINT NOT NULL,
max_attempts SMALLINT NOT NULL,
endpoint TEXT NOT NULL,
http_method VARCHAR(10) NOT NULL,
http_status SMALLINT NULL,
request_id VARCHAR(255) NULL,
request_payload TEXT NULL,
response_body TEXT NULL,
response_headers TEXT NULL,
error_message TEXT NULL,
outcome VARCHAR(20) NOT NULL,
sent_at TIMESTAMP(0) NOT NULL,
duration_ms INT NULL,
PRIMARY KEY(id)
)");
__try("CREATE INDEX idx_conectaente_log_attempt_log ON conectaente_log_attempt (log_id, id)");
__try("ALTER TABLE conectaente_log_attempt
ADD CONSTRAINT fk_conectaente_log_attempt_log
FOREIGN KEY (log_id) REFERENCES conectaente_log(id) ON DELETE CASCADE");
}
},
'conectaente: a tentativa do histórico volta a apontar para o envio' => function () {
if (__table_exists('conectaente_log_attempt')) {
__try("ALTER TABLE conectaente_log_attempt DROP CONSTRAINT IF EXISTS fk_conectaente_log_attempt_log");
__try("ALTER TABLE conectaente_log_attempt
ADD CONSTRAINT fk_conectaente_log_attempt_log
FOREIGN KEY (log_id) REFERENCES conectaente_log(id) ON DELETE CASCADE");
}
},
// a limpeza vem antes do índice, no mesmo passo: índice único não nasce com acervo duplicado
'conectaente: o edital do CultBR passa a pertencer a uma oportunidade só' => function () {
\ConectaEnte\Migrations\ClaimParEditalId::run();
__try("CREATE UNIQUE INDEX IF NOT EXISTS unq_conectaente_par_edital_id
ON opportunity_meta (value) WHERE key = 'conectaente_parEditalId'");
},
];