CodeF@ctory - Caso 15 - Plataforma de Reservas de Servicios - Microservicio de Catálogo de Servicios.
Gestión de servicios ofrecidos por proveedores
- Java 17
- Spring Boot 3.5.13
- Spring Security (Autenticación y autorización)
- Spring Data JPA (Persistencia)
- JWT (JSON Web Tokens para autenticación)
- MapStruct (Mapeo entre entidades y DTOs)
- Lombok (Reducción de código boilerplate)
- Maven (Gestión de dependencias)
- Git (Control de versiones)
- GitHub (Repositorio remoto)
- Postman (Pruebas de APIs)
- SonarCloud (Análisis de calidad de código)
Antes de ejecutar el proyecto, asegúrate de tener instalado:
- JDK 17 o superior
- Maven 3.8+
- Oracle Database o PostgreSQL
- Git
git clone https://github.com/Isa-Bedoya-UdeA/Reservas-MS-Catalog-Service
cd Reservas-MS-Catalog-ServiceCopia el archivo .env.example a .env:
cp .env.example .envEdita el archivo .env con tus credenciales de Supabase:
# SPRING PROFILE
SPRING_PROFILE=dev
# DATABASE CONFIG - SUPABASE (Transaction Pooler - IPv4 compatible)
DB_URL=jdbc:postgresql://aws-1-us-west-2.pooler.supabase.com:6543/postgres?sslmode=require&prepareThreshold=0
DB_USER=postgres.[TU-PROJECT-REF]
DB_PASSWORD=[TU-CONTRASEÑA-DE-SUPABASE]
# EXTERNAL SERVICES URLs
SERVICES_AUTH_URL=http://localhost:8081Genera un JWT_SECRET seguro:
openssl rand -base64 64Agrega el JWT_SECRET generado a tu archivo .env:
JWT_SECRET=[TU-JWT-SECRET-SEGURA]
JWT_EXPIRATION=86400000IMPORTANTE: El JWT_SECRET debe ser el mismo en todos los microservicios.
# Limpia el target y compila
Remove-Item -Recurse -Force target -ErrorAction SilentlyContinue
mvn clean compilemvn spring-boot:runIMPORTANTE: Para el correcto funcionamiento, debes tener corriendo ambos microservicios:
- Auth Service (puerto 8081)
- Catalog Service (puerto 8082)
La aplicación estará disponible en: http://localhost:8082
Reservas-MS-Catalog-Service/
├── src/
│ ├── main/
│ │ ├── java/com/codefactory/reservasmscatalogservice/
│ │ │ ├── client/ # Feign Clients para comunicación entre microservicios
│ │ │ ├── config/ # Configuración de Spring (Security, JWT, etc.)
│ │ │ ├── controller/ # Controladores REST (Category, ServiceOffering, Health)
│ │ │ ├── dto/ # Data Transfer Objects (Request y Response)
│ │ │ ├── entity/ # Entidades JPA (ServiceCategory, ServiceOffering)
│ │ │ ├── exception/ # Excepciones personalizadas y manejo global
│ │ │ ├── mapper/ # Mapeadores (MapStruct) entre entidades y DTOs
│ │ │ ├── repository/ # Repositorios Spring Data JPA
│ │ │ ├── security/ # Seguridad (JWT filter, user details)
│ │ │ ├── service/ # Interfaces de servicios
│ │ │ └── service/impl/ # Implementaciones de servicios
│ │ └── resources/
│ │ ├── application.properties
│ │ ├── application-dev.properties
│ │ └── application-prod.properties
│ └── test/
│ ├── java/ # Tests unitarios y de integración
│ └── resources/
│ └── application-test.properties
├── docs/ # Diagramas y documentación arquitectónica
├── .env.example # Plantilla de variables de entorno
├── .env # Variables de entorno (no versionado)
├── pom.xml # Configuración de Maven
└── README.md
GET /api/: Health Check - Retorna estado del servicioGET /api/version: Version Check - Retorna versión del servicio
GET /api/catalog/categories: Obtener todas las categorías (incluyendo inactivas) (requiere ROLE_ADMIN)GET /api/catalog/categories/active: Obtener solo categorías activas (público) - Usado por proveedoresGET /api/catalog/categories/{id}: Obtener categoría por ID (público)POST /api/catalog/categories: Crear nueva categoría (requiere ROLE_ADMIN)PUT /api/catalog/categories/{id}: Actualizar categoría (requiere ROLE_ADMIN)DELETE /api/catalog/categories/{id}: Desactivar categoría (requiere ROLE_ADMIN)PATCH /api/catalog/categories/{id}/activate: Activar categoría (requiere ROLE_ADMIN)
POST /api/catalog/services: Crear servicio ofertado (requiere ROLE_PROVEEDOR)
- ServiceCategory: Entidad que representa categorías de servicios (ej: Belleza, Salud, Educación)
- ServiceOffering: Entidad que representa servicios específicos ofrecidos por proveedores
- ServiceOffering está asociada a una ServiceCategory (cada servicio pertenece a una categoría)
- ServiceOffering está asociada a un Provider (cada servicio es ofrecido por un proveedor específico)
[docs/domain-model.png] (Pendiente)
[docs/architecture-c4.png] (Pendiente)
[docs/components.png] (Pendiente)
[docs/sequence.png] (Pendiente)
[docs/adrs/] (Pendiente)
Ruta de acceso: http://localhost:8082/swagger-ui/index.html#/
[docs/environment-variables.md] (Pendiente)
Para ver las pruebas detalladas de la API, consulta el archivo docs/PruebasPostman.md.

