{"id":28554769,"url":"https://github.com/sazardev/go-clean-architecture","last_synced_at":"2025-08-27T17:07:39.129Z","repository":{"id":296040989,"uuid":"991710246","full_name":"sazardev/go-clean-architecture","owner":"sazardev","description":null,"archived":false,"fork":false,"pushed_at":"2025-05-29T23:02:13.000Z","size":133,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-10T05:07:16.410Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sazardev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-28T03:31:12.000Z","updated_at":"2025-05-29T23:02:16.000Z","dependencies_parsed_at":"2025-05-28T18:35:50.728Z","dependency_job_id":"0fc49666-c9a9-44be-80d5-1720b97ebc70","html_url":"https://github.com/sazardev/go-clean-architecture","commit_stats":null,"previous_names":["sazardev/go-clean-architecture"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sazardev/go-clean-architecture","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sazardev%2Fgo-clean-architecture","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sazardev%2Fgo-clean-architecture/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sazardev%2Fgo-clean-architecture/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sazardev%2Fgo-clean-architecture/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sazardev","download_url":"https://codeload.github.com/sazardev/go-clean-architecture/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sazardev%2Fgo-clean-architecture/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264130512,"owners_count":23562041,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-10T05:07:03.908Z","updated_at":"2025-07-07T18:31:36.400Z","avatar_url":"https://github.com/sazardev.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# HR API - Clean Architecture en Go\n\nUn ejemplo ultra-limpio de API REST para Recursos Humanos implementado con Clean Architecture en Go, utilizando las mejores prácticas de desarrollo modular, escalable y mantenible.\n\n## 🏗️ Arquitectura\n\nEste proyecto sigue los principios de **Clean Architecture** con las siguientes capas:\n\n```\ncmd/\n└── server/              # Punto de entrada de la aplicación\n    └── main.go\n\ninternal/\n├── domain/              # Capa de Dominio (Entidades y Contratos)\n│   ├── entity/          # Entidades de negocio\n│   └── repository/      # Interfaces de repositorio\n├── usecase/             # Capa de Casos de Uso (Lógica de Negocio)\n├── infrastructure/      # Capa de Infraestructura\n│   ├── config/          # Configuración de la aplicación\n│   ├── container/       # Inyección de dependencias\n│   ├── database/        # Implementación de persistencia\n│   └── http/            # Capa de presentación HTTP\n│       ├── dto/         # Data Transfer Objects\n│       ├── handler/     # Manejadores HTTP\n│       ├── middleware/  # Middlewares HTTP\n│       └── router/      # Configuración de rutas\n```\n\n## 🚀 Tecnologías Utilizadas\n\n- **Go 1.24+**\n- **Fiber v2** - Framework web ultra-rápido\n- **GORM** - ORM para Go\n- **PostgreSQL** - Base de datos relacional\n- **UUID** - Identificadores únicos\n- **Godotenv** - Manejo de variables de entorno\n\n## 📋 Características\n\n- ✅ **Clean Architecture** - Separación clara de responsabilidades\n- ✅ **Dependency Injection** - Inversión de dependencias\n- ✅ **Repository Pattern** - Abstracción de persistencia\n- ✅ **DTO Pattern** - Transferencia segura de datos\n- ✅ **Error Handling** - Manejo robusto de errores\n- ✅ **Middleware Support** - CORS, Logging, Recovery\n- ✅ **Graceful Shutdown** - Cierre limpio del servidor\n- ✅ **Environment Configuration** - Configuración flexible\n- ✅ **Database Migrations** - Migración automática de esquemas\n\n## 🔧 Configuración\n\n1. **Clonar el repositorio**\n   ```powershell\n   git clone \u003crepository-url\u003e\n   cd go-clean-architecture\n   ```\n\n2. **Configurar variables de entorno**\n   ```powershell\n   Copy-Item .env.example .env\n   ```\n   \n   Editar el archivo `.env` con tus configuraciones:\n   ```env\n   DB_HOST=localhost\n   DB_PORT=5432\n   DB_USER=postgres\n   DB_PASSWORD=tu_password\n   DB_NAME=hr_db\n   DB_SSL_MODE=disable\n   SERVER_PORT=8080\n   ```\n\n3. **Instalar dependencias**\n   ```powershell\n   go mod download\n   ```\n\n4. **Configurar PostgreSQL**\n   ```powershell\n   # Crear base de datos\n   createdb hr_db\n   ```\n\n## 🏃‍♂️ Ejecución\n\n```powershell\n# Ejecutar la aplicación\ngo run cmd/server/main.go\n\n# O compilar y ejecutar\ngo build -o hr-api.exe cmd/server/main.go\n./hr-api.exe\n```\n\n## 📡 API Endpoints\n\n### Health Check\n- `GET /health` - Verificar estado del servidor\n\n### Empleados\n- `POST /api/v1/employees` - Crear empleado\n- `GET /api/v1/employees` - Listar todos los empleados\n- `GET /api/v1/employees/{id}` - Obtener empleado por ID\n- `PUT /api/v1/employees/{id}` - Actualizar empleado\n- `DELETE /api/v1/employees/{id}` - Eliminar empleado\n\n### Ejemplos de Uso\n\n#### Crear Empleado\n```powershell\ncurl -X POST http://localhost:8080/api/v1/employees `\n  -H \"Content-Type: application/json\" `\n  -d '{\"name\": \"Juan Pérez\"}'\n```\n\n#### Obtener Todos los Empleados\n```powershell\ncurl http://localhost:8080/api/v1/employees\n```\n\n#### Obtener Empleado por ID\n```powershell\ncurl http://localhost:8080/api/v1/employees/{uuid}\n```\n\n#### Actualizar Empleado\n```powershell\ncurl -X PUT http://localhost:8080/api/v1/employees/{uuid} `\n  -H \"Content-Type: application/json\" `\n  -d '{\"name\": \"Juan Carlos Pérez\"}'\n```\n\n#### Eliminar Empleado\n```powershell\ncurl -X DELETE http://localhost:8080/api/v1/employees/{uuid}\n```\n\n## 🧪 Testing\n\n```powershell\n# Ejecutar todos los tests\ngo test ./...\n\n# Ejecutar tests con coverage\ngo test -cover ./...\n\n# Ejecutar tests de un paquete específico\ngo test ./internal/usecase/\n```\n\n## 📁 Estructura de Archivos\n\n- **`cmd/`** - Aplicaciones ejecutables\n- **`internal/`** - Código interno de la aplicación\n  - **`domain/`** - Lógica de negocio pura\n  - **`usecase/`** - Casos de uso y reglas de negocio\n  - **`infrastructure/`** - Implementaciones concretas\n- **`go.mod`** - Definición de módulo y dependencias\n\n## 🔄 Flujo de Datos\n\n```\nHTTP Request → Router → Middleware → Handler → UseCase → Repository → Database\n                ↓\nHTTP Response ← DTO ← Handler ← UseCase ← Repository ← Database\n```\n\n## 🎯 Principios Aplicados\n\n- **Single Responsibility** - Cada componente tiene una única responsabilidad\n- **Open/Closed** - Abierto para extensión, cerrado para modificación\n- **Liskov Substitution** - Las interfaces pueden ser sustituidas sin romper el código\n- **Interface Segregation** - Interfaces específicas y cohesivas\n- **Dependency Inversion** - Dependencias hacia abstracciones, no concreciones\n\n## 🚀 Despliegue\n\n### Docker (Opcional)\n```powershell\n# Construir imagen\ndocker build -t hr-api .\n\n# Ejecutar contenedor\ndocker run -p 8080:8080 --env-file .env hr-api\n```\n\n## 📚 Documentación Adicional\n\n- [📐 Arquitectura Detallada](docs/ARCHITECTURE.md) - Explicación completa de la arquitectura\n- [🧪 Ejemplos de Uso](examples/api-demo.ps1) - Scripts de demostración\n- [⚙️ Configuración de Desarrollo](setup-dev.ps1) - Setup automático\n\n## 📝 Licencia\n\nEste proyecto está bajo la Licencia MIT. Ver el archivo `LICENSE` para más detalles.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsazardev%2Fgo-clean-architecture","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsazardev%2Fgo-clean-architecture","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsazardev%2Fgo-clean-architecture/lists"}