Este proyecto es una API backend construida con Gleam 1.10.0, diseñada como un viaje de aprendizaje hacia la programación funcional. Sirve como ejemplo práctico para desarrolladores que están familiarizados con la teoría de la programación funcional pero no tienen experiencia práctica.
Esta es una API REST que implementa funcionalidad básica de gestión de usuarios utilizando principios de programación funcional en Gleam. El proyecto demuestra el uso práctico de:
- Funciones puras
- Estructuras de datos inmutables
- Pattern matching
- Tipos Result para manejo de errores
- Seguridad de tipos
gleam_stdlib(>= 0.44.0) - Librería estándar de Gleamwisp(>= 1.6.0) - Framework web para Gleamgleam_http(>= 4.0.0) - Tipos y utilidades HTTPmist(>= 4.0.7) - Implementación del servidor HTTP
pog(>= 3.2.0) - Cliente PostgreSQL para Gleamsquirrel(>= 3.0.3) - Generador de queries SQL (SQL Builder)gleam_json(>= 2.3.0) - Codificación/decodificación JSON
gwt(>= 2.0.0) - Implementación de JWT (JSON Web Token)antigone(>= 1.1.0) - Operaciones criptográficas
envoy(>= 1.0.2) - Gestión de variables de entornoyouid(>= 1.4.0) - Generación de UUIDsdot_env(>= 1.2.0) - Carga de archivos .envcors_builder(>= 2.0.4) - Middleware CORSbirl(>= 1.8.0) - Utilidades para manejo de fechas
Endpoints implementados actualmente:
POST /user
Descripción: Registrar un nuevo usuario
Cuerpo: { "username": string, "email": string, "password": string }
POST /user/find/email
Descripción: Buscar usuario por email
Cuerpo: { "email": string }
POST /user/find/username
Descripción: Buscar usuario por nombre de usuario
Cuerpo: { "username": string }
GET /
Descripción: Verificación de estado de la API
Respuesta: { "status": "Ok", "message": "API Working" }
- Registro básico de usuarios
- Búsqueda de usuarios por email y username
- Implementación de middleware JWT
- Autenticación de usuarios
- Rutas protegidas
- Gestión de perfiles de usuario
- Funcionalidad de restablecimiento de contraseña
Este proyecto enfatiza varios conceptos clave de programación funcional:
-
Funciones Puras: La mayoría de las operaciones están implementadas como funciones puras, asegurando un comportamiento predecible y facilitando las pruebas.
-
Tipos Result: En lugar de lanzar excepciones, usamos el tipo Result de Gleam para manejar errores de manera elegante. Ejemplo:
pub fn find_user_by_email(db, email) -> Result(User, String)
-
Pattern Matching: Extensivamente usado en el manejo de rutas y procesamiento de datos. Ejemplo en el router:
case path, req.method { [], Get -> handle_root() ["user"], Post -> handle_form_submission(req, db) ... }
-
Seguridad de Tipos: Aprovechando el sistema de tipos de Gleam para prevenir errores en tiempo de ejecución.
- Instalar Gleam 1.10.0
- Clonar este repositorio
- Copiar
.env.examplea.envy configurar las variables de entorno - Ejecutar PostgreSQL (se proporciona archivo docker-compose)
- Iniciar el servidor con
gleam run
Este es un proyecto de aprendizaje que intencionalmente comienza simple, introduciendo gradualmente más conceptos de programación funcional a medida que crece. La implementación actual se centra en operaciones CRUD básicas y manejo adecuado de errores, con características de autenticación y autorización planificadas para futuras actualizaciones.