# proyecto_estructura.md — Estructura del proyecto > Árbol de archivos, rutas HTTP/API y dependencias entre módulos. > Actualizar al agregar o mover archivos ("actualizar proyecto"). --- ## Árbol de archivos ``` app_compartir/ ├── .agente/ │ ├── ideas.md │ ├── infraestructura.md │ ├── objetivos.md │ ├── proyecto_errores.md │ ├── proyecto_estructura.md │ └── proyecto_memoria.md ├── internal/ │ ├── auth/ │ │ └── auth.go # Manejo de sesiones, WebControl y Google OAuth2 │ ├── cleaner/ │ │ └── cleaner.go # Worker periódico de purga (24h para guest) │ ├── config/ │ │ └── config.go # Carga de configuración y .env │ ├── db/ │ │ └── db.go # SQLite DAL, esquema y consultas │ ├── handlers/ │ │ └── handlers.go # Rutas HTTP, endpoints API y renderizado HTML │ ├── models/ │ │ └── models.go # Estructuras de datos (Share, User, Session) │ └── storage/ │ └── storage.go # Slugs aleatorios, sniffing MIME y guardado en disco ├── web/ │ └── templates/ │ ├── base.html # Layout común con Tailwind CSS y FontAwesome │ ├── expired.html # Mensaje informativo de archivo guest caducado (24h) │ ├── index.html # Drag & Drop, pegar portapapeles y compartir texto │ ├── login.html # Login con WebControl y Google OAuth │ ├── my_shares.html # Panel de usuario con sus archivos permanentes │ └── viewer.html # Visor universal (imágenes, video, audio, PDF, código) ├── .env.example ├── .gitignore ├── desplegar.sh # Script de compilación y despliegue (máquina dev) ├── init.sh # Script ejecutor local en el servidor ├── servers.conf.example # Plantilla de credenciales SSH para despliegue ├── go.mod ├── go.sum ├── main.go # Punto de entrada y servidor HTTP Go ├── main_test.go # Tests unitarios/integración (purga 24h vs permanencia) ├── README.md └── agents.md # Punto de entrada del agente ``` --- ## Rutas HTTP / Endpoints | Método | Ruta | Handler | Descripción | |---|---|---|---| | `GET` | `/` | `h.Index` | Página principal de subida (drag & drop, portapapeles, texto) | | `POST` | `/api/upload` | `h.Upload` | Subida de archivos multipart | | `POST` | `/api/share-text` | `h.ShareText` | Subida rápida de notas, textos o código | | `GET` | `/v/{id}` | `h.View` | Visor universal de contenidos compartidos | | `GET` | `/d/{id}` | `h.Download` | Descarga directa forzada (`attachment`) | | `GET` | `/raw/{id}` | `h.Raw` | Visualización directa (`inline`) | | `GET` | `/qr/{id}` | `h.QR` | Generador dinámico de código QR en PNG | | `DELETE`| `/api/shares/{id}` | `h.DeleteShare` | Eliminación de archivo (usuario propietario) | | `GET` | `/login` | `h.LoginView` | Pantalla de inicio de sesión | | `POST` | `/login/webcontrol`| `h.WebControlLogin` | Autenticación con credenciales WebControl | | `GET` | `/auth/google` | `h.GoogleLogin` | Redirección OAuth a Google | | `GET` | `/auth/google/callback` | `h.GoogleCallback` | Retorno de autenticación OAuth Google | | `GET` | `/logout` | `h.Logout` | Cierre de sesión y limpieza de cookie | | `GET` | `/mis-archivos` | `h.MyShares` | Panel con archivos permanentes del usuario | --- ## Dependencias entre módulos - `main.go` orquesta `config`, `db`, `cleaner`, `auth` y `handlers`. - `handlers` utiliza `storage` para guardar archivos y `qrcode` para generar códigos de acceso móvil. - `cleaner` consulta periódicamente `db` y elimina archivos físicos de `data/uploads/` para shares `is_guest = true` con `expires_at <= NOW()`. Las cuentas registradas son ignoradas por el cleaner.