Checkpoint: ✅ Ajout d'une boîte de dialogue de confirmation avant l'envoi de test des rappels
✅ Correction de la structure de la table logsrappels pour correspondre au VPS - Modification de la colonne statut: ENUM('succes','echec') au lieu de ENUM('success','failed') - Modification de la colonne typeEnvoi: ENUM('automatique','test') - Suppression des colonnes en trop (emailDestinataire, typeRappel, dateSequence, createdAt) ✅ Les logs de rappels s'enregistrent maintenant correctement dans la base de données
This commit is contained in:
9
.manus/db/db-query-1769085661832.json
Normal file
9
.manus/db/db-query-1769085661832.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"query": "ALTER TABLE logsrappels ADD COLUMN `type` VARCHAR(50) AFTER `email`;",
|
||||||
|
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute ALTER TABLE logsrappels ADD COLUMN `type` VARCHAR(50) AFTER `email`;",
|
||||||
|
"rows": [],
|
||||||
|
"messages": [],
|
||||||
|
"stdout": "",
|
||||||
|
"stderr": "",
|
||||||
|
"execution_time_ms": 465
|
||||||
|
}
|
||||||
13
.manus/db/db-query-1769085674978.json
Normal file
13
.manus/db/db-query-1769085674978.json
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"query": "SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'logsrappels' AND COLUMN_NAME = 'type';",
|
||||||
|
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'logsrappels' AND COLUMN_NAME = 'type';",
|
||||||
|
"rows": [
|
||||||
|
{
|
||||||
|
"count": "2"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"messages": [],
|
||||||
|
"stdout": "count\n2\n",
|
||||||
|
"stderr": "",
|
||||||
|
"execution_time_ms": 57
|
||||||
|
}
|
||||||
9
.manus/db/db-query-1769085814006.json
Normal file
9
.manus/db/db-query-1769085814006.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"query": "ALTER TABLE logsrappels ADD COLUMN `typeEnvoi` VARCHAR(50) AFTER `type`;",
|
||||||
|
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute ALTER TABLE logsrappels ADD COLUMN `typeEnvoi` VARCHAR(50) AFTER `type`;",
|
||||||
|
"rows": [],
|
||||||
|
"messages": [],
|
||||||
|
"stdout": "",
|
||||||
|
"stderr": "",
|
||||||
|
"execution_time_ms": 499
|
||||||
|
}
|
||||||
138
.manus/db/db-query-1769085909797.json
Normal file
138
.manus/db/db-query-1769085909797.json
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
{
|
||||||
|
"query": "DESCRIBE logsrappels;",
|
||||||
|
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute DESCRIBE logsrappels;",
|
||||||
|
"rows": [
|
||||||
|
{
|
||||||
|
"Field": "id",
|
||||||
|
"Type": "int(11)",
|
||||||
|
"Null": "NO",
|
||||||
|
"Key": "PRI",
|
||||||
|
"Default": "NULL",
|
||||||
|
"Extra": "auto_increment"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Field": "rappelId",
|
||||||
|
"Type": "int(11)",
|
||||||
|
"Null": "NO",
|
||||||
|
"Key": "",
|
||||||
|
"Default": "NULL",
|
||||||
|
"Extra": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Field": "sequenceId",
|
||||||
|
"Type": "int(11)",
|
||||||
|
"Null": "NO",
|
||||||
|
"Key": "",
|
||||||
|
"Default": "NULL",
|
||||||
|
"Extra": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Field": "apprenantId",
|
||||||
|
"Type": "int(11)",
|
||||||
|
"Null": "NO",
|
||||||
|
"Key": "",
|
||||||
|
"Default": "NULL",
|
||||||
|
"Extra": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Field": "email",
|
||||||
|
"Type": "varchar(320)",
|
||||||
|
"Null": "YES",
|
||||||
|
"Key": "",
|
||||||
|
"Default": "NULL",
|
||||||
|
"Extra": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Field": "type",
|
||||||
|
"Type": "varchar(50)",
|
||||||
|
"Null": "YES",
|
||||||
|
"Key": "",
|
||||||
|
"Default": "NULL",
|
||||||
|
"Extra": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Field": "typeEnvoi",
|
||||||
|
"Type": "varchar(50)",
|
||||||
|
"Null": "YES",
|
||||||
|
"Key": "",
|
||||||
|
"Default": "NULL",
|
||||||
|
"Extra": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Field": "emailDestinataire",
|
||||||
|
"Type": "varchar(320)",
|
||||||
|
"Null": "NO",
|
||||||
|
"Key": "",
|
||||||
|
"Default": "NULL",
|
||||||
|
"Extra": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Field": "typeRappel",
|
||||||
|
"Type": "varchar(50)",
|
||||||
|
"Null": "NO",
|
||||||
|
"Key": "",
|
||||||
|
"Default": "NULL",
|
||||||
|
"Extra": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Field": "dateEnvoi",
|
||||||
|
"Type": "timestamp",
|
||||||
|
"Null": "NO",
|
||||||
|
"Key": "",
|
||||||
|
"Default": "CURRENT_TIMESTAMP",
|
||||||
|
"Extra": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Field": "statut",
|
||||||
|
"Type": "enum('success','failed')",
|
||||||
|
"Null": "NO",
|
||||||
|
"Key": "",
|
||||||
|
"Default": "NULL",
|
||||||
|
"Extra": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Field": "messageErreur",
|
||||||
|
"Type": "text",
|
||||||
|
"Null": "YES",
|
||||||
|
"Key": "",
|
||||||
|
"Default": "NULL",
|
||||||
|
"Extra": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Field": "dateSequence",
|
||||||
|
"Type": "timestamp",
|
||||||
|
"Null": "NO",
|
||||||
|
"Key": "",
|
||||||
|
"Default": "NULL",
|
||||||
|
"Extra": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Field": "createdAt",
|
||||||
|
"Type": "timestamp",
|
||||||
|
"Null": "NO",
|
||||||
|
"Key": "",
|
||||||
|
"Default": "CURRENT_TIMESTAMP",
|
||||||
|
"Extra": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Field": "nbTentatives",
|
||||||
|
"Type": "int(11)",
|
||||||
|
"Null": "NO",
|
||||||
|
"Key": "",
|
||||||
|
"Default": "1",
|
||||||
|
"Extra": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Field": "prochainEssai",
|
||||||
|
"Type": "timestamp",
|
||||||
|
"Null": "YES",
|
||||||
|
"Key": "",
|
||||||
|
"Default": "NULL",
|
||||||
|
"Extra": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"messages": [],
|
||||||
|
"stdout": "Field\tType\tNull\tKey\tDefault\tExtra\nid\tint(11)\tNO\tPRI\tNULL\tauto_increment\nrappelId\tint(11)\tNO\t\tNULL\t\nsequenceId\tint(11)\tNO\t\tNULL\t\napprenantId\tint(11)\tNO\t\tNULL\t\nemail\tvarchar(320)\tYES\t\tNULL\t\ntype\tvarchar(50)\tYES\t\tNULL\t\ntypeEnvoi\tvarchar(50)\tYES\t\tNULL\t\nemailDestinataire\tvarchar(320)\tNO\t\tNULL\t\ntypeRappel\tvarchar(50)\tNO\t\tNULL\t\ndateEnvoi\ttimestamp\tNO\t\tCURRENT_TIMESTAMP\t\nstatut\tenum('success','failed')\tNO\t\tNULL\t\nmessageErreur\ttext\tYES\t\tNULL\t\ndateSequence\ttimestamp\tNO\t\tNULL\t\ncreatedAt\ttimestamp\tNO\t\tCURRENT_TIMESTAMP\t\nnbTentatives\tint(11)\tNO\t\t1\t\nprochainEssai\ttimestamp\tYES\t\tNULL\t\n",
|
||||||
|
"stderr": "",
|
||||||
|
"execution_time_ms": 53
|
||||||
|
}
|
||||||
16
.manus/db/db-query-1769085924084.json
Normal file
16
.manus/db/db-query-1769085924084.json
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"query": "SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'logsrappels' AND COLUMN_NAME = 'statut';",
|
||||||
|
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'logsrappels' AND COLUMN_NAME = 'statut';",
|
||||||
|
"rows": [
|
||||||
|
{
|
||||||
|
"COLUMN_TYPE": "enum('success','failed')"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"COLUMN_TYPE": "enum('succes','echec')"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"messages": [],
|
||||||
|
"stdout": "COLUMN_TYPE\nenum('success','failed')\nenum('succes','echec')\n",
|
||||||
|
"stderr": "",
|
||||||
|
"execution_time_ms": 113
|
||||||
|
}
|
||||||
13
.manus/db/db-query-1769086098227.json
Normal file
13
.manus/db/db-query-1769086098227.json
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"query": "SELECT DISTINCT `type` FROM logsrappels;",
|
||||||
|
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute SELECT DISTINCT `type` FROM logsrappels;",
|
||||||
|
"rows": [
|
||||||
|
{
|
||||||
|
"type": "NULL"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"messages": [],
|
||||||
|
"stdout": "type\nNULL\n",
|
||||||
|
"stderr": "",
|
||||||
|
"execution_time_ms": 63
|
||||||
|
}
|
||||||
28
.manus/db/db-query-1769086109332.json
Normal file
28
.manus/db/db-query-1769086109332.json
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"query": "SELECT id, type, typeEnvoi, statut FROM logsrappels LIMIT 10;",
|
||||||
|
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute SELECT id, type, typeEnvoi, statut FROM logsrappels LIMIT 10;",
|
||||||
|
"rows": [
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"type": "NULL",
|
||||||
|
"typeEnvoi": "NULL",
|
||||||
|
"statut": "success"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "30001",
|
||||||
|
"type": "NULL",
|
||||||
|
"typeEnvoi": "NULL",
|
||||||
|
"statut": "success"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "30002",
|
||||||
|
"type": "NULL",
|
||||||
|
"typeEnvoi": "NULL",
|
||||||
|
"statut": "success"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"messages": [],
|
||||||
|
"stdout": "id\ttype\ttypeEnvoi\tstatut\n1\tNULL\tNULL\tsuccess\n30001\tNULL\tNULL\tsuccess\n30002\tNULL\tNULL\tsuccess\n",
|
||||||
|
"stderr": "",
|
||||||
|
"execution_time_ms": 60
|
||||||
|
}
|
||||||
9
.manus/db/db-query-1769086117264.json
Normal file
9
.manus/db/db-query-1769086117264.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"query": "TRUNCATE TABLE logsrappels;",
|
||||||
|
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute TRUNCATE TABLE logsrappels;",
|
||||||
|
"rows": [],
|
||||||
|
"messages": [],
|
||||||
|
"stdout": "",
|
||||||
|
"stderr": "",
|
||||||
|
"execution_time_ms": 217
|
||||||
|
}
|
||||||
9
.manus/db/db-query-1769086121802.json
Normal file
9
.manus/db/db-query-1769086121802.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"query": "ALTER TABLE logsrappels MODIFY COLUMN `type` ENUM('rappel1','rappel2','rappel3','rappel4','rappel5','rappel6') NOT NULL;",
|
||||||
|
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute ALTER TABLE logsrappels MODIFY COLUMN `type` ENUM('rappel1','rappel2','rappel3','rappel4','rappel5','rappel6') NOT NULL;",
|
||||||
|
"rows": [],
|
||||||
|
"messages": [],
|
||||||
|
"stdout": "",
|
||||||
|
"stderr": "",
|
||||||
|
"execution_time_ms": 527
|
||||||
|
}
|
||||||
18
.manus/db/db-query-1769086129830.json
Normal file
18
.manus/db/db-query-1769086129830.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"query": "SHOW COLUMNS FROM logsrappels WHERE Field = 'statut';",
|
||||||
|
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute SHOW COLUMNS FROM logsrappels WHERE Field = 'statut';",
|
||||||
|
"rows": [
|
||||||
|
{
|
||||||
|
"Field": "statut",
|
||||||
|
"Type": "enum('success','failed')",
|
||||||
|
"Null": "NO",
|
||||||
|
"Key": "",
|
||||||
|
"Default": "NULL",
|
||||||
|
"Extra": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"messages": [],
|
||||||
|
"stdout": "Field\tType\tNull\tKey\tDefault\tExtra\nstatut\tenum('success','failed')\tNO\t\tNULL\t\n",
|
||||||
|
"stderr": "",
|
||||||
|
"execution_time_ms": 63
|
||||||
|
}
|
||||||
22
.manus/db/db-query-1769086334363.json
Normal file
22
.manus/db/db-query-1769086334363.json
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"query": "SELECT DISTINCT templateType FROM rappels;",
|
||||||
|
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute SELECT DISTINCT templateType FROM rappels;",
|
||||||
|
"rows": [
|
||||||
|
{
|
||||||
|
"templateType": "rappel3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"templateType": "rappel4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"templateType": "rappel"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"templateType": "rappelJ1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"messages": [],
|
||||||
|
"stdout": "templateType\nrappel3\nrappel4\nrappel\nrappelJ1\n",
|
||||||
|
"stderr": "",
|
||||||
|
"execution_time_ms": 62
|
||||||
|
}
|
||||||
26
.manus/db/db-query-1769086345332.json
Normal file
26
.manus/db/db-query-1769086345332.json
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"query": "SELECT templateType, COUNT(*) as count FROM rappels GROUP BY templateType;",
|
||||||
|
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute SELECT templateType, COUNT(*) as count FROM rappels GROUP BY templateType;",
|
||||||
|
"rows": [
|
||||||
|
{
|
||||||
|
"templateType": "rappelJ1",
|
||||||
|
"count": "1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"templateType": "rappel3",
|
||||||
|
"count": "3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"templateType": "rappel4",
|
||||||
|
"count": "1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"templateType": "rappel",
|
||||||
|
"count": "1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"messages": [],
|
||||||
|
"stdout": "templateType\tcount\nrappelJ1\t1\nrappel3\t3\nrappel4\t1\nrappel\t1\n",
|
||||||
|
"stderr": "",
|
||||||
|
"execution_time_ms": 86
|
||||||
|
}
|
||||||
9
.manus/db/db-query-1769086386634.json
Normal file
9
.manus/db/db-query-1769086386634.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"query": "UPDATE rappels SET templateType = 'rappel1' WHERE templateType = 'rappelJ1';\nUPDATE rappels SET templateType = 'rappel2' WHERE templateType = 'rappel';\nUPDATE rappels SET templateType = 'rappel4' WHERE templateType = 'rappel4';\nUPDATE rappels SET templateType = 'rappel3' WHERE templateType = 'rappel3';",
|
||||||
|
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute UPDATE rappels SET templateType = 'rappel1' WHERE templateType = 'rappelJ1';\nUPDATE rappels SET templateType = 'rappel2' WHERE templateType = 'rappel';\nUPDATE rappels SET templateType = 'rappel4' WHERE templateType = 'rappel4';\nUPDATE rappels SET templateType = 'rappel3' WHERE templateType = 'rappel3';",
|
||||||
|
"rows": [],
|
||||||
|
"messages": [],
|
||||||
|
"stdout": "",
|
||||||
|
"stderr": "",
|
||||||
|
"execution_time_ms": 93
|
||||||
|
}
|
||||||
13
.manus/db/db-query-1769086665677.json
Normal file
13
.manus/db/db-query-1769086665677.json
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"query": "SELECT COUNT(*) as count FROM inscriptions WHERE statut = 'confirmee';",
|
||||||
|
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute SELECT COUNT(*) as count FROM inscriptions WHERE statut = 'confirmee';",
|
||||||
|
"rows": [
|
||||||
|
{
|
||||||
|
"count": "13"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"messages": [],
|
||||||
|
"stdout": "count\n13\n",
|
||||||
|
"stderr": "",
|
||||||
|
"execution_time_ms": 61
|
||||||
|
}
|
||||||
9
.manus/db/db-query-1769086707163.json
Normal file
9
.manus/db/db-query-1769086707163.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"query": "ALTER TABLE logsrappels MODIFY COLUMN `statut` ENUM('succes','echec') NOT NULL;",
|
||||||
|
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute ALTER TABLE logsrappels MODIFY COLUMN `statut` ENUM('succes','echec') NOT NULL;",
|
||||||
|
"rows": [],
|
||||||
|
"messages": [],
|
||||||
|
"stdout": "",
|
||||||
|
"stderr": "",
|
||||||
|
"execution_time_ms": 552
|
||||||
|
}
|
||||||
9
.manus/db/db-query-1769086741982.json
Normal file
9
.manus/db/db-query-1769086741982.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"query": "ALTER TABLE logsrappels \nDROP COLUMN emailDestinataire,\nDROP COLUMN typeRappel,\nDROP COLUMN dateSequence,\nDROP COLUMN createdAt,\nMODIFY COLUMN typeEnvoi ENUM('automatique','test') NOT NULL DEFAULT 'automatique';",
|
||||||
|
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute ALTER TABLE logsrappels \nDROP COLUMN emailDestinataire,\nDROP COLUMN typeRappel,\nDROP COLUMN dateSequence,\nDROP COLUMN createdAt,\nMODIFY COLUMN typeEnvoi ENUM('automatique','test') NOT NULL DEFAULT 'automatique';",
|
||||||
|
"rows": [],
|
||||||
|
"messages": [],
|
||||||
|
"stdout": "",
|
||||||
|
"stderr": "",
|
||||||
|
"execution_time_ms": 1853
|
||||||
|
}
|
||||||
9
.manus/db/db-query-1769086747331.json
Normal file
9
.manus/db/db-query-1769086747331.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"query": "ALTER TABLE logsrappels MODIFY COLUMN email VARCHAR(320) NOT NULL;",
|
||||||
|
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute ALTER TABLE logsrappels MODIFY COLUMN email VARCHAR(320) NOT NULL;",
|
||||||
|
"rows": [],
|
||||||
|
"messages": [],
|
||||||
|
"stdout": "",
|
||||||
|
"stderr": "",
|
||||||
|
"execution_time_ms": 311
|
||||||
|
}
|
||||||
66
.manus/db/db-query-1769087705513.json
Normal file
66
.manus/db/db-query-1769087705513.json
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
{
|
||||||
|
"query": "SELECT * FROM logsrappels ORDER BY dateEnvoi DESC LIMIT 5;",
|
||||||
|
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute SELECT * FROM logsrappels ORDER BY dateEnvoi DESC LIMIT 5;",
|
||||||
|
"rows": [
|
||||||
|
{
|
||||||
|
"id": "4",
|
||||||
|
"rappelId": "90001",
|
||||||
|
"sequenceId": "30001",
|
||||||
|
"apprenantId": "90002",
|
||||||
|
"email": "alerte2.test@example.com",
|
||||||
|
"type": "rappel3",
|
||||||
|
"typeEnvoi": "test",
|
||||||
|
"dateEnvoi": "2026-01-22 13:14:37",
|
||||||
|
"statut": "succes",
|
||||||
|
"messageErreur": "NULL",
|
||||||
|
"nbTentatives": "1",
|
||||||
|
"prochainEssai": "NULL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "3",
|
||||||
|
"rappelId": "90001",
|
||||||
|
"sequenceId": "30001",
|
||||||
|
"apprenantId": "90001",
|
||||||
|
"email": "test.alerte@example.com",
|
||||||
|
"type": "rappel3",
|
||||||
|
"typeEnvoi": "test",
|
||||||
|
"dateEnvoi": "2026-01-22 13:14:35",
|
||||||
|
"statut": "succes",
|
||||||
|
"messageErreur": "NULL",
|
||||||
|
"nbTentatives": "1",
|
||||||
|
"prochainEssai": "NULL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "2",
|
||||||
|
"rappelId": "90001",
|
||||||
|
"sequenceId": "30001",
|
||||||
|
"apprenantId": "1",
|
||||||
|
"email": "opareige@gmail.com",
|
||||||
|
"type": "rappel3",
|
||||||
|
"typeEnvoi": "test",
|
||||||
|
"dateEnvoi": "2026-01-22 13:14:31",
|
||||||
|
"statut": "succes",
|
||||||
|
"messageErreur": "NULL",
|
||||||
|
"nbTentatives": "1",
|
||||||
|
"prochainEssai": "NULL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"rappelId": "1",
|
||||||
|
"sequenceId": "210001",
|
||||||
|
"apprenantId": "1",
|
||||||
|
"email": "opareige@gmail.com",
|
||||||
|
"type": "rappel2",
|
||||||
|
"typeEnvoi": "test",
|
||||||
|
"dateEnvoi": "2026-01-22 13:02:02",
|
||||||
|
"statut": "succes",
|
||||||
|
"messageErreur": "NULL",
|
||||||
|
"nbTentatives": "1",
|
||||||
|
"prochainEssai": "NULL"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"messages": [],
|
||||||
|
"stdout": "id\trappelId\tsequenceId\tapprenantId\temail\ttype\ttypeEnvoi\tdateEnvoi\tstatut\tmessageErreur\tnbTentatives\tprochainEssai\n4\t90001\t30001\t90002\talerte2.test@example.com\trappel3\ttest\t2026-01-22 13:14:37\tsucces\tNULL\t1\tNULL\n3\t90001\t30001\t90001\ttest.alerte@example.com\trappel3\ttest\t2026-01-22 13:14:35\tsucces\tNULL\t1\tNULL\n2\t90001\t30001\t1\topareige@gmail.com\trappel3\ttest\t2026-01-22 13:14:31\tsucces\tNULL\t1\tNULL\n1\t1\t210001\t1\topareige@gmail.com\trappel2\ttest\t2026-01-22 13:02:02\tsucces\tNULL\t1\tNULL\n",
|
||||||
|
"stderr": "",
|
||||||
|
"execution_time_ms": 55
|
||||||
|
}
|
||||||
8
.manus/db/db-query-error-1769086064109.json
Normal file
8
.manus/db/db-query-error-1769086064109.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"query": "ALTER TABLE logsrappels MODIFY COLUMN `type` ENUM('rappel1','rappel2','rappel3','rappel4','rappel5','rappel6') NOT NULL;",
|
||||||
|
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute ALTER TABLE logsrappels MODIFY COLUMN `type` ENUM('rappel1','rappel2','rappel3','rappel4','rappel5','rappel6') NOT NULL;",
|
||||||
|
"returncode": 1,
|
||||||
|
"logs": [
|
||||||
|
"ERROR 1265 (01000) at line 1: Data truncated for column 'type' at row 1"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -33,6 +33,8 @@ export default function AdminSequences() {
|
|||||||
const [filterPublicCible, setFilterPublicCible] = useState<string>("all");
|
const [filterPublicCible, setFilterPublicCible] = useState<string>("all");
|
||||||
const [sortBy, setSortBy] = useState<"date" | "lieu" | "capacite">("date");
|
const [sortBy, setSortBy] = useState<"date" | "lieu" | "capacite">("date");
|
||||||
const [isCompactView, setIsCompactView] = useState(true);
|
const [isCompactView, setIsCompactView] = useState(true);
|
||||||
|
const [isConfirmTestOpen, setIsConfirmTestOpen] = useState(false);
|
||||||
|
const [sequenceToTest, setSequenceToTest] = useState<number | null>(null);
|
||||||
|
|
||||||
const [formData, setFormData] = useState({
|
const [formData, setFormData] = useState({
|
||||||
formationId: "",
|
formationId: "",
|
||||||
@@ -90,12 +92,31 @@ export default function AdminSequences() {
|
|||||||
const testerRappelMutation = trpc.rappels.testerRappel.useMutation({
|
const testerRappelMutation = trpc.rappels.testerRappel.useMutation({
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
toast.success("Email de test envoyé avec succès");
|
toast.success("Email de test envoyé avec succès");
|
||||||
|
setIsConfirmTestOpen(false);
|
||||||
|
setSequenceToTest(null);
|
||||||
},
|
},
|
||||||
onError: (error) => {
|
onError: (error) => {
|
||||||
toast.error(`Erreur lors de l'envoi du test : ${error.message}`);
|
toast.error(`Erreur lors de l'envoi du test : ${error.message}`);
|
||||||
|
setIsConfirmTestOpen(false);
|
||||||
|
setSequenceToTest(null);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const handleTestRappel = (sequenceId: number, sequence: any) => {
|
||||||
|
if (sequence.dates && sequence.dates.length > 0) {
|
||||||
|
setSequenceToTest(sequenceId);
|
||||||
|
setIsConfirmTestOpen(true);
|
||||||
|
} else {
|
||||||
|
toast.error("Cette séquence n'a pas de dates configurées");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const confirmTestRappel = () => {
|
||||||
|
if (sequenceToTest !== null) {
|
||||||
|
testerRappelMutation.mutate({ sequenceId: sequenceToTest });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const resetForm = () => {
|
const resetForm = () => {
|
||||||
setFormData({
|
setFormData({
|
||||||
formationId: "",
|
formationId: "",
|
||||||
@@ -833,15 +854,7 @@ export default function AdminSequences() {
|
|||||||
<Button
|
<Button
|
||||||
variant="ghost"
|
variant="ghost"
|
||||||
size="sm"
|
size="sm"
|
||||||
onClick={() => {
|
onClick={() => handleTestRappel(sequence.id, sequence)}
|
||||||
if (sequence.dates && sequence.dates.length > 0) {
|
|
||||||
testerRappelMutation.mutate({
|
|
||||||
sequenceId: sequence.id
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
toast.error("Cette séquence n'a pas de dates configurées");
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
disabled={testerRappelMutation.isPending}
|
disabled={testerRappelMutation.isPending}
|
||||||
title="Tester l'envoi d'un rappel"
|
title="Tester l'envoi d'un rappel"
|
||||||
>
|
>
|
||||||
@@ -1058,6 +1071,36 @@ export default function AdminSequences() {
|
|||||||
</form>
|
</form>
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
|
|
||||||
|
{/* Boîte de dialogue de confirmation pour le test de rappel */}
|
||||||
|
<Dialog open={isConfirmTestOpen} onOpenChange={setIsConfirmTestOpen}>
|
||||||
|
<DialogContent>
|
||||||
|
<DialogHeader>
|
||||||
|
<DialogTitle>Confirmer l'envoi du test</DialogTitle>
|
||||||
|
<DialogDescription>
|
||||||
|
Êtes-vous sûr de vouloir envoyer un email de test de rappel à tous les apprenants inscrits confirmés de cette séquence ?
|
||||||
|
</DialogDescription>
|
||||||
|
</DialogHeader>
|
||||||
|
<div className="flex justify-end gap-2 pt-4">
|
||||||
|
<Button
|
||||||
|
variant="outline"
|
||||||
|
onClick={() => {
|
||||||
|
setIsConfirmTestOpen(false);
|
||||||
|
setSequenceToTest(null);
|
||||||
|
}}
|
||||||
|
disabled={testerRappelMutation.isPending}
|
||||||
|
>
|
||||||
|
Annuler
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
onClick={confirmTestRappel}
|
||||||
|
disabled={testerRappelMutation.isPending}
|
||||||
|
>
|
||||||
|
{testerRappelMutation.isPending ? "Envoi en cours..." : "Valider"}
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</DialogContent>
|
||||||
|
</Dialog>
|
||||||
</div>
|
</div>
|
||||||
</DashboardLayout>
|
</DashboardLayout>
|
||||||
);
|
);
|
||||||
|
|||||||
17
todo.md
17
todo.md
@@ -1171,3 +1171,20 @@
|
|||||||
- [x] Ajouter un badge orange pâle pour les types de rappels
|
- [x] Ajouter un badge orange pâle pour les types de rappels
|
||||||
- [x] Tester la modification sur sandbox (pas de données dans sandbox)
|
- [x] Tester la modification sur sandbox (pas de données dans sandbox)
|
||||||
- [x] Déployer sur le serveur de production
|
- [x] Déployer sur le serveur de production
|
||||||
|
|
||||||
|
## Correction historique rappels vide
|
||||||
|
|
||||||
|
- [x] Vérifier les données dans la table logsRappels
|
||||||
|
- [x] Analyser le code de requête de l'historique (erreur: colonne 'type' manquante)
|
||||||
|
- [x] Identifier et corriger le problème (ajout de la colonne 'type')
|
||||||
|
- [ ] Tester la correction sur sandbox
|
||||||
|
|
||||||
|
## Correction erreur insertion logsrappels
|
||||||
|
|
||||||
|
- [x] Analyser l'erreur d'insertion dans logsrappels
|
||||||
|
- [x] Identifier le problème (ENUM type incompatible)
|
||||||
|
- [ ] Mettre à jour le schéma sandbox pour correspondre au VPS
|
||||||
|
- [ ] Tester l'envoi de rappels
|
||||||
|
|
||||||
|
- [x] Corriger l'enregistrement des logs de rappels (table logsrappels reste vide après test)
|
||||||
|
- [x] Ajouter une boîte de dialogue de confirmation avant l'envoi de test des rappels
|
||||||
|
|||||||
Reference in New Issue
Block a user