https://github.com/ingfranciscastillo/task-manager-api
Una API REST robusta para gestión de tareas construida con Go, Gin, GORM y PostgreSQL.
https://github.com/ingfranciscastillo/task-manager-api
api apis backend backend-api docker gin gin-gonic go goapi golang makefile postgresql restapi
Last synced: about 2 months ago
JSON representation
Una API REST robusta para gestión de tareas construida con Go, Gin, GORM y PostgreSQL.
- Host: GitHub
- URL: https://github.com/ingfranciscastillo/task-manager-api
- Owner: ingfranciscastillo
- Created: 2025-08-20T05:15:43.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2025-08-20T05:27:12.000Z (10 months ago)
- Last Synced: 2025-08-20T07:21:07.925Z (10 months ago)
- Topics: api, apis, backend, backend-api, docker, gin, gin-gonic, go, goapi, golang, makefile, postgresql, restapi
- Language: Go
- Homepage:
- Size: 18.6 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
# 🚀 Task Manager API
Una API REST robusta para gestión de tareas construida con Go, Gin, GORM y PostgreSQL.
## ✨ Características
- **Autenticación JWT** - Sistema seguro de autenticación con tokens
- **CRUD de Tareas** - Crear, leer, actualizar y eliminar tareas
- **Concurrencia** - Endpoint de resumen que utiliza goroutines para consultas paralelas
- **Base de datos** - PostgreSQL con migraciones automáticas
- **Arquitectura limpia** - Código organizado en capas (controllers, services, models)
- **Docker ready** - Contenedorización completa con Docker Compose
- **Hashing seguro** - Contraseñas encriptadas con bcrypt
## 🛠️ Tecnologías Utilizadas
- **Go** - Lenguaje de programación
- **Gin** - Framework web HTTP
- **GORM** - ORM para Go
- **PostgreSQL** - Base de datos relacional
- **JWT** - Autenticación con tokens
- **Docker** - Contenedorización
- **bcrypt** - Hashing de contraseñas
## 📋 Endpoints
### Autenticación
- `POST /auth/register` - Registrar usuario
- `POST /auth/login` - Iniciar sesión
### Tareas (requieren JWT)
- `GET /tasks` - Obtener todas las tareas del usuario
- `POST /tasks` - Crear nueva tarea
- `PUT /tasks/:id` - Actualizar tarea
- `DELETE /tasks/:id` - Eliminar tarea
- `GET /tasks/summary` - Obtener resumen de tareas (con concurrencia)
### Utilidades
- `GET /health` - Health check de la API
## 🚀 Instalación y Ejecución
### Prerrequisitos
- Go
- PostgreSQL
- Docker (opcional)
- Make (opcional)
### Opción 1: Ejecución Local
#### Clonar el repositorio
```bash
git clone https://github.com/ingfranciscastillo/task-manager-api
cd task-manager
```
#### Instalar dependencias
```bash
make deps
# o manualmente: go mod download
```
#### Configurar variables de entorno
```bash
cp .env.example .env
# Editar .env con tus configuraciones
```
#### Crear base de datos
```bash
createdb -U postgres taskmanager
# o usar: make db-create
```
#### Ejecutar la aplicación
```bash
make run
# o manualmente: go run cmd/server/main.go
```
### Opción 2: Docker Compose (Recomendado)
#### Clonar y ejecutar
```bash
git clone https://github.com/ingfranciscastillo/task-manager-api
cd task-manager
docker-compose up -d
```
La aplicación estará disponible en `http://localhost:9090`
## 📖 Uso de la API
### Registrar usuario
```bash
curl -X POST http://localhost:9090/auth/register \
-H "Content-Type: application/json" \
-d '{
"email": "usuario@ejemplo.com",
"password": "password123"
}'
```
### Iniciar sesión
```bash
curl -X POST http://localhost:9090/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "usuario@ejemplo.com",
"password": "password123"
}'
```
### Crear tarea (requiere token)
```bash
curl -X POST http://localhost:9090/tasks \
-H "Content-Type: application/json" \
-H "Authorization: Bearer " \
-d '{
"title": "Mi primera tarea",
"description": "Descripción de la tarea",
"status": "pending"
}'
```
### Obtener tareas
```bash
curl -X GET http://localhost:9090/tasks \
-H "Authorization: Bearer "
```
### Obtener resumen de tareas
```bash
curl -X GET http://localhost:9090/tasks/summary \
-H "Authorization: Bearer "
```
### Actualizar tarea
```bash
curl -X PUT http://localhost:9090/tasks/1 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer " \
-d '{
"title": "Tarea actualizada",
"status": "completed"
}'
```
### Eliminar tarea
```bash
curl -X DELETE http://localhost:9090/tasks/1 \
-H "Authorization: Bearer "
```
## 🏗️ Arquitectura del Proyecto
```
task-manager/
├── cmd/server/ # Punto de entrada de la aplicación
├── internal/
│ ├── controllers/ # Controladores HTTP (manejo de requests)
│ ├── services/ # Lógica de negocio
│ ├── models/ # Modelos de datos (GORM)
│ ├── middleware/ # Middleware (autenticación, CORS, etc.)
│ ├── routes/ # Definición de rutas
│ └── config/ # Configuración (BD, etc.)
├── pkg/utils/ # Utilidades compartidas
└── migrations/ # Migraciones de BD (futuro)
```
## ⚡ Características de Concurrencia
El endpoint `/tasks/summary` implementa concurrencia usando goroutines y channels:
- Ejecuta 3 consultas en paralelo:
- Total de tareas
- Tareas completadas
- Tareas pendientes
- Utiliza `sync.WaitGroup` para sincronización
- Manejo de errores con channels no bloqueantes
## 🔒 Seguridad
- Contraseñas hasheadas con bcrypt (cost 12)
- JWT con expiración (24 horas)
- Middleware de autenticación para rutas protegidas
- Validación de entrada con Gin binding
- CORS configurado para desarrollo
## 🐳 Docker
El proyecto incluye:
- Dockerfile multi-stage para optimizar tamaño
- docker-compose.yml con PostgreSQL
- Health checks para servicios
- Volumes persistentes para datos
## 📝 Variables de Entorno
| Variable | Descripción | Valor por defecto |
| ------------- | ------------------- | ----------------- |
| `DB_HOST` | Host de PostgreSQL | `localhost` |
| `DB_USER` | Usuario de BD | `postgres` |
| `DB_PASSWORD` | Contraseña de BD | `password` |
| `DB_NAME` | Nombre de BD | `taskmanager` |
| `DB_PORT` | Puerto de BD | `5432` |
| `JWT_SECRET` | Secreto para JWT | `requerido` |
| `PORT` | Puerto del servidor | `8080` |
| `GIN_MODE` | Modo de Gin | `debug` |
## 🧪 Testing
```bash
# Ejecutar tests
make test
# Con coverage
go test -cover ./...
# Test específico
go test ./internal/services -v
```
## 📚 Comandos Make Útiles
```bash
make run # Ejecutar servidor
make build # Compilar aplicación
make test # Ejecutar tests
make docker-build # Construir imagen Docker
make db-create # Crear BD
make db-reset # Reiniciar BD
make deps # Instalar dependencias
make help # Ver todos los comandos
```
## 🚨 Troubleshooting
### Error de conexión a BD
- Verificar que PostgreSQL esté ejecutándose
- Revisar variables de entorno en `.env`
- Verificar que la BD `taskmanager` exista
### Error de JWT
- Verificar que `JWT_SECRET` esté configurado
- Verificar formato del token: `Bearer `
### Error de puerto
- Verificar que el puerto 8080 esté libre
- Cambiar `PORT` en `.env` si es necesario
## 🤝 Contribución
1. Fork el proyecto
2. Crear branch de feature (`git checkout -b feature/nueva-caracteristica`)
3. Commit cambios (`git commit -am 'Agregar nueva característica'`)
4. Push al branch (`git push origin feature/nueva-caracteristica`)
5. Crear Pull Request
## 📄 Licencia
Este proyecto está bajo la Licencia MIT - ver el archivo LICENSE para detalles.
## 👨💻 Autor
Desarrollado con ❤️ usando Go