Skip to content

feat(calendar): integracion real con Google Calendar via service account

gonzalo.ortiz.f requested to merge feat/google-calendar-integracion into develop

Resumen

Reemplaza la implementacion stub de GoogleCalendarServiceImpl por una integracion real con la API de Google Calendar usando service account. Mantiene el mock como fallback para tests y entornos sin credenciales.

Cambios principales

  • Dependencias: google-api-services-calendar, google-auth-library-oauth2-http, google-http-client-jackson2.
  • Configuracion: nueva clase GoogleCalendarProperties con variables de entorno (GOOGLE_CALENDAR_*). Por defecto la integracion esta deshabilitada, se activa con GOOGLE_CALENDAR_ENABLED=true.
  • Persistencia: nueva entidad ReminderCalendarEvent y tabla reminder_calendar_events (migracion V23) que mapea cada recordatorio con su googleEventId.
  • Servicio real: GoogleCalendarServiceImpl con @ConditionalOnProperty(google.calendar.enabled=true) que implementa syncReminder (insert o update segun exista mapeo) y deleteReminder. Carga credenciales desde el path configurado y maneja el scope CALENDAR.
  • Mock restringido: MockCalendarServiceImpl ahora usa @ConditionalOnProperty(google.calendar.enabled=false, matchIfMissing=true), asi queda como fallback para tests y desarrollo local.
  • Errores: nueva excepcion CalendarSyncException mapeada a HTTP 502 en GlobalExceptionHandler, con log de error y mensaje legible.

Tests

  • GoogleCalendarServiceImplTest: cubre inicializacion fallida, sync sin cliente, delete sin mapeo, delete sin inicializar.
  • CalendarServiceBeanSelectionTest: verifica con ApplicationContextRunner que la bean correcta se carga segun la propiedad.
  • Suite completa: 161 tests verdes (155 anteriores + 6 nuevos).

Como probar la integracion real

  1. Crear service account en Google Cloud Console con la API de Calendar habilitada.
  2. Descargar el JSON de credenciales.
  3. Compartir el calendario destino con el email del service account.
  4. Configurar las variables de entorno:
    GOOGLE_CALENDAR_ENABLED=true
    GOOGLE_CALENDAR_CREDENTIALS_PATH=/ruta/al/credentials.json
    GOOGLE_CALENDAR_ID=primary
  5. Crear un recordatorio desde Swagger. El log deberia mostrar "Evento de Calendar creado para recordatorio ..." en lugar de "[MOCK]".

Notas

  • La integracion usa credenciales server-to-server, no requiere OAuth de usuario.
  • El calendario destino debe ser compartido con el service account con permiso de escritura.
  • Si GOOGLE_CALENDAR_ENABLED=false o no se define, todo sigue funcionando con el mock como antes.

Merge request reports

Loading