Skip to main content

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 key
  • codigo (String) - Unique product code
  • nombre (String) - Unique product name
  • descripcion (String) - Product description
  • cantidad (Integer) - Stock quantity (default: 0)
  • precioVenta (Double) - Selling price
  • costoCompra (Double) - Purchase cost
  • estado (boolean) - Active status (default: true)
  • fechaCreacion (LocalDateTime) - Creation timestamp
  • fechaActualizacion (LocalDateTime) - Last update timestamp
  • categoria (Categoria) - Many-to-one relationship
  • imagen (String) - Image file path
Table: producto Lifecycle Hooks:
  • @PrePersist - Sets creation and update timestamps
  • @PreUpdate - Updates modification timestamp
Relationships:
  • Many-to-one with Categoria via categoria_id

Categoria

Product category classification. Location: jea-catalogo/src/main/java/com/example/mscatalogo/entity/Categoria.java:13 Fields:
  • id (Long) - Primary key
  • nombre (String) - Unique category name (required)
  • estado (boolean) - Active status (default: true)
  • fechaCreacion (LocalDateTime) - Creation timestamp (auto-generated)
Table: categoria Validation:
  • @NotBlank on nombre - 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 products
  • GET /producto/{id} - Get product by ID
  • PUT /producto/{id} - Update product
  • DELETE /producto/{id} - Delete product
  • PUT /producto/{id}/desactivar - Deactivate product
  • PUT /producto/{id}/cantidad - Update product quantity
  • PUT /producto/{id}/actualizar-con-imagen - Update product with image (multipart/form-data)
  • GET /producto/buscar/codigo/{codigo} - Find product by code
Features:
  • 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 category
  • GET /categoria - List all categories
  • GET /categoria/{id} - Get category by ID
  • PUT /categoria/{id} - Update category
  • DELETE /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 file
  • actualizarConImagen() - Update product with new image
  • listar() - List all products
  • obtenerPorId() - Find by ID
  • actualizar() - Update product
  • eliminar() - Delete product
  • desactivar() - Deactivate product
  • actualizarCantidad() - Update stock quantity
  • buscarPorCodigo() - 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/Hibernate
  • spring-boot-starter-web - REST API
  • spring-boot-starter-validation - Bean validation
  • spring-cloud-starter-netflix-eureka-client:4.0.3 - Service discovery
  • spring-cloud-starter-config:4.0.4 - Centralized configuration
  • springdoc-openapi-starter-webmvc-ui:2.0.2 - OpenAPI/Swagger UI
  • mysql-connector-j - MySQL driver
  • lombok - Code generation

Configuration

Config File: config-data/jea-catalogo-service.yml Key Settings:
server:
  port: ${PORT:${SERVER_PORT:0}}

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/catalogo-ms
    username: root
    password: ""
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8090/eureka
  instance:
    hostname: localhost

Database Schema

Main Tables:
  • producto - Product master data
    • Primary key: id
    • Unique constraints: codigo, nombre
    • Foreign key: categoria_idcategoria.id
  • categoria - Product categories
    • Primary key: id
    • Unique constraint: nombre

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.imagen field
  • 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

Build docs developers (and LLMs) love