Skip to content

ricardohuaripata/spring-ecommerce-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ecommerce RESTful API

Este proyecto es una API REST desarrollada en Spring Boot que ofrece funcionalidades para una tienda online de ropa. Permite gestionar productos, pedidos, usuarios y autenticación, entre otras características.

Tecnologías Utilizadas

Spring Boot: Plataforma de aplicación Java para crear aplicaciones independientes basadas en Spring.

Spring Data JPA: Facilita el acceso y la manipulación de datos utilizando el estándar Java Persistence API (JPA).

Spring Security: Ofrece autenticación y control de acceso a la API.

Spring Validation: Proporciona validación de datos de entrada.

Spring Web: Permite el desarrollo de aplicaciones web, incluyendo controladores REST.

Spring Mail: Facilita el envío de correos electrónicos desde la aplicación.

PostgreSQL: Sistema de gestión de bases de datos relacional utilizado para almacenar los datos de la aplicación.

Lombok: Biblioteca que agiliza el desarrollo eliminando la necesidad de escribir código repetitivo.

Springfox: Herramienta para generar documentación interactiva de la API utilizando Swagger.

Java JWT (JSON Web Tokens): Utilizado para la generación y validación de tokens JWT para autenticación.

Stripe Java: Biblioteca para interactuar con la API de Stripe, utilizada para procesar pagos.

Amazon S3: Servicio de almacenamiento en la nube que permite la subida y gestión de imágenes u otros archivos.

Database Diagram

alt text

API Reference

Autenticación

Signup

Registra un nuevo usuario.

  GET /api/v1/auth/signup
Parámetros
Tipo Nombre Descripción
Body signupDto Datos de registro del usuario
Ejemplo de solicitud
{
    "email":"[email protected]",
    "password": "Usuario9.Pass",
    "passwordRepeat": "Usuario9.Pass",
    "firstName": "Javier",
    "lastName": "Díaz"
}

Login

Inicia sesión para obtener un token de autenticación.

  POST /api/v1/auth/login
Parámetros
Tipo Nombre Descripción
Body loginDto Credenciales de inicio de sesión
Ejemplo de solicitud
{
    "email":"[email protected]",
    "password": "Usuario9.Pass"
}

Verificar Email

Verifica el correo electrónico del usuario utilizando un token de verificación de email.

  POST /api/v1/auth/verify-email/{token}
Parámetros
Tipo Nombre Descripción
Path token Token de verificación de email
Ejemplo de respuesta
{
    "id": "07ea76e0-142f-499a-929f-bedb08c79624",
    "email": "[email protected]",
    "firstName": "Ricardo",
    "lastName": "Huaripata",
    "role": "ROLE_USER",
    "emailVerified": true,
    "dateCreated": "15-11-2023 18:56:01",
    "dateLastModified": "20-11-2023 00:33:21"
}

Olvidé mi Contraseña

Solicita restablecer la contraseña olvidada del usuario.

  POST /api/v1/auth/forgot-password
Parámetros
Tipo Nombre Descripción
Body forgotPasswordDto Email del usuario
Ejemplo de solicitud
{
    "email": "[email protected]"
}
Ejemplo de respuesta
{
    "message": "Please, check your email.",
    "timestamp": "19-11-2023 21:26:39"
}

Reiniciar Contraseña

Restablece la contraseña del usuario utilizando un token de restablecimiento de contraseña.

  POST /api/v1/auth/reset-password/{token}
Parámetros
Tipo Nombre Descripción
Body resetPasswordDto Nueva contraseña para restablecer la contraseña
Path token Token de restablecimiento de contraseña
Ejemplo de solicitud
{
    "password": "RicardoDev.12",
    "passwordRepeat": "RicardoDev.12"
}

Añadir dirección de envío (Requiere autenticación)

Permite añadir una dirección de envio a la lista de direcciones del usuario.

  POST /api/v1/user/account/shipping-address
Parámetros
Tipo Nombre Descripción
Body shippingAddressDto Datos de la dirección
Ejemplo de solicitud
{
    "firstName": "Ricardo",
    "lastName": "Huaripata",
    "country": "España",
    "city": "Málaga",
    "postalCode": "49023",
    "address": "Calle Vergara, Nº 13, 2ºA",
    "contactPhone": "67040813"
}

Actualizar detalles del usuario (Requiere autenticación)

Permite actualizar detalles del usuario.

  PATCH /api/v1/user/account/details
Parámetros
Tipo Nombre Descripción
Body UpdateUserDto Datos del usuario para actualizar
Ejemplo de solicitud
{
    "firstName": "Nombre actualizado",
    "lastName": "Apellido actualizado"
}
Ejemplo de respuesta
{
    "id": "07ea76e0-142f-499a-929f-bedb08c79624",
    "email": "[email protected]",
    "firstName": "Nombre actualizado",
    "lastName": "Apellido actualizado",
    "role": "ROLE_USER",
    "emailVerified": false,
    "dateCreated": "15-11-2023 18:56:01",
    "dateLastModified": "08-12-2023 21:54:59"
}

Carrito

Obtener Carrito

Obtiene información sobre un carrito específico.

  GET /api/v1/cart/{cartId}
Parámetros
Tipo Nombre Descripción
Path cartId ID del carrito
Ejemplo de respuesta
{
    "id": "52f1839a-a010-4ccd-922d-e990cfa530f3",
    "dateCreated": "17-11-2023 01:53:14",
    "dateLastModified": "17-11-2023 01:53:14",
    "dateExpiration": "15-12-2023 01:53:14",
    "cartItems": [
        {
            "id": "7f1ba2c2-e4c3-4a09-86e0-3613d417ed53",
            "quantity": 2,
            "sizeColorProductVariant": {
                "id": "757d3745-0168-4d1c-a699-195fca04947f",
                "colorProductVariant": {
                    "id": "571a42a0-4dcb-4a21-a8c8-f13852850ffc",
                    "product": {
                        "id": "2d271f27-f6be-4357-bac1-f92289cb2ddc",
                        "title": "FATALITY - Hoodie",
                        "slug": "fatality-hoodie",
                        "description": "Esto es una descripcion.",
                        "category": {
                            "id": "dad347c3-7ea6-457e-9bf4-b8b3f976c812",
                            "title": "LOS CLÁSICOS",
                            "slug": "los-clasicos",
                            "featuredImageUrl": "https://image-url.jpg",
                            "dateCreated": "15-11-2023 19:18:32",
                            "dateLastModified": "15-11-2023 19:18:32"
                        },
                        "dateCreated": "16-11-2023 01:14:04",
                        "dateLastModified": "16-11-2023 01:14:04"
                    },
                    "color": {
                        "id": "890e6b76-c264-4520-b70e-d564c62096f8",
                        "title": "White",
                        "hexCode": "FFFFFF",
                        "slug": "white",
                        "dateCreated": "16-11-2023 01:08:36",
                        "dateLastModified": "16-11-2023 01:08:36"
                    },
                    "basePrice": 42.99,
                    "finalPrice": 42.99,
                    "mainImageUrl": "https://image-url.jpg",
                    "productImageList": [],
                    "dateCreated": "16-11-2023 15:51:06",
                    "dateLastModified": "16-11-2023 15:51:06"
                },
                "size": "XL",
                "stock": 99,
                "dateCreated": "16-11-2023 18:09:40",
                "dateLastModified": "16-11-2023 18:09:40"
            }
        }
    ],
    "totalAmount": 85.98,
    "totalQuantity": 2
}

Crear Carrito

Crea un nuevo carrito de compras.

  POST /api/v1/cart
Ejemplo de respuesta
{
    "id": "52f1839a-a010-4ccd-922d-e990cfa530f3",
    "dateCreated": "17-11-2023 01:53:14",
    "dateLastModified": "17-11-2023 01:53:14",
    "dateExpiration": "15-12-2023 01:53:14",
    "cartItems": [],
    "totalAmount": 0,
    "totalQuantity": 0
}

Agregar al Carrito

Agrega un artículo al carrito de compras.

  PATCH /api/v1/cart/{cartId}
Parámetros
Tipo Nombre Descripción
Path cartId ID del carrito
Body cartItemDto ID del variante talla-color del producto por añadir

Limpiar Carrito

Elimina todos los artículos del carrito.

  DELETE /api/v1/cart/{cartId}/items
Parámetros
Tipo Nombre Descripción
Path cartId ID del carrito

Eliminar Artículo del Carrito

Elimina un artículo específico del carrito.

  DELETE /api/v1/cart/items/{cartItemId}
Parámetros
Tipo Nombre Descripción
Path cartItemId ID del artículo del carrito

Pedido

Obtener Pedido por ID (Requiere autenticación de Admin o propietario del pedido)

Obtiene detalles de un pedido específico por su ID.

  GET /api/v1/order/{orderId}
Parámetros
Tipo Nombre Descripción
Path orderId ID del pedido
Ejemplo de respuesta
{
    "id": "7c72ff82-5f49-456e-a654-14dcccc8c403",
    "user": {
        "id": "07ea76e0-142f-499a-929f-bedb08c79624",
        "email": "[email protected]",
        "firstName": "Ricardo",
        "lastName": "Huaripata",
        "role": "ROLE_ADMIN",
        "emailVerified": true,
        "dateCreated": "15-11-2023 18:56:01",
        "dateLastModified": "15-11-2023 18:56:01"
    },
    "status": "pending",
    "chargeId": "ch_3OFLqXEARNZfy9ac1W7bWZgh",
    "firstName": "Ricardo",
    "lastName": "Huaripata",
    "country": "España",
    "city": "Málaga",
    "postalCode": "49023",
    "address": "Calle Juan Alberto, Nº 13, 2ºA",
    "contactPhone": "77040813",
    "orderDate": "22-11-2023 19:12:30",
    "orderItems": [
        {
            "id": "4245708c-df1a-490e-8fb4-fcbd1f016242",
            "sizeColorProductVariant": {
                "id": "ca1703a0-4a50-4df0-a382-db5c090192d5",
                "colorProductVariant": {
                    "id": "01326f52-c1a8-40e9-8c09-ff5b54b52321",
                    "product": {
                        "id": "4e3a9b56-afea-4402-b9a2-0de47db43cae",
                        "title": "ALFRED - Hoodie",
                        "slug": "alfred-hoodie",
                        "description": "Ssfasfxawqeuwieuwiesxnvkzas.",
                        "category": {
                            "id": "dad347c3-7ea6-457e-9bf4-b8b3f976c812",
                            "title": "LOS CLÁSICOS",
                            "slug": "los-clasicos",
                            "featuredImageUrl": "https://image-url.jpg",
                            "dateCreated": "15-11-2023 19:18:32",
                            "dateLastModified": "15-11-2023 19:18:32"
                        },
                        "dateCreated": "16-11-2023 01:16:39",
                        "dateLastModified": "16-11-2023 01:16:39"
                    },
                    "color": {
                        "id": "0c912c8b-6129-4292-9da4-5fbc6dc24682",
                        "title": "Black",
                        "hexCode": "000000",
                        "slug": "black",
                        "dateCreated": "16-11-2023 01:08:15",
                        "dateLastModified": "16-11-2023 01:08:15"
                    },
                    "basePrice": 42.99,
                    "finalPrice": 42.99,
                    "mainImageUrl": "https://image-url.jpg",
                    "productImageList": [],
                    "dateCreated": "16-11-2023 15:55:53",
                    "dateLastModified": "16-11-2023 15:55:53"
                },
                "size": "S",
                "stock": 96,
                "dateCreated": "16-11-2023 18:11:54",
                "dateLastModified": "22-11-2023 19:12:30"
            },
            "quantity": 3,
            "unitPrice": 42.99
        }
    ],
    "totalQuantity": 3,
    "totalAmount": 128.97
}

Crear Pedido (Requiere autenticación)

Crea un nuevo pedido.

  POST /api/v1/order
Parámetros
Tipo Nombre Descripción
Body orderDto Detalles del pedido
Ejemplo de solicitud
{
    "cartId": "52f1839a-a010-4ccd-922d-e990cfa530f3",
    "cardNumber": "4242424242424242",
    "expMonth": "05",
    "expYear": "28",
    "cvc": "333",    
    "firstName": "Ricardo",
    "lastName": "Huaripata",
    "country": "España",
    "city": "Málaga",
    "postalCode": "49023",
    "address": "Calle Juan Alberto, Nº 13, 2ºA",
    "contactPhone": "77040813"
}