Skip to content

leohtmlmartinez/ECommerce-API

Repository files navigation

ECommerce API

API REST desarrollada con .NET 8 y Clean Architecture para gestión de productos y categorías.


Cómo ejecutar

cd ECommerce.API
dotnet run --launch-profile http

Swagger disponible en: http://localhost:5228/swagger


Autenticación

La API usa JWT Bearer Token. Todos los endpoints de Categorías y Productos requieren estar autenticado.

Paso 1 — Obtener el token

POST /api/auth/login

Body:

{
  "email": "admin@ecommerce.com",
  "password": "Admin123!"
}

Respuesta:

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5...",
  "expiration": "2026-05-30T14:00:00Z"
}

Paso 2 — Autorizar en Swagger

  1. Copiá el valor de token
  2. Hacé clic en el botón Authorize (arriba a la derecha en Swagger)
  3. Escribí: Bearer eyJhbGciOiJIUzI1NiIsInR5...
  4. Clic en AuthorizeClose

A partir de ese momento todos los endpoints funcionan con tu sesión.


Categorías

Listar todas las categorías

GET /api/categorias

No requiere body. Retorna la lista completa.

Respuesta 200 OK:

[
  {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "nombre": "Electrónica",
    "descripcion": "Productos electrónicos y tecnología"
  }
]

Obtener una categoría por ID

GET /api/categorias/{id}

Reemplazá {id} con el GUID de la categoría.

Respuesta 200 OK:

{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "nombre": "Electrónica",
  "descripcion": "Productos electrónicos y tecnología"
}

Retorna 404 Not Found si no existe.


Crear una categoría

POST /api/categorias

Body:

{
  "nombre": "Electrónica",
  "descripcion": "Productos electrónicos y tecnología"
}

Respuesta 201 Created:

{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "nombre": "Electrónica",
  "descripcion": "Productos electrónicos y tecnología"
}

Retorna 400 Bad Request si el nombre está vacío o supera los 100 caracteres.


Editar una categoría

PUT /api/categorias/{id}

Reemplazá {id} con el GUID de la categoría a editar.

Body:

{
  "nombre": "Tecnología",
  "descripcion": "Electrónica y gadgets"
}

Respuesta 204 No Content (sin body).

Retorna 404 Not Found si no existe, 400 Bad Request si los datos son inválidos.


Eliminar una categoría

DELETE /api/categorias/{id}

Reemplazá {id} con el GUID de la categoría a eliminar.

Respuesta 204 No Content (sin body).

Retorna 404 Not Found si no existe.


Productos

Listar todos los productos

GET /api/productos

No requiere body. Retorna la lista completa.

Respuesta 200 OK:

[
  {
    "id": "1a2b3c4d-0000-0000-0000-000000000001",
    "nombre": "Mouse Gamer",
    "precio": 4500.50,
    "stock": 20,
    "categoriaId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  }
]

Obtener un producto por ID

GET /api/productos/{id}

Reemplazá {id} con el GUID del producto.

Respuesta 200 OK:

{
  "id": "1a2b3c4d-0000-0000-0000-000000000001",
  "nombre": "Mouse Gamer",
  "precio": 4500.50,
  "stock": 20,
  "categoriaId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}

Retorna 404 Not Found si no existe.


Listar productos por categoría

GET /api/productos/categoria/{categoriaId}

Reemplazá {categoriaId} con el GUID de la categoría.

Retorna todos los productos que pertenecen a esa categoría.

Respuesta 200 OK: lista de productos (mismo formato que GET all).


Crear un producto

POST /api/productos

Body:

{
  "nombre": "Mouse Gamer",
  "precio": 4500.50,
  "stock": 20,
  "categoriaId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}

Respuesta 201 Created:

{
  "id": "1a2b3c4d-0000-0000-0000-000000000001",
  "nombre": "Mouse Gamer",
  "precio": 4500.50,
  "stock": 20,
  "categoriaId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}

Retorna 400 Bad Request si:

  • El nombre está vacío o supera los 200 caracteres
  • El precio es 0 o negativo
  • El stock es negativo
  • La categoría no existe

Editar un producto

PUT /api/productos/{id}

Reemplazá {id} con el GUID del producto a editar.

Body:

{
  "nombre": "Mouse Gamer RGB",
  "precio": 5200.00,
  "stock": 15,
  "categoriaId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}

Respuesta 204 No Content (sin body).

Retorna 404 Not Found si el producto o la categoría no existen.


Eliminar un producto

DELETE /api/productos/{id}

Reemplazá {id} con el GUID del producto a eliminar.

Respuesta 204 No Content (sin body).

Retorna 404 Not Found si no existe.


Códigos de respuesta

Código Significado
200 OK Operación exitosa con datos
201 Created Recurso creado exitosamente
204 No Content Operación exitosa sin datos de retorno
400 Bad Request Datos de entrada inválidos
401 Unauthorized No autenticado o token inválido
404 Not Found Recurso no encontrado

Stack tecnológico

  • .NET 8 — ASP.NET Core Web API
  • Clean Architecture — Domain / Application / Infrastructure / API
  • MediatR — patrón CQRS (Commands y Queries)
  • FluentValidation — validación de entrada
  • Entity Framework Core 8 — ORM
  • SQLite — base de datos (archivo stock.db)
  • JWT Bearer — autenticación
  • Swagger / OpenAPI — documentación interactiva

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages