Commit Graph
39 Commits
Author SHA1 Message Date
Lizandro GuarnizoandClaude Sonnet 4.6 d3ca99fa1b feat: agregar endpoint /autocomplete en admin Next.js
Proxy a Google Places Autocomplete API:
- Lee la API key de /settings/maps-key del backend
- Acepta params: input, location
- Devuelve { results: [{ formatted_address, place_id }] }
- Headers CORS para permitir acceso desde app.prosapp.co

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-27 08:51:51 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 abc19505ae feat: edicion de usuarios y profesionales desde el admin
Backend: agrega PATCH /users/:id y PATCH /professionals/:id (protegidos).
Admin: pagina de usuario con edicion de nombre/telefono/ciudad/genero;
pagina de profesional con dos secciones editables independientes
(datos personales y perfil profesional).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-27 08:22:40 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 e7afbf6d7b feat: restore global settings with proper fields in settings page
Restores: version Android/iOS, horario soporte, email/telefono soporte,
modo mantenimiento. Organizado en secciones: Ajustes generales,
Integraciones (Maps), Documentos legales.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-27 08:02:29 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 3e1632e776 feat: Google Maps API key management in admin settings
- Backend: GET /settings/maps-key (public) + PATCH /settings/maps (protected)
- Admin: sección para guardar/ver estado de la Maps API key
- Flutter web carga la key dinámicamente desde el backend

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-27 07:59:19 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 39c4301d1b feat: full locations CRUD + legal policies in settings
Backend:
- CRUD completo para countries, regions y cities
- GET /settings/policy/:key — página HTML pública para políticas
- GET/PATCH /settings/policies/:key — admin endpoints protegidos

Admin:
- /locations: árbol interactivo País → Región → Ciudad con add/edit/delete
- /settings: editor de Política de Privacidad y Términos con enlace público copiable
- Sidebar: Ciudades → Ubicaciones

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-27 07:45:53 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 5c740420e9 fix: return JSON body from send-otp endpoint
Flutter client calls jsonDecode on response body — empty void response
throws FormatException even when SMS was sent successfully.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 22:11:29 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 a067e5d260 fix: handle network errors and non-JSON SMS responses as 400 not 500
Catch fetch network errors and non-JSON response bodies to prevent
unhandled exceptions from becoming opaque 500s.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 19:21:18 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 5c3e3c4bc8 fix: handle null in service status select onValueChange
TypeScript error: Select onValueChange passes string | null, not string.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 16:44:49 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 a81a01a06d feat: use real ProsApp logo in admin login and sidebar
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 16:15:05 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 a5c1dd7c33 feat: improve admin login UI and sidebar branding
- Login page: split layout with gradient panel (desktop) + form,
  ProsApp logo mark, feature list, consistent blue brand colors
- Sidebar: replace plain text with logo mark + brand name

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 16:12:56 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 7783cac3fe feat: SMS OTP auth, phone verification gate, admin comments/edit/status pages
Backend:
- Add SmsService + SmsModule: send OTP via u-site.app provider, 5-min TTL
- Auth endpoints: POST /auth/send-otp, POST /auth/phone (login by phone+code),
  POST /auth/verify-phone (link), PATCH /auth/change-password
- is_phone_verified included in JWT token response
- GET /comments (admin, JWT-protected) with author/destination names

Admin:
- Users list: link to detail page per row
- User detail: inline edit form (name, city, phone) with PATCH /users/:id
- Services list: link to detail page per row
- Service detail: status change dropdown (PATCH /services/:id/status)
- New Comments page: summary stats + full table with star ratings
- New SMS settings page: configure API key + send test SMS
- Sidebar: added Comments and SMS entries

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 15:53:32 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 1c2f0ca71a fix: strip leading + from phone number before sending to SMS provider
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 15:26:57 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 6e4cc7436d feat: send FCM push notification on service status change + update docs
- services.module: import NotificationsModule
- services.service: inject NotificationsService, notify the other party
  (user or professional) when service status changes to accepted/denied/
  cancelled/active/completed
- ARQUITECTURA.md: updated to reflect current migration state (all migrated)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 12:49:27 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 130e52ddcd fix: align Flutter API repositories with backend routes (Fase 3 prep)
- api_service_repository: use correct endpoints (services/me, services/professional,
  professional/requests, professional/history, professional/calendar, etc.)
  instead of generic /services?userId= query params
- api_service_repository: fix status conversion string↔enum, createService DTO fields,
  handle paginated {data,meta} response, stub setProfessionalScored/setUserScored
  (backend sets these automatically on POST /comments)
- api_score_repository: fix comment endpoints to /comments/user/:id and
  /comments/professional/:id; handle paginated response
- api_professional_repository + api_user_repository: handle paginated {data,meta}
  response from GET /professionals

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 18:23:14 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 e3e9509222 fix: pin PORT per service to isolate from global Coolify env var
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 09:23:05 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 d0e70dff0a fix: map admin port 5173:3001 to match Next.js runtime port
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 09:18:51 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 5d263aab96 fix: map backend port 3001:3001 to match app runtime port
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 09:15:02 -05:00
Lizandro GuarnizoandClaude Sonnet 4.6 34ee7be531 fix: correct EXPOSE port to 3001 to match app runtime port
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 08:54:20 -05:00
Lizandro Guarnizo ac7fe193cd hola 2026-06-17 07:47:29 -05:00
Lizandro GuarnizoandClaude Haiku 4.5 3fa0f5bd5f fix: add Tailwind CSS config to enable style compilation
Tailwind CSS 4 requires explicit content paths configuration. Without this,
the @tailwindcss/postcss plugin cannot find files to process, preventing
styles from being generated for the admin interface.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-16 22:28:40 -05:00
Lizandro Guarnizo e4799a8bf7 style: apply ProsApp brand color #26b5f0 to admin theme 2026-06-04 08:58:16 -05:00
Lizandro Guarnizo 668aa152bf fix: add admin.prosapp.co to CORS allowed origins 2026-06-04 08:46:18 -05:00
Lizandro Guarnizo 86a14713e0 fix: make root layout a server component with globals.css import and html/body tags 2026-06-04 08:27:27 -05:00
Lizandro Guarnizo 86d5ea9704 fix: allow /login route to bypass AuthGuard so login page renders instead of blank 2026-06-04 08:24:28 -05:00
Lizandro Guarnizo 558647414d fix admin Dockerfile: pass NEXT_PUBLIC_API_URL as build arg 2026-06-03 23:46:57 -05:00
Lizandro Guarnizo 25c04ced2f add JWT_SECRET fallback, remove env_file from compose 2026-06-03 23:04:01 -05:00
Lizandro Guarnizo 83508a22f3 make FCM_SERVER_KEY optional in NotificationsService 2026-06-03 23:01:52 -05:00
Lizandro Guarnizo 15794ba073 use @prisma/adapter-pg with PrismaClient (required by prisma v7) 2026-06-03 22:58:06 -05:00
Lizandro Guarnizo 04f701e664 fix prisma schema: add engineType=library (avoids client mode requiring adapter) 2026-06-03 22:53:22 -05:00
Lizandro Guarnizo 41bcf31428 fix PrismaClient constructor: pass empty object (required prisma v7) 2026-06-03 22:51:03 -05:00
Lizandro Guarnizo 5db8b0a131 fix PrismaService: pass datasources to PrismaClient constructor (required in v7) 2026-06-03 22:49:06 -05:00
Lizandro Guarnizo 741263735b remove stale tsbuildinfo from git, add to gitignore 2026-06-03 22:46:38 -05:00
Lizandro Guarnizo 8fe15f0528 switch npm ci to npm install for Docker compat 2026-06-03 22:43:48 -05:00
Lizandro Guarnizo 47ad790f79 fix Dockerfiles: remove deprecated flags, add .dockerignore 2026-06-03 22:42:29 -05:00
Lizandro Guarnizo ae6bd1f53a fix Dockerfiles: update npm to latest before ci 2026-06-03 22:40:10 -05:00
Lizandro Guarnizo afc096d552 full project: admin panel, backend modules, docs 2026-06-03 22:11:01 -05:00
Lizandro Guarnizo 1635723035 add Dockerfiles and docker-compose for Coolify deploy 2026-06-03 22:10:28 -05:00
Lizandro Guarnizo 3c5d81603a feat: backend API NestJS + Prisma + JWT auth + todos los módulos 2026-06-01 21:23:04 -05:00
Lizandro Guarnizo b31f778b3b chore: init prosapp migration project with task tracking 2026-06-01 21:06:22 -05:00