{"id":22406651,"url":"https://github.com/dvchinx/hexagonal-architecture","last_synced_at":"2026-04-11T08:05:37.556Z","repository":{"id":266571404,"uuid":"898690777","full_name":"dvchinx/Hexagonal-Architecture","owner":"dvchinx","description":"API Rest sencilla para acceder a BD PostgreSQL desarrollada usando Java con Spring y Arquitectura Hexagonal","archived":false,"fork":false,"pushed_at":"2024-12-10T22:10:59.000Z","size":61,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-01T07:19:41.280Z","etag":null,"topics":["hexagonal-architecture","java","postgresql","spring"],"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/dvchinx.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}},"created_at":"2024-12-04T21:14:14.000Z","updated_at":"2024-12-10T22:11:03.000Z","dependencies_parsed_at":"2024-12-05T00:36:47.645Z","dependency_job_id":null,"html_url":"https://github.com/dvchinx/Hexagonal-Architecture","commit_stats":null,"previous_names":["dvchinx/hexagonal-architecture"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dvchinx%2FHexagonal-Architecture","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dvchinx%2FHexagonal-Architecture/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dvchinx%2FHexagonal-Architecture/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dvchinx%2FHexagonal-Architecture/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dvchinx","download_url":"https://codeload.github.com/dvchinx/Hexagonal-Architecture/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245767240,"owners_count":20668822,"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":["hexagonal-architecture","java","postgresql","spring"],"created_at":"2024-12-05T11:09:19.030Z","updated_at":"2026-04-11T08:05:37.527Z","avatar_url":"https://github.com/dvchinx.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📁 Hexagonal-Architecture  \r\n\r\nEste proyecto demuestra el uso de la **Arquitectura Hexagonal** en una aplicación desarrollada en **Java** utilizando **Maven**, **Spring Framework 3.2.2**, **Spring Data JPA**, y una base de datos **PostgreSQL**.  \r\n\r\nEl propósito principal es proporcionar una API REST que permita interactuar con una base de datos llamada `school` y realizar operaciones CRUD en la tabla `students`, la cual contiene información básica de los estudiantes.  \r\n\r\n## Tabla de contenidos  \r\n- [Características](#características)  \r\n- [Arquitectura](#arquitectura)  \r\n- [Requisitos](#requisitos)  \r\n- [Instalación](#instalación)  \r\n- [Endpoints de la API](#endpoints-de-la-api)  \r\n- [Base de Datos](#base-de-datos)  \r\n\r\n---\r\n\r\n## Características  \r\n- Implementación de la **Arquitectura Hexagonal**, favoreciendo la independencia de la lógica de negocio respecto de los frameworks y tecnologías utilizadas.  \r\n- Uso de **Spring Data JPA** para la comunicación con la base de datos PostgreSQL.  \r\n- API RESTful con operaciones CRUD completas para la tabla `students`.  \r\n- Base de datos inicializada con un conjunto de datos predefinido mediante un script SQL.  \r\n- Documentación de la aplicación usando **Swagger**.\r\n\r\n---\r\n\r\n## Arquitectura  \r\nLa **Arquitectura Hexagonal** se utiliza para separar claramente la lógica de negocio del acceso a datos, la exposición de servicios y las interacciones con el exterior.  \r\nEsto asegura un diseño limpio, testeable y desacoplado, lo que facilita la evolución y mantenimiento del proyecto.  \r\n\r\n### Componentes principales:  \r\n- **Aplicación**: Contiene la lógica de negocio.  \r\n- **Adaptadores**:  \r\n  - Entrantes: Controladores REST.  \r\n  - Salientes: Repositorios basados en Spring Data JPA para interactuar con PostgreSQL.  \r\n- **Modelo de Dominio**: Representa las entidades y reglas del negocio.  \r\n\r\n---\r\n\r\n## Requisitos  \r\n- **Java 21**.  \r\n- **Maven 3.8**.  \r\n- **PostgreSQL 14**.  \r\n- **Spring Framework 3.2.2**.  \r\n\r\n---\r\n\r\n## Instalación  \r\n\r\n1. Clona el repositorio:  \r\n   ```bash\r\n   git clone https://github.com/tu-usuario/Hexagonal-Architecture.git\r\n   cd Hexagonal-Architecture\r\n\r\n2. Configura la base de datos en el archivo application.properties:\r\n\r\n    ```\r\n    spring.datasource.url=jdbc:postgresql://localhost:5432/school\r\n    spring.datasource.username=tu_usuario\r\n    spring.datasource.password=tu_contraseña\r\n    spring.jpa.hibernate.ddl-auto=create\r\n    spring.jpa.show-sql=true\r\n3. Ejecuta el proyecto:\r\n\r\n    ```\r\n    mvn spring-boot:run\r\n## Endpoints de la API\r\nEl proyecto expone los siguientes endpoints REST para interactuar con la tabla `students`.  \r\n\r\n| Método HTTP | Endpoint               | Descripción                      |  \r\n|-------------|------------------------|----------------------------------|  \r\n| `GET`       | `/students/v1/api`     | Listar todos los estudiantes     |  \r\n| `GET`       | `/students/v1/api/{id}`| Buscar estudiante por ID         |  \r\n| `POST`      | `/students/v1/api`     | Guardar un estudiante nuevo      |  \r\n| `PUT`       | `/students/v1/api/{id}`| Actualizar un estudiante         |  \r\n| `DELETE`    | `/students/v1/api/{id}`| Eliminar un estudiante           |  \r\n\r\n### Ejemplo de cuerpo para **POST**:  \r\n\r\n  ```\r\n  {\r\n    \"firstname\": \"Luis\",\r\n    \"lastname\": \"Pérez\",\r\n    \"age\": 25,\r\n    \"address\": \"Calle 5\"\r\n  }\r\n  ```\r\n\r\n## Base de Datos  \r\n\r\n### Script de inicialización (`data.sql`):  \r\n```sql\r\nINSERT INTO students (id, firstname, lastname, age, address) VALUES\r\n(1, 'Juan', 'Mendoza', 28, 'Calle 1');\r\n\r\nINSERT INTO students (id, firstname, lastname, age, address) VALUES\r\n(2, 'Pedro', 'Ramirez', 30, 'Calle 2');\r\n\r\nINSERT INTO students (id, firstname, lastname, age, address) VALUES\r\n(3, 'Pepito', 'Jimenez', 10, 'Calle 3');\r\n\r\nINSERT INTO students (id, firstname, lastname, age, address) VALUES\r\n(4, 'Carmen', 'Velasquez', 40, 'Calle 4');\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdvchinx%2Fhexagonal-architecture","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdvchinx%2Fhexagonal-architecture","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdvchinx%2Fhexagonal-architecture/lists"}