From 3351fb3330f3966b6ba77c0274c267eb1f248fbd Mon Sep 17 00:00:00 2001 From: esteban Date: Sat, 15 Aug 2026 21:11:40 -0500 Subject: [PATCH] multiple fixes, create dashboard finish table TODO: middleware and auth --- .gitignore | 3 + .../migration.sql | 14 + prisma/schema.prisma | 5 + src/components/Header.astro | 21 ++ src/components/admin/AdminDashboard.vue | 209 +++++++++++ src/components/admin/SearchableCombobox.vue | 178 +++++++++ src/components/admin/VoluntarioDetail.vue | 284 ++++++++++++++ src/components/admin/VoluntariosTable.vue | 354 ++++++++++++------ src/layouts/MainLayout.astro | 4 +- src/pages/[locale]/admin/dashboard.astro | 30 ++ src/pages/[locale]/admin/index.astro | 50 ++- .../[locale]/admin/voluntario/[numero].astro | 26 ++ src/pages/api/admin/voluntarios.ts | 44 ++- src/pages/api/admin/voluntarios/[numero].ts | 97 +++++ src/pages/api/admin/voluntarios/distinct.ts | 56 +++ src/pages/api/admin/voluntarios/stats.ts | 138 +++++++ src/pages/api/emailPostulacion/send.ts | 5 +- src/pages/api/formulario/send.ts | 17 +- src/pages/api/lib/emailsRegistry.ts | 22 -- src/pages/api/lib/formularioDb.ts | 10 + src/pages/api/voluntarios/count.ts | 4 +- src/styles/global.css | 34 ++ 22 files changed, 1413 insertions(+), 192 deletions(-) create mode 100644 prisma/migrations/20260815180714_add_trigram_fuzzy_indexes/migration.sql create mode 100644 src/components/admin/AdminDashboard.vue create mode 100644 src/components/admin/SearchableCombobox.vue create mode 100644 src/components/admin/VoluntarioDetail.vue create mode 100644 src/pages/[locale]/admin/dashboard.astro create mode 100644 src/pages/[locale]/admin/voluntario/[numero].astro create mode 100644 src/pages/api/admin/voluntarios/[numero].ts create mode 100644 src/pages/api/admin/voluntarios/distinct.ts create mode 100644 src/pages/api/admin/voluntarios/stats.ts delete mode 100644 src/pages/api/lib/emailsRegistry.ts diff --git a/.gitignore b/.gitignore index 3148277..291f341 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,9 @@ opencode/ .opencode/ docs/ +# guía técnica local +docs/GUIA-TECNICA.md + # scripts de migración (locales, no en producción) scripts/migrate-sheets-to-db.ts scripts/seed-form-config.ts diff --git a/prisma/migrations/20260815180714_add_trigram_fuzzy_indexes/migration.sql b/prisma/migrations/20260815180714_add_trigram_fuzzy_indexes/migration.sql new file mode 100644 index 0000000..9295739 --- /dev/null +++ b/prisma/migrations/20260815180714_add_trigram_fuzzy_indexes/migration.sql @@ -0,0 +1,14 @@ +-- CreateIndex +CREATE INDEX "formularios_ciudad_trgm_idx" ON "formularios" USING GIN ("ciudad" gin_trgm_ops); + +-- CreateIndex +CREATE INDEX "formularios_estado_trgm_idx" ON "formularios" USING GIN ("estado" gin_trgm_ops); + +-- CreateIndex +CREATE INDEX "formularios_profesion_trgm_idx" ON "formularios" USING GIN ("profesion" gin_trgm_ops); + +-- CreateIndex +CREATE INDEX "formularios_nivel_academico_trgm_idx" ON "formularios" USING GIN ("nivel_academico" gin_trgm_ops); + +-- CreateIndex +CREATE INDEX "formularios_nacionalidad_trgm_idx" ON "formularios" USING GIN ("nacionalidad" gin_trgm_ops); diff --git a/prisma/schema.prisma b/prisma/schema.prisma index b028508..6358ffc 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -60,6 +60,11 @@ model Formulario { @@index([telefono(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_telefono_trgm_idx") @@index([whatsapp(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_whatsapp_trgm_idx") @@index([documento_nro(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_documento_nro_trgm_idx") + @@index([ciudad(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_ciudad_trgm_idx") + @@index([estado(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_estado_trgm_idx") + @@index([profesion(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_profesion_trgm_idx") + @@index([nivel_academico(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_nivel_academico_trgm_idx") + @@index([nacionalidad(ops: raw("gin_trgm_ops"))], type: Gin, map: "formularios_nacionalidad_trgm_idx") @@map("formularios") } diff --git a/src/components/Header.astro b/src/components/Header.astro index f210430..679de8a 100644 --- a/src/components/Header.astro +++ b/src/components/Header.astro @@ -12,6 +12,7 @@ const tl = createTranslator(Astro.currentLocale); const currentLocale = Astro.currentLocale; const currentPath = Astro.url.pathname; const { locale } = Astro.params; +const isAdmin = currentPath.split("/").includes("admin"); const languages = [ { code: "es", icon: "icon_flag_es", label: "Español" }, @@ -156,6 +157,16 @@ function translatePath(newLocale: string) { )) } + {isAdmin && ( +
  • + + Acceder + +
  • + )}
    + {isAdmin && ( + + )}