{"id":24310300,"url":"https://github.com/bryandejesusrt/restfull-api-clients","last_synced_at":"2026-02-20T18:06:33.909Z","repository":{"id":272442045,"uuid":"916405866","full_name":"bryandejesusrt/restfull-api-clients","owner":"bryandejesusrt","description":"API RESTful para gestión de clientes con integración a base de datos PostgreSQL y servicio externo de países. 🚀","archived":false,"fork":false,"pushed_at":"2025-01-16T22:18:11.000Z","size":43,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-11T02:59:27.924Z","etag":null,"topics":["java","junit5","maven","postgresql","quarkus","restful-api","swagger-ui","unit-testing"],"latest_commit_sha":null,"homepage":"","language":"Java","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/bryandejesusrt.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-01-14T03:01:51.000Z","updated_at":"2025-02-28T02:24:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"b697b8b9-58bb-40de-9b15-cda78ccfda98","html_url":"https://github.com/bryandejesusrt/restfull-api-clients","commit_stats":null,"previous_names":["bryandejesusrt/restfull-api-clients"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bryandejesusrt/restfull-api-clients","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryandejesusrt%2Frestfull-api-clients","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryandejesusrt%2Frestfull-api-clients/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryandejesusrt%2Frestfull-api-clients/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryandejesusrt%2Frestfull-api-clients/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bryandejesusrt","download_url":"https://codeload.github.com/bryandejesusrt/restfull-api-clients/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryandejesusrt%2Frestfull-api-clients/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29659757,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T16:33:43.953Z","status":"ssl_error","status_checked_at":"2026-02-20T16:33:43.598Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["java","junit5","maven","postgresql","quarkus","restful-api","swagger-ui","unit-testing"],"created_at":"2025-01-17T06:10:53.783Z","updated_at":"2026-02-20T18:06:33.879Z","avatar_url":"https://github.com/bryandejesusrt.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# API RestFull con Quarkus ⚙️\n_He desarrollado este proyecto teniendo en cuenta un entorno bancario, escribiendo código diseñado para ser robusto, seguro y escalable._\n\n## Introducción\n\nEsta RestFull ha sido desarrollada **Java** utilizando el framework **Quarkus**, que ofrece un rendimiento óptimo y facilidad de desarrollo para aplicaciones modernas. El proyecto utiliza **PostgreSQL** como base de datos para la persistencia de datos y está contenedorizado con **Docker**, facilitando su despliegue en cualquier entorno.\n\n\n## 1. 🎉 Finalidad del Proyecto\n\n**El objetivo principal** es **proveer una solución robusta, escalable y eficiente** para manejar información de clientes y obtener recursos de otros servicios (como información de países) dentro de una organización. Este proyecto aprovecha las ventajas de **Quarkus** y sigue una **arquitectura moderna basada en contenedores**, implementando **buenas prácticas de desarrollo** y garantizando una **arquitectura limpia y modular**.\n\n🔑 **Características destacadas:**\n- API **RESTful** que gestiona clientes de manera eficiente con funcionalidades **CRUD completas**.\n- Soporte para **consultas personalizadas**, como búsquedas por país.\n- **Validaciones avanzadas** (Bean Validation y personalizadas) para garantizar la **integridad de los datos**.\n  \n\n## 2. 📚 Estructura del Proyecto\n\nEl proyecto sigue una **estructura modular y escalable**, diseñada para garantizar la **mantenibilidad** y **extensibilidad** del código. A continuación, se detalla su organización:\n\n```\nsrc/\n  main/\n    java/com/banreservas/\n      client/        # Componentes relacionados con la lógica del cliente\n      controller/    # Controladores para manejar las peticiones HTTP\n      dto/           # Objetos de transferencia de datos\n      entity/        # Entidades del modelo de datos\n      exception/     # Manejo centralizado de excepciones\n      mapper/        # Mapeo entre entidades y DTOs\n      repository/    # Clases para acceder a la base de datos\n      service/       # Lógica del negocio\n\n  test/\n    java/com/banreservas/\n      unit/          # Pruebas unitarias\n      integration/   # Pruebas de integración\n```\n  \n## 3. 🏛️ Arquitectura\n\nEl diseño del sistema sigue una **arquitectura en capas** clara, que asegura la separación de responsabilidades y permite un mantenimiento sencillo y escalable.\n\n\n\n```mermaid\n\ngraph TB\n\nClient[Cliente HTTP] --\u003e Controller[Controller Layer]\n\nController --\u003e Service[Service Layer]\n\nService --\u003e Repository[Repository Layer]\n\nService --\u003e CountryClient[Countries External Client]\n\nRepository --\u003e Database[(Database)]\n\nCountryClient --\u003e RestCountries[RestCountries API]\n\nsubgraph Layers\n\nController --\u003e RequestValidator[Request Validator]\n\nService --\u003e DTOMapper[DTO Mapper]\n\nService --\u003e BusinessValidator[Business Validator]\n\nend\n\n\n\n```\n\n\nsubgraph Security\nAuthFilter[Auth Filter] --\u003e Controller\nRateLimiter[Rate Limiter] --\u003e Controller\nend \n\n\nsubgraph Monitoring\nHealthCheck[Health Check] --\u003e Service\nMetrics[Metrics] --\u003e Service\nend\n\n## 4. 🔍 Tecnologías Utilizadas\n\n-  **Quarkus**: Framework para construir aplicaciones modernas en Java.\n\n-  **PostgreSQL**: Base de datos relacional para la persistencia de datos.\n\n-  **Panache Repository**: Simplifica el acceso a la base de datos mediante patrones comunes de repositorio.\n\n-  **Docker**: Contenedorización de la aplicación.\n\n-  **JUnit**: Framework para pruebas unitarias.\n\n-  **Maven**: Sistema de gestión de dependencias y construcción del proyecto.\n  \n\n\n## 5. 🔧 Uso de Panache Repository\n\nEl **Panache Repository** facilita el acceso a la base de datos al proporcionar métodos predefinidos como `persist()`, `findById()`, y `delete()`, permitiendo concentrarnos en la lógica del negocio sin preocuparnos por los detalles del acceso a datos. Esto mejora la productividad y garantiza buenas prácticas.\n\n---\n\n🌐 **Buenas Prácticas Implementadas**\n\n- **Separación de responsabilidades**: Controladores, servicios y repositorios bien definidos.\n- **Control centralizado de excepciones**: Garantiza respuestas consistentes y amigables para el usuario.\n- **Validaciones robustas**: Aseguran la calidad e integridad de los datos ingresados.\n- **Uso de DTOs**: Aisla las entidades del negocio de las solicitudes/respuestas de la API.\n- **Versionamiento de la API**: Uso de rutas como `/api/v1` para facilitar futuras ampliaciones.\n- **Endpoints RESTful**: Diseñados para ser intuitivos y seguir estándares REST.\n- **CamelCase en parámetros y minúsculas en rutas**: Para consistencia.\n\n📊 **Diagrama de Componentes**\n\nEste diagrama ilustra cómo interactúan los diferentes componentes del sistema, organizados en capas clave.\n\n```mermaid\ngraph TB\n\nsubgraph \"Capa de Presentación\"\nA[Cliente HTTP]\nB[ClientResource Controller]\nend\n\nsubgraph \"Capa de Negocio\"\nC[ClientService]\nD[CountryService]\nend\n\nsubgraph \"Capa de Datos\"\nE[ClientRepository]\nF[ClientMapper]\nend\n\nsubgraph \"Servicios Externos\"\nG[CountryClient]\nend\n\nsubgraph \"Base de Datos\"\nH[(PostgreSQL DB)]\nend\n\nsubgraph \"DTOs\"\nI[ClientRequest]\nJ[ClientResponse]\nK[CountryResponse]\nend\n\nsubgraph \"Entidades\"\nL[Client Entity]\nend\n\nA --\u003e|HTTP Requests| B\nB --\u003e|Delega| C\nC --\u003e|Usa| D\nC --\u003e|Persiste| E\nC --\u003e|Mapea| F\nD --\u003e|Consume| G\nE --\u003e|Accede| H\nF --\u003e|Convierte| I\nF --\u003e|Produce| J\nG --\u003e|Deserializa| K\nF --\u003e|Mapea| L\nE --\u003e|Opera con| L\n```\n  \n\n## 6. ☢️Requisitos Previos\n\n\u003e - Java Development Kit (JDK) 17\n\u003e \n\u003e - Quarkus 3.17.6\n\u003e \n\u003e - Docker Desktop\n\u003e \n\u003e - PostgreSQL\n\u003e \n\u003e - REST Assured (pruebas)\n\u003e \n\u003e - Mockito (pruebas unitarias)\n\n \n\n## 7. 🚀 Configuración y Despliegue\n\n1️⃣ **Clonar el repositorio:**\n\n```bash\n\ngit clone https://github.com/bryandejesusrt/restfull-api-clients.git\n\ncd restfull-api-clients\n\n```\n\n2️⃣ **Configurar variables de entorno**\n\nCrea un archivo .env en el directorio raíz y define las siguientes variables que son necesarias para la configuración del proyecto:\n\n \n``` env\n\nDATABASE_URL=jdbc:postgresql://localhost:5432/client_db\n\nDATABASE_USER=admin\n\nDATABASE_PASSWORD=admin123\n\nSERVER_PORT=8080\n\nCOUNTRIES_API_URL=https://restcountries.com/v3.1/all\n\n```\n\n3️⃣ **Compilar la Aplicación**\n\nUsa Maven para compilar el proyecto y generar el archivo JAR:\n\n```bash\n./mvnw clean package\n```\n\n4️⃣ **Configurar Docker**\n\na) _Levantar la Base de Datos con Docker Compose_\n\nEl proyecto incluye un archivo `docker-compose.yml` para configurar la base de datos PostgreSQL. Levanta los servicios con:\n\n```bash\ndocker-compose up -d\n```\nEsto iniciará los contenedores necesarios, como la base de datos y otros servicios requeridos.\n\nb) _Verificar Contenedores Activos_\nAsegúrate de que los contenedores estén corriendo correctamente:\n```bash\ndocker ps\n```\n\n# 8. 🏃‍➡️Ejecución del Proyecto\n\n5️⃣ **Ejecutar la Aplicación**\n\nUna vez que la base de datos esté corriendo, primero instala las dependenias y luego ejecuta la aplicación con:\n```bash\n  mvn clean install\n  mvn clean compile quarkus:dev\n```\nEsto iniciará el servidor en el puerto configurado en las variables de entorno (por defecto, 8080).\n\n## como iniciar la imagen de docker\n\n\n6️⃣ **Acceder a la API**\n\nPuedes probar los endpoints de la API accediendo a:\n\n**Documentación de la API**:\n\n`http://localhost:8080/documentation`\n\n\n\n## 9. 🔄 Métodos de la API\n\n🔄 Métodos de la API\n\nLa API cuenta con los siguientes recursos principales:\n\n- `/clients`:\n\n- `GET /clients`: Obtener todos los clientes.\n\n- `GET /client/clientId`: Obtener un cliente por su identificador\n\n- `POST /clients`: Crear un nuevo cliente.\n\n- `PUT /clients/{id}`: Actualizar un cliente existente.\n\n- `DELETE /clients/{id}`: Eliminar un cliente.\n\n- `/countries`:\n\n- `GET /country/{countryCode}`: Obtener todos los países de un pais especifico. **(código ISO 3166:DO)**\n\n\n\n### 🌐 Flujo de Peticiones HTTP (Endpoints)\n\nA continuación, presentamos el flujo general de una petición HTTP dentro del sistema, desde el cliente hasta la respuesta:\n\n``` mermaid\ngraph TD\n\nA[Cliente HTTP] --\u003e|1. HTTP Request| B(ClientResource)\n\nB --\u003e|2. Valida Request| C{Validación}\n\nC --\u003e|2.1 Error| D[Return 400]\n\nC --\u003e|2.2 Válido| E[ClientService]\n\nE --\u003e|3. Procesa| F{Tipo Operación}\n\nF --\u003e|3.1 Create| G[Crear Cliente]\n\nF --\u003e|3.2 Update| H[Actualizar Cliente]\n\nF --\u003e|3.3 Get| I[Obtener Cliente]\n\nF --\u003e|3.4 Delete| J[Eliminar Cliente]\n\nG --\u003e|4. Mapeo| K[ClientMapper]\n\nH --\u003e|4. Mapeo| K\n\nI --\u003e|4. Mapeo| K\n\nK --\u003e|5. Persistencia| L[ClientRepository]\n\nL --\u003e|6. DB Operation| M[(Database)]\n\nG --\u003e|7. País| N[CountryService]\n\nN --\u003e|8. API Call| O[CountryClient]\n\nO --\u003e|9. External Request| P[REST Countries API]\n\nsubgraph \"Validaciones\"\n\nQ[Bean Validation]\n\nR[Custom Validations]\n\nend\n\nC --\u003e|2.3 Valida| Q\n\nC --\u003e|2.4 Valida| R\n\n```\n**Estandarización**\n\n - Rutas en minúsculas.\n - Parámetros en camelCase.\n\n---\n\n## 10. 🧪 Ejecución de Pruebas\n\nPara ejecutar las pruebas del proyecto, utiliza:\n\n```bash\nmnv test\n```\n\n 1. Las pruebas incluyen:\n - Unitarias: Validación de métodos individuales.\n - Integración: Verificación de endpoints y conexión con la base de\n   datos.\n\n## Metricas\n\n\n## 11. 📄 Agradecimientos\n\nEste proyecto fue desarrollado como parte de un proceso de reclutamiento y para mi también de aprendizaje en Quarkus y refleja mi pasión por construir soluciones tecnológicas modernas y eficientes.\n\nAgradezco a todas las personas y recursos que contribuyeron a este aprendizaje, incluyendo cursos y documentación oficial😅.\n\n![image](https://github.com/user-attachments/assets/d9007724-bae1-41a7-8146-8e9ecbbf50b8)\n\n\n---\n\n## 12. 📜 Licencia\n\nEste proyecto está licenciado bajo la **licencia MIT.** Esto significa que puedes usar, modificar y distribuir el código de este proyecto libremente, siempre y cuando se incluya la atribución correspondiente al autor original.\n\nConsulta el archivo **LICENSE** para más detalles.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbryandejesusrt%2Frestfull-api-clients","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbryandejesusrt%2Frestfull-api-clients","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbryandejesusrt%2Frestfull-api-clients/lists"}