Skip to content

leoro151095-crypto/microservicio-productos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Microservicio de Productos

Implementacion del microservicio de Productos para taller de microservicios, conectado a MySQL.

1. Responsabilidad

Gestionar el catalogo de productos del sistema.

Funciones principales:

  • Listar productos
  • Consultar producto por ID
  • Crear productos

Este servicio no gestiona usuarios, pedidos ni pagos.

2. Stack tecnologico

  • Backend: Node.js + Express
  • Base de datos: MySQL
  • Frontend: HTML, CSS, JavaScript
  • Puerto sugerido: 3002

3. Estructura del proyecto

microservicio-productos
|
|-- src
|   |-- controllers
|   |   `-- productsController.js
|   |-- routes
|   |   `-- productsRoutes.js
|   |-- models
|   |   |-- database.js
|   |   `-- initDb.js
|   `-- app.js
|
|-- frontend
|   |-- index.html
|   |-- styles.css
|   `-- script.js
|
|-- package.json
|-- .env
|-- .env.example
`-- README.md

4. Modelo de base de datos

Tabla: products

CREATE TABLE IF NOT EXISTS products (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(120) NOT NULL,
  description VARCHAR(255) NOT NULL,
  price DECIMAL(10,2) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

5. Endpoints

Obtener todos los productos

  • Metodo: GET
  • Ruta: /products

Respuesta ejemplo:

[
  {
    "id": 1,
    "name": "Laptop",
    "description": "Laptop gamer",
    "price": 900,
    "created_at": "2026-03-05 15:00:00"
  }
]

Obtener producto por ID

  • Metodo: GET
  • Ruta: /products/:id

Respuesta ejemplo:

{
  "id": 1,
  "name": "Laptop",
  "description": "Laptop gamer",
  "price": 900,
  "created_at": "2026-03-05 15:00:00"
}

Crear producto

  • Metodo: POST
  • Ruta: /products

Body ejemplo:

{
  "name": "Mouse",
  "description": "Mouse gamer",
  "price": 50
}

Respuesta ejemplo:

{
  "id": 2,
  "name": "Mouse",
  "description": "Mouse gamer",
  "price": 50
}

6. Diagrama funcional

flowchart TD
    A[Cliente o Frontend] --> B[POST /products]
    B --> C[Validar name, description, price]
    C -->|Valido| D[Insertar en tabla products]
    C -->|Invalido| E[Retornar 400 Bad Request]
    D --> F[Retornar 201 con producto creado]

    G[Cliente o Frontend] --> H[GET /products]
    H --> I[Consultar tabla products]
    I --> J[Retornar lista de productos]

    K[Cliente o Frontend] --> L[GET /products/:id]
    L --> M[Buscar producto por id]
    M -->|Existe| N[Retornar producto]
    M -->|No existe| O[Retornar 404 Not Found]
Loading

7. Ejecucion local

  1. Crear base de datos en MySQL:
CREATE DATABASE IF NOT EXISTS productos_db;
  1. Configurar variables en .env:
PORT=3002
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=
DB_NAME=productos_db
  1. Instalar dependencias:
npm.cmd install
  1. Inicializar tabla products (opcional, tambien se verifica al iniciar):
npm.cmd run init-db
  1. Ejecutar servicio:
npm.cmd start
  1. Probar:
  • API: http://localhost:3002/products
  • Frontend: http://localhost:3002
  • Health check: http://localhost:3002/health

8. Conexion con DBeaver (MySQL)

  1. Abrir DBeaver y crear nueva conexion MySQL.
  2. Usar estos parametros:
  • Host: localhost
  • Puerto: 3306
  • Database: productos_db
  • Usuario: el de tu MySQL (por ejemplo root)
  • Password: la de tu MySQL
  1. Probar conexion y guardar.
  2. Abrir SQL Editor y ejecutar:
SELECT * FROM products;

9. Pruebas rapidas con curl

Crear producto:

curl -X POST http://localhost:3002/products \
  -H "Content-Type: application/json" \
  -d "{\"name\":\"Teclado\",\"description\":\"Teclado mecanico\",\"price\":120}"

Listar productos:

curl http://localhost:3002/products

Consultar por ID:

curl http://localhost:3002/products/1

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors