Skip to content

Commit c14f037

Browse files
committed
feat ✨: add improvements in README file
Signed-off-by: joalvarez <[email protected]>
1 parent d75897c commit c14f037

File tree

2 files changed

+1303
-1
lines changed

2 files changed

+1303
-1
lines changed

README.md

Lines changed: 205 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,205 @@
1-
# Simple Example API
1+
# Simple Example API
2+
3+
Una API de ejemplo desarrollada con Spring Boot que demuestra una arquitectura por capas con patrones genéricos y generación automática de código CRUD.
4+
5+
## Tecnologías utilizadas
6+
7+
- **Java 21** - Lenguaje de programación
8+
- **Spring Boot 3.5.2** - Framework principal
9+
- **PostgreSQL** - Base de datos
10+
- **Liquibase** - Migraciones de base de datos
11+
- **SpringDoc OpenAPI** - Documentación automática de API
12+
- **Gradle** - Gestión de dependencias y construcción
13+
- **Docker & Docker Compose** - Containerización
14+
- **PMD** - Análisis estático de código
15+
16+
## Requisitos previos
17+
18+
- Java 21+
19+
- PostgreSQL
20+
- Docker (opcional)
21+
- [Task](https://github.com/go-task/task) - Para comandos automatizados
22+
- [Bun](https://bun.sh/) - Para generadores de código
23+
24+
## Configuración inicial
25+
26+
### 1. Clonar el repositorio
27+
```bash
28+
git clone https://github.com/joalvarezdev/simple-example-api
29+
cd simple-example-api
30+
```
31+
32+
### 2. Configurar variables de entorno
33+
Crear un archivo `.env` en la raíz del proyecto:
34+
```bash
35+
DATABASE_URL=jdbc:postgresql://localhost:5432/simple-example-api
36+
DATABASE_USERNAME=postgres
37+
DATABASE_PASSWORD=postgres
38+
CONTEXT_PATH=/
39+
```
40+
41+
### 3. Configurar base de datos PostgreSQL
42+
```bash
43+
# Usando Docker
44+
docker run --name postgres-simple-api -e POSTGRES_DB=simple-example-api -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -p 5432:5432 -d postgres:15
45+
```
46+
o
47+
```bash
48+
# Usando Docker Compose
49+
docker compose up -d
50+
```
51+
52+
## Cómo ejecutar
53+
54+
### Usando Gradle directamente
55+
```bash
56+
./gradlew bootRun
57+
```
58+
59+
### Usando Task (recomendado)
60+
```bash
61+
# Construir la aplicación
62+
task build
63+
64+
# Construir imagen Docker
65+
task docker-build APP_NAME=simple-example-api
66+
67+
# Generar código CRUD
68+
task entity
69+
```
70+
71+
La aplicación estará disponible en: http://localhost:8090
72+
73+
## Generación de código
74+
75+
Este proyecto incluye un sistema de generadores de código usando Plop.js que permite crear componentes CRUD completos.
76+
77+
### Plantillas disponibles:
78+
- **Controller** - Controladores REST
79+
- **Service** - Servicios de negocio
80+
- **DAO** - Objetos de acceso a datos
81+
- **DTO** - Objetos de transferencia de datos
82+
- **Domain** - Entidades de dominio
83+
- **Repository** - Repositorios JPA
84+
- **Mapper** - Mapeadores entre capas
85+
86+
### Uso:
87+
```bash
88+
task entity
89+
# Seguir las instrucciones interactivas para generar el código
90+
```
91+
92+
## Estructura del proyecto
93+
94+
```
95+
src/main/java/com/joalvarez/simpleexampleapi/
96+
├── config/ # Configuraciones de Spring
97+
├── controller/ # Controladores REST
98+
│ └── general/ # Controladores base y genéricos
99+
├── data/ # Capa de datos
100+
│ ├── dao/ # Data Access Objects
101+
│ ├── dto/ # Data Transfer Objects
102+
│ ├── mapper/ # Mapeadores entre capas
103+
│ └── repository/ # Repositorios JPA
104+
├── exception/ # Manejo de excepciones
105+
├── service/ # Servicios de negocio
106+
│ └── general/ # Servicios base y genéricos
107+
└── shared/ # Utilidades compartidas
108+
```
109+
110+
### Patrones arquitectónicos:
111+
- **Arquitectura por capas** (Controller → Service → Repository)
112+
- **Clases genéricas** para operaciones CRUD comunes
113+
- **Clases base** para funcionalidad compartida
114+
- **DTOs** para transferencia de datos
115+
- **Mappers** para conversión entre capas
116+
117+
## Documentación de API
118+
119+
### Swagger UI
120+
Una vez que la aplicación esté ejecutándose, la documentación interactiva estará disponible en:
121+
- **Swagger UI**: http://localhost:8090/swagger-ui/index.html
122+
- **OpenAPI JSON**: http://localhost:8090/v3/api-docs
123+
124+
### Endpoints principales
125+
- `GET /actuator/health` - Health check
126+
- Endpoints adicionales según las entidades generadas
127+
128+
## Base de datos
129+
130+
### Configuración
131+
- **Driver**: PostgreSQL
132+
- **Puerto por defecto**: 5432
133+
- **Base de datos**: simple-example-api
134+
135+
### Migraciones con Liquibase
136+
```bash
137+
# Las migraciones están en: src/main/resources/database/
138+
# Configuración en: liquibase-changelog.yml
139+
```
140+
141+
**Nota**: Liquibase está deshabilitado por defecto (`enabled: false`). Para habilitar migraciones automáticas, cambiar a `enabled: true` en `application.yml`.
142+
143+
## Docker
144+
145+
### Construcción manual
146+
```bash
147+
# Construir JAR
148+
./gradlew clean build
149+
150+
# Construir imagen
151+
docker build -t joalvarezdev/simple-example-api:latest --build-arg ARTIFACT_NAME=simple-example-api.jar .
152+
```
153+
154+
### Usando Task
155+
```bash
156+
# Construir imagen
157+
task docker-build APP_NAME=simple-example-api
158+
159+
# Construir y subir al registry
160+
task docker-push APP_NAME=simple-example-api
161+
```
162+
163+
### Docker Compose
164+
```bash
165+
docker-compose up -d
166+
```
167+
168+
## Calidad de código
169+
170+
### PMD (análisis estático)
171+
```bash
172+
./gradlew pmdMain pmdTest
173+
```
174+
175+
Las reglas de PMD están configuradas en `linters/pmd-ruleset.xml`.
176+
177+
## Testing
178+
179+
### Ejecutar tests
180+
```bash
181+
./gradlew test
182+
```
183+
## Configuración adicional
184+
185+
### Variables de configuración importantes:
186+
- `server.port` - Puerto del servidor (por defecto: 8090)
187+
- `spring.datasource.*` - Configuración de base de datos
188+
- `springdoc.swagger-ui.*` - Configuración de Swagger
189+
190+
## Desarrollo
191+
192+
### Comandos útiles
193+
```bash
194+
# Instalar dependencias de Node (para generadores)
195+
task node
196+
197+
# Limpiar y construir
198+
./gradlew clean build
199+
200+
# Ejecutar con perfil específico
201+
./gradlew bootRun --args='--spring.profiles.active=dev'
202+
203+
# Ver nombre del proyecto
204+
./gradlew printProjectName
205+
```

0 commit comments

Comments
 (0)