Skip to content

gianbdev/crud-productos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧩 CRUD Productos API

API REST desarrollada con Spring Boot 2.2.1, MySQL y Spring Data JPA, que permite la gestión completa de productos: creación, actualización, listado, búsqueda, eliminación y paginación.


📘 Descripción

El proyecto CRUD Productos ofrece un conjunto de endpoints RESTful para administrar productos en una base de datos MySQL.
Incluye integración con Swagger UI, manejo de DTOs, validaciones, paginación y respuestas estandarizadas mediante un envoltorio (ApiResponser, PageableResponse).


⚙️ Tecnologías utilizadas

  • Java 8 (1.8.0_202)
  • 🚀 Spring Boot 2.2.1
  • 🗄️ Spring Data JPA
  • 🔄 Hibernate
  • 🧰 MySQL 8
  • 🔧 ModelMapper 3.1.1
  • 🧱 Lombok 1.18.30
  • Spring Validation
  • 🧭 Swagger / OpenAPI (springdoc-openapi-starter-webmvc-ui 2.8.3)

📁 Estructura del proyecto

src/main/java/com/prueba/crudproductos/
│
├── dto/
│   ├── ProductoCreateDTO.java
│   └── ProductoRequestDTO.java
│
├── rest/
│   └── ProductoController.java
│
├── resource/
│   └── ProductoResource.java
│
├── util/
│   └── response/
│       ├── ApiResponser.java
│       ├── PageableResponse.java
│       └── ProductoResponse.java
│
└── CrudProductosApplication.java

🧠 Arquitectura

El proyecto sigue una arquitectura en capas:

  1. Controller (rest) → Expone los endpoints HTTP.
  2. Resource (resource) → Contiene la lógica de negocio.
  3. DTOs (dto) → Estructuras de datos para requests y responses.
  4. Entities & Repositories → Mapeo con la base de datos.
  5. Utils (util.response) → Clases auxiliares para respuestas estandarizadas.

⚙️ Configuración

📄 application.yml

spring:
  application:
    name: crudproductos

  datasource:
    url: jdbc:mysql://localhost:3306/db_producto?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
    username: root
    password: password
    driver-class-name: com.mysql.cj.jdbc.Driver

  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
    properties:
      hibernate:
        format_sql: true
        dialect: org.hibernate.dialect.MySQL8Dialect

server:
  port: 7080

logging:
  level:
    org.springframework: INFO
    com.prueba.crudproductos: DEBUG

🧩 Endpoints principales

Base URL: http://localhost:7080/v1/api/Productos

Método Endpoint Descripción Cuerpo / Parámetros
POST /SaveProducto Crea un nuevo producto ProductoCreateDTO
PUT /UpdateProducto/{productoId} Actualiza un producto existente productoId (path), ProductoCreateDTO
DELETE /DeleteProducto/{productoId} Elimina un producto por su ID productoId
GET /GetProductoList Obtiene una lista simple de todos los productos
GET /GetProductoById/{productoId} Obtiene un producto específico productoId
GET /GetAllProducto Obtiene productos paginados ?Page={n}&Rows={n}

🧾 Ejemplos de uso

➕ Crear producto

Request

POST /v1/api/Productos/SaveProducto
Content-Type: application/json

Body

{
  "nombre": "Laptop Pro X",
  "descripcion": "Laptop potente con procesador Intel i7, 16GB RAM y SSD 1TB",
  "cantidad": 10,
  "precio": 4899.99
}

Response

{
  "status": 201,
  "message": "Producto registrado correctamente",
  "data": {
    "productoId": 1,
    "nombre": "Laptop Pro X"
  }
}

✏️ Actualizar producto

Request

PUT /v1/api/Productos/UpdateProducto/1
Content-Type: application/json

Body

{
  "nombre": "Laptop Pro X 2025",
  "descripcion": "Laptop actualizada con procesador i9 y 32GB RAM",
  "cantidad": 8,
  "precio": 6299.99
}

Response

{
  "status": 200,
  "message": "Producto actualizado correctamente"
}

❌ Eliminar producto

Request

DELETE /v1/api/Productos/DeleteProducto/1

Response

{
  "status": 200,
  "message": "Producto eliminado correctamente"
}

📋 Listar todos los productos

Request

GET /v1/api/Productos/GetProductoList

Response

[
  {
    "productoId": 1,
    "nombre": "Laptop Pro X",
    "descripcion": "Laptop potente con procesador Intel i7",
    "cantidad": 10,
    "precio": 4899.99
  },
  {
    "productoId": 2,
    "nombre": "Mouse Ergo",
    "descripcion": "Mouse inalámbrico ergonómico",
    "cantidad": 50,
    "precio": 120.5
  }
]

📄 Paginación

Request

GET /v1/api/Productos/GetAllProducto?Page=1&Rows=10

Response

{
  "page": 1,
  "totalPages": 5,
  "totalElements": 50,
  "data": [
    {
      "productoId": 1,
      "nombre": "Laptop Pro X",
      "descripcion": "Laptop potente con procesador Intel i7",
      "cantidad": 10,
      "precio": 4899.99
    }
  ]
}

🧰 Clases de utilidad

ApiResponser.java

Estandariza las respuestas del API.

public class ApiResponser {
  private int status;
  private String message;
  private Object data;
}

PageableResponse<T>.java

Modelo genérico para devolver listas paginadas.

public class PageableResponse<T> {
  private int page;
  private int totalPages;
  private long totalElements;
  private List<T> data;
}

🧪 Ejecución

🏗️ Requisitos previos

  • Java 8 instalado
  • MySQL ejecutándose
  • Base de datos creada:
    CREATE DATABASE db_producto;

🚀 Ejecutar el proyecto

mvn clean install
mvn spring-boot:run

El servicio estará disponible en:

📍 http://localhost:7080

Y la documentación Swagger en:

📘 http://localhost:7080/swagger-ui/index.html


🧾 POM principal

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
    <scope>runtime</scope>
  </dependency>
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>org.modelmapper</groupId>
    <artifactId>modelmapper</artifactId>
    <version>3.1.1</version>
  </dependency>
  <dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.8.3</version>
  </dependency>
</dependencies>

👨‍💻 Autor

Giancarlo Silva
📚 Proyecto: API REST CRUD Productos
📦 Versión: v1.0.0
🧠 Lenguaje: Java 8
🔗 Framework: Spring Boot

Releases

No releases published

Packages

 
 
 

Contributors

Languages