You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
2.8 KiB
Markdown

23 hours ago
# Google Workspace Hub (FastAPI + SQLite)
Proyecto base en **FastAPI** para centralizar acciones con **Google Workspace** (Gmail, Classroom, Calendar/Meet, etc.)
y guardar tokens/usuarios en **SQLite**.
## Qué incluye
- FastAPI listo para correr
- SQLite (con SQLModel)
- Flujo OAuth web:
- `GET /auth/google/start` genera el link de autorización
- `GET /auth/google/callback` recibe el `code` y guarda el token en SQLite
- Ejemplos de endpoints:
- Gmail: `GET /gmail/profile`, `POST /gmail/send`
- Classroom: `GET /classroom/courses`
- Calendar/Meet: `POST /calendar/events` (crea evento con Meet)
> Nota: Para que funcione necesitas crear un **OAuth Client (Web application)** en Google Cloud Console
> y descargar el `client_secret.json`.
---
## Requisitos
- Python 3.11+ (recomendado)
- Una cuenta Google (o Workspace) y un proyecto en Google Cloud con APIs habilitadas:
- Gmail API
- Google Classroom API
- Google Calendar API
## 1) Setup rápido (Windows PowerShell)
```powershell
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
copy .env.example .env
```
## 2) Coloca tus credenciales
1. Crea carpeta: `credentials/`
2. Copia tu archivo OAuth aquí:
- `credentials/client_secret.json`
**No lo subas a git** (ya está en `.gitignore`).
## 3) Configura el .env
Edita `.env` y pon:
- `GOOGLE_REDIRECT_URI` (ej: `http://127.0.0.1:8000/auth/google/callback`)
- `GOOGLE_SCOPES` (ya viene uno útil por defecto)
## 4) Corre el servidor
```bash
uvicorn app.main:app --reload
```
Abre:
- http://127.0.0.1:8000/docs
## 5) Autoriza tu cuenta Google
1. Ve a:
- `GET /auth/google/start`
2. Abre el `auth_url` que te devuelve
3. Acepta permisos
4. Google te redirige a `GOOGLE_REDIRECT_URI`
5. Eso guarda el token en SQLite (`app.db`)
## 6) Probar endpoints
- Gmail profile:
- `GET /gmail/profile?account_email=TU_CORREO@gmail.com`
- Enviar correo:
- `POST /gmail/send?account_email=TU_CORREO@gmail.com`
- Listar cursos:
- `GET /classroom/courses?account_email=TU_CORREO@gmail.com`
- Crear evento con Meet:
- `POST /calendar/events?account_email=TU_CORREO@gmail.com`
---
## Estructura
```
app/
core/ config + DB
google/ auth + clientes Google
routers/ endpoints (oauth, gmail, classroom, calendar)
models.py tablas SQLite
```
## Notas importantes
- Si tu cuenta es Workspace y quieres administrar usuarios/dominio (acciones “de admin”), eso normalmente se hace con
**Service Account + Domain-wide delegation**. Aquí te dejo el proyecto listo para OAuth (usuario) porque es lo más simple
para empezar.
- Si algo “se cae” por permisos: revisa los **scopes** y vuelve a autorizar (borrando el token del usuario en SQLite).
---
## Próximos pasos sugeridos
- Roles/usuarios internos (login propio)
- Cola de tareas (para correos masivos): Celery/RQ/Arq
- Logs en DB (auditoría)