diff --git a/.manus/db/db-query-1780479772854.json b/.manus/db/db-query-1780479772854.json new file mode 100644 index 0000000..d7af242 --- /dev/null +++ b/.manus/db/db-query-1780479772854.json @@ -0,0 +1,26 @@ +{ + "query": "SELECT id, name, username, email, role, isActive FROM local_users 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.63b125a8f9ca --database VepzDyqR8YkJNcqpZ729Bw --execute SELECT id, name, username, email, role, isActive FROM local_users LIMIT 10;", + "rows": [ + { + "id": "30001", + "name": "Lea Peyriere", + "username": "l.peyriere@itinova.org", + "email": "l.peyriere@itinova.org", + "role": "admin", + "isActive": "1" + }, + { + "id": "60001", + "name": "Admin Itinova", + "username": "adminItinova", + "email": "o.pareige@itinova.org", + "role": "admin", + "isActive": "1" + } + ], + "messages": [], + "stdout": "id\tname\tusername\temail\trole\tisActive\n30001\tLea Peyriere\tl.peyriere@itinova.org\tl.peyriere@itinova.org\tadmin\t1\n60001\tAdmin Itinova\tadminItinova\to.pareige@itinova.org\tadmin\t1\n", + "stderr": "", + "execution_time_ms": 782 +} \ No newline at end of file diff --git a/.manus/db/db-query-1780479848637.json b/.manus/db/db-query-1780479848637.json new file mode 100644 index 0000000..30f42b2 --- /dev/null +++ b/.manus/db/db-query-1780479848637.json @@ -0,0 +1,19 @@ +{ + "query": "SELECT id, name, username, email, role, isActive, LEFT(passwordHash, 20) as hashPreview FROM local_users WHERE username = 'adminItinova' OR username = 'admin';", + "command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.63b125a8f9ca --database VepzDyqR8YkJNcqpZ729Bw --execute SELECT id, name, username, email, role, isActive, LEFT(passwordHash, 20) as hashPreview FROM local_users WHERE username = 'adminItinova' OR username = 'admin';", + "rows": [ + { + "id": "60001", + "name": "Admin Itinova", + "username": "adminItinova", + "email": "o.pareige@itinova.org", + "role": "admin", + "isActive": "1", + "hashPreview": "$2b$12$BFswq4nzwOXHx" + } + ], + "messages": [], + "stdout": "id\tname\tusername\temail\trole\tisActive\thashPreview\n60001\tAdmin Itinova\tadminItinova\to.pareige@itinova.org\tadmin\t1\t$2b$12$BFswq4nzwOXHx\n", + "stderr": "", + "execution_time_ms": 587 +} \ No newline at end of file diff --git a/.manus/db/db-query-1780479869310.json b/.manus/db/db-query-1780479869310.json new file mode 100644 index 0000000..2771d71 --- /dev/null +++ b/.manus/db/db-query-1780479869310.json @@ -0,0 +1,9 @@ +{ + "query": "UPDATE local_users SET passwordHash = '$2b$12$Huuk0HibUISWtZhv92SbOuEPghB91OI84pKCCQIPhwOEENFGlYM.O' WHERE username = 'adminItinova';", + "command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.63b125a8f9ca --database VepzDyqR8YkJNcqpZ729Bw --execute UPDATE local_users SET passwordHash = '$2b$12$Huuk0HibUISWtZhv92SbOuEPghB91OI84pKCCQIPhwOEENFGlYM.O' WHERE username = 'adminItinova';", + "rows": [], + "messages": [], + "stdout": "", + "stderr": "", + "execution_time_ms": 572 +} \ No newline at end of file diff --git a/.manus/db/db-query-1781254479053.json b/.manus/db/db-query-1781254479053.json new file mode 100644 index 0000000..d193347 --- /dev/null +++ b/.manus/db/db-query-1781254479053.json @@ -0,0 +1,40 @@ +{ + "query": "SHOW TABLES;", + "command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.63b125a8f9ca --database VepzDyqR8YkJNcqpZ729Bw --execute SHOW TABLES;", + "rows": [ + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "__drizzle_migrations" + }, + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "aap_items" + }, + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "app_settings" + }, + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "ideas" + }, + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "import_logs" + }, + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "local_users" + }, + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "rss_feeds" + }, + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "rss_settings" + }, + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "users" + }, + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "veille_items" + } + ], + "messages": [], + "stdout": "Tables_in_VepzDyqR8YkJNcqpZ729Bw\n__drizzle_migrations\naap_items\napp_settings\nideas\nimport_logs\nlocal_users\nrss_feeds\nrss_settings\nusers\nveille_items\n", + "stderr": "", + "execution_time_ms": 657 +} \ No newline at end of file diff --git a/.manus/db/db-query-1781254483164.json b/.manus/db/db-query-1781254483164.json new file mode 100644 index 0000000..a7c019b --- /dev/null +++ b/.manus/db/db-query-1781254483164.json @@ -0,0 +1,17 @@ +{ + "query": "SELECT id, username, email, role, isActive FROM local_users WHERE username = 'adminItinova';", + "command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.63b125a8f9ca --database VepzDyqR8YkJNcqpZ729Bw --execute SELECT id, username, email, role, isActive FROM local_users WHERE username = 'adminItinova';", + "rows": [ + { + "id": "60001", + "username": "adminItinova", + "email": "o.pareige@itinova.org", + "role": "admin", + "isActive": "1" + } + ], + "messages": [], + "stdout": "id\tusername\temail\trole\tisActive\n60001\tadminItinova\to.pareige@itinova.org\tadmin\t1\n", + "stderr": "", + "execution_time_ms": 583 +} \ No newline at end of file diff --git a/.manus/db/db-query-1781254543292.json b/.manus/db/db-query-1781254543292.json new file mode 100644 index 0000000..7cab40e --- /dev/null +++ b/.manus/db/db-query-1781254543292.json @@ -0,0 +1,9 @@ +{ + "query": "UPDATE local_users SET passwordHash = '$2b$10$W14yZYJ7KMTgDqb683LiY.bHpCbFouYaBTp09ASM41uYVROvVpirS' WHERE username = 'adminItinova';", + "command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.63b125a8f9ca --database VepzDyqR8YkJNcqpZ729Bw --execute UPDATE local_users SET passwordHash = '$2b$10$W14yZYJ7KMTgDqb683LiY.bHpCbFouYaBTp09ASM41uYVROvVpirS' WHERE username = 'adminItinova';", + "rows": [], + "messages": [], + "stdout": "", + "stderr": "", + "execution_time_ms": 583 +} \ No newline at end of file diff --git a/.manus/db/db-query-error-1781254472873.json b/.manus/db/db-query-error-1781254472873.json new file mode 100644 index 0000000..2f20a7b --- /dev/null +++ b/.manus/db/db-query-error-1781254472873.json @@ -0,0 +1,8 @@ +{ + "query": "SELECT id, username, email, role, isActive FROM user WHERE username = 'adminItinova';", + "command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.63b125a8f9ca --database VepzDyqR8YkJNcqpZ729Bw --execute SELECT id, username, email, role, isActive FROM user WHERE username = 'adminItinova';", + "returncode": 1, + "logs": [ + "ERROR 1146 (42S02) at line 1: Table 'vepzdyqr8ykjncqpz729bw.user' doesn't exist" + ] +} \ No newline at end of file diff --git a/client/public/__manus__/version.json b/client/public/__manus__/version.json index e35c21e..73f0f37 100644 --- a/client/public/__manus__/version.json +++ b/client/public/__manus__/version.json @@ -1,4 +1,4 @@ { - "version": "dab72037", - "timestamp": 1780479118639 + "version": "69e54e0a", + "timestamp": 1781255928989 } \ No newline at end of file diff --git a/client/src/pages/AAPDashboard.tsx b/client/src/pages/AAPDashboard.tsx index e348c00..79cf569 100644 --- a/client/src/pages/AAPDashboard.tsx +++ b/client/src/pages/AAPDashboard.tsx @@ -49,6 +49,10 @@ interface AAPItem { datePublication: Date | null; lien: string | null; importedAt: Date; + iaRelevant: boolean | null; + iaCategorie: string | null; + iaClassifiedBy: "ia" | "rules" | null; + iaReason: string | null; } const CAT_COLORS: Record = { @@ -294,14 +298,14 @@ function AAPListView({ items }: { items: AAPItem[] }) { {items.map((item, idx) => ( - + {idx + 1}

{item.titre}

- - {item.categorie} + + {item.iaCategorie || item.categorie} {item.region || "—"} @@ -330,11 +334,11 @@ function AAPGridView({ items }: { items: AAPItem[] }) { return (
{items.map((item) => ( - + )} - {/* Analyse IA */} - {item.iaClassifiedBy && ( -
-
- -

Analyse par l'IA

-
-
-
- - - {item.iaClassifiedBy === "ia" ? "Classé par l'IA" : "Classé par règles"} - - {item.iaRelevant === false && ( - Hors périmètre médico-social - )} - {item.iaRelevant === true && item.iaCategorie && ( - {item.iaCategorie} - )} -
- {item.iaReason && ( -

"{item.iaReason}"

- )} -
-
- )} {/* Lien externe */} {item.lien && ( @@ -278,15 +237,6 @@ export default function VeilleDashboard() { const { user } = useLocalAuth(); const isAdmin = user?.role === "admin"; const utils = trpc.useUtils(); - const reclassifyMutation = trpc.veille.reclassifyWithAI.useMutation({ - onSuccess: (data) => { - toast.success(`Classification IA terminée — ${data.processed} article(s) traité(s)${data.errors > 0 ? `, ${data.errors} erreur(s)` : ""}`); - utils.veille.list.invalidate(); - }, - onError: (err) => { - toast.error(`Erreur lors de la classification IA : ${err.message}`); - }, - }); const purgeMutation = trpc.veille.purge.useMutation({ onSuccess: (data) => { toast.success(`Purge effectuée — ${data.deleted} entrée(s) supprimée(s)`); @@ -369,17 +319,6 @@ export default function VeilleDashboard() { {isAdmin && ( <> -