Skip to content

E-commerce RESTful API with JWT Authentication, Clean Architecture, and Database Integration built in .NET

Notifications You must be signed in to change notification settings

Nachobastianelli/EcommerceApiREST

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🛒 E-Commerce API

📝 Descripción

Esta es una API-Rest para un sistema de e-commerce, diseñada con Clean Architecture para manejar la lógica de backend, la gestión de productos, usuarios y órdenes. Está construida con ASP.NET Core, y provee todos los servicios necesarios para que un frontend o aplicación móvil puedan interactuar con el sistema de manera eficiente.

🌟 Funcionalidades Principales

  • Autenticación y Autorización: Gestión de usuarios con ASP.NET Core Identity.
  • Gestión de Productos: Endpoints para agregar, editar, eliminar y listar productos.
  • Gestión de Órdenes: Creación, modificación y consulta de órdenes de compra.
  • Facturación: Generación de facturas una vez completada una orden.
  • Roles y Permisos: Control de acceso según roles de usuario (clientes, editores, administradores).

🚀 Tecnologías Utilizadas

  • ASP.NET Core con Identity
  • Base de datos: SQLite (configurable a SQL Server)
  • Entity Framework Core: Para la gestión de la base de datos.
  • JWT: Autenticación basada en JSON Web Tokens.

📦 ClassDiagram

classDiagram
    direction TB

    
    class User {
        +String Id
        +String Nombre
        +String Apellido
        +String Email
        +String Password
        +List~Factura~ ListFacturas
        +List~Valoraciones~ ListValoraciones
    }

    class Factura {
        +String IdFactura
        +DateTime Date
        +Orden Orden
        +User Usuario
        +Decimal MontoTotal
    }

    class Valoraciones {
        +String IdValoracion
        +Producto Producto
        +User Usuario
        +String Imagen
        +DateTime CreatedAt
        +Int Estrellas
        +String Opinion
    }

    class Producto {
        +String Id
        +String Nombre
        +Decimal Precio
        +String Descripcion
        +String Imagen
        +String Talla
        +String Color
        +List~Valoraciones~ ListValoraciones
    }

    class Orden {
        +String Id
        +List~OrdenLinea~ Lineas
        +User Usuario
        +Decimal Total
        +DateTime FechaCreacion
        +String EstadoOrden
    }

    class OrdenLinea {
        +String Id
        +Producto Producto
        +String Nombre
        +Int Cantidad
        +Decimal PrecioUnitario
        +Decimal Total
    }

    class Address {
        +String Id
        +String Street
        +String City
        +String State
        +String PostalCode
        +String Country
        +String Phone
    }


    
    User "1" -- "0..*" Factura : owns
    User "1" -- "0..*" Valoraciones : writes
    User "1" -- "0..*" Orden : places

    direction LR
    Producto "1" -- "0..*" Valoraciones : receives
    Producto "1" -- "*" OrdenLinea : has


    direction TB
    Orden "1" -- "0..*" OrdenLinea : contains
    Factura "1" -- "0..1" Orden
    Address "1" -- "1" Orden : linkedTo
Loading

📋 Endpoints

Authentication

Método Ruta Descripción
POST /api/Authentication/authenticate Autentica a un usuario

Order

Método Ruta Descripción
GET /api/Order/{orderId} Obtiene una orden por ID
GET /api/Order Obtiene todas las órdenes
DELETE /api/Order Elimina todas las lineas de producto de una orden
GET /api/Order/GetAllOrdersForOneUser Obtiene todas las órdenes de un usuario específico
POST /api/Order/{productId} Crea/actualiza una linea de producto para una orden específica
DELETE /api/Order/{productId} Elimina un producto de una orden específica
PUT /api/Order/UpdateOrdetToStatePending Actualiza una orden al estado pendiente
PUT /api/Order/ConfirmOrder/{orderId} Confirma una orden por ID
PUT /api/Order/CancelOrder/{orderId} Cancela una orden por ID

Product

Método Ruta Descripción
GET /api/Product/{id} Obtiene un producto por ID
PUT /api/Product/{id} Actualiza un producto por ID
DELETE /api/Product/{id} Elimina un producto por ID
POST /api/Product Crea un nuevo producto
GET /api/Product/GetAll Obtiene todos los productos
GET /api/Product/GetAvailable Obtiene los productos disponibles
GET /api/Product/GetMoreCheaper Obtiene el producto más barato
GET /api/Product/GetMostExpansive Obtiene el producto más caro
GET /api/Product/GetByName/{name} Obtiene un listado de productos por nombre
GET /api/Product/GetLittleQuantity Obtiene productos con poca cantidad
PUT /api/Product/{id}/{quantity} Actualiza la cantidad de un producto (+ / -)
GET /api/Product/GetW/Valorations/{id} Obtiene un producto con sus valoraciones por ID

User

Método Ruta Descripción
GET /api/User/{id} Obtiene un usuario por ID
DELETE /api/User/{id} Elimina un usuario por ID
PUT /api/User/{id} Actualiza un usuario por ID
GET /api/User Obtiene todos los usuarios
POST /api/User Crea un nuevo usuario
GET /api/User/profile Obtiene el perfil del usuario autenticado
GET /api/User/GetUserWEmail/{email} Obtiene un usuario por correo electrónico
PUT /api/User/role/{userId} Actualiza el rol de un usuario por ID

Valoration

Método Ruta Descripción
POST /api/Valoration/{productId} Crea una nueva valoración para un producto por ID
GET /api/Valoration Obtiene todas las valoraciones
GET /api/Valoration/{id} Obtiene una valoración por ID
PUT /api/Valoration/{id} Actualiza una valoración por ID
DELETE /api/Valoration/{id} Elimina una valoración por ID

🛠️ Instalación y Ejecución

1. git clone https://github.com/nachobastianelli/EcommerceApiRest
2. cd EcommerceApiRest
3. dotnet restore
4. dotnet build
5. dotnet run

🔗 Link to Domain Diagram

✏Excalidraw📏




📚 Más información del proyecto en la carpeta DOCS

Releases

No releases published

Packages

No packages published

Languages