Overview
The Catalog Service (jea-catalogo) manages the product catalog including products, categories, inventory, and product images. It provides the core master data for the sales system. Database: MySQL (catalogo-ms)
Port: Dynamic (configured via Eureka)
Core Entities
Producto
Product master data with inventory tracking. Location:jea-catalogo/src/main/java/com/example/mscatalogo/entity/Producto.java:11
Fields:
id(Long) - Primary keycodigo(String) - Unique product codenombre(String) - Unique product namedescripcion(String) - Product descriptioncantidad(Integer) - Stock quantity (default: 0)precioVenta(Double) - Selling pricecostoCompra(Double) - Purchase costestado(boolean) - Active status (default: true)fechaCreacion(LocalDateTime) - Creation timestampfechaActualizacion(LocalDateTime) - Last update timestampcategoria(Categoria) - Many-to-one relationshipimagen(String) - Image file path
producto
Lifecycle Hooks:
@PrePersist- Sets creation and update timestamps@PreUpdate- Updates modification timestamp
- Many-to-one with
Categoriaviacategoria_id
Categoria
Product category classification. Location:jea-catalogo/src/main/java/com/example/mscatalogo/entity/Categoria.java:13
Fields:
id(Long) - Primary keynombre(String) - Unique category name (required)estado(boolean) - Active status (default: true)fechaCreacion(LocalDateTime) - Creation timestamp (auto-generated)
categoria
Validation:
@NotBlankonnombre- Category name is mandatory
Key Components
Controllers
ProductoController
Location:jea-catalogo/src/main/java/com/example/mscatalogo/controller/ProductoController.java:24
Endpoints:
POST /producto/crear-con-imagen- Create product with image upload (multipart/form-data)GET /producto- List all productsGET /producto/{id}- Get product by IDPUT /producto/{id}- Update productDELETE /producto/{id}- Delete productPUT /producto/{id}/desactivar- Deactivate productPUT /producto/{id}/cantidad- Update product quantityPUT /producto/{id}/actualizar-con-imagen- Update product with image (multipart/form-data)GET /producto/buscar/codigo/{codigo}- Find product by code
- Multipart file upload for product images
- Image file handling and storage
- Inventory quantity management
CategoriaController
Location:jea-catalogo/src/main/java/com/example/mscatalogo/controller/CategoriaController.java
Endpoints:
POST /categoria- Create categoryGET /categoria- List all categoriesGET /categoria/{id}- Get category by IDPUT /categoria/{id}- Update categoryDELETE /categoria/{id}- Delete category
Services
ProductoService
Location:jea-catalogo/src/main/java/com/example/mscatalogo/service/ProductoService.java
Implementation: ProductoServiceImpl.java
Key Methods:
guardarConImagen()- Save product with image fileactualizarConImagen()- Update product with new imagelistar()- List all productsobtenerPorId()- Find by IDactualizar()- Update producteliminar()- Delete productdesactivar()- Deactivate productactualizarCantidad()- Update stock quantitybuscarPorCodigo()- Find by product code
CategoriaService
Location:jea-catalogo/src/main/java/com/example/mscatalogo/service/CategoriaService.java
Implementation: CategoriaServiceImpl.java
Manages category CRUD operations.
Repositories
ProductoRepository
Location:jea-catalogo/src/main/java/com/example/mscatalogo/repository/ProductoRepository.java
Extends JpaRepository<Producto, Long>
Provides data access for products with custom query methods.
CategoriaRepository
Location:jea-catalogo/src/main/java/com/example/mscatalogo/repository/CategoriaRepository.java
Extends JpaRepository<Categoria, Long>
Provides data access for categories.
Configuration
WebConfig
Location:jea-catalogo/src/main/java/com/example/mscatalogo/config/WebConfig.java
CORS and web configuration.
Dependencies
Spring Boot Version: 3.1.3 Spring Cloud Version: 2022.0.2 Key Dependencies:spring-boot-starter-data-jpa- JPA/Hibernatespring-boot-starter-web- REST APIspring-boot-starter-validation- Bean validationspring-cloud-starter-netflix-eureka-client:4.0.3- Service discoveryspring-cloud-starter-config:4.0.4- Centralized configurationspringdoc-openapi-starter-webmvc-ui:2.0.2- OpenAPI/Swagger UImysql-connector-j- MySQL driverlombok- Code generation
Configuration
Config File:config-data/jea-catalogo-service.yml
Key Settings:
Database Schema
Main Tables:producto- Product master data- Primary key:
id - Unique constraints:
codigo,nombre - Foreign key:
categoria_id→categoria.id
- Primary key:
categoria- Product categories- Primary key:
id - Unique constraint:
nombre
- Primary key:
Image Handling
The service supports image upload and storage for products:- Images uploaded via multipart/form-data
- File storage handled by
ProductoService - Image path stored in
producto.imagenfield - Support for creating and updating products with images
Key Features
- Product catalog management with full CRUD
- Category-based product organization
- Inventory tracking with quantity management
- Product image upload and storage
- Product activation/deactivation (soft delete)
- Unique product codes and names
- Automatic timestamp tracking
- Search by product code
- OpenAPI/Swagger documentation
- Eureka service discovery integration
- Centralized configuration via Config Server
Integration Points
Consumed by:
- Sales Service - Fetches product data via Feign client
- Purchase Service - Retrieves product information
- Orders Service - Gets product details for order processing
APIs Exposed:
- Product CRUD operations
- Category management
- Inventory quantity updates
- Product search and filtering