Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ricardohuaripata/spring-ecommerce-api
RESTful API hecho con el stack Java+ Spring Boot + PostgreSQL
https://github.com/ricardohuaripata/spring-ecommerce-api
amazon-s3-storage api-rest ecommerce java-mail-sender jwt-authentication lombok maven pagination postgresql spring-boot spring-data-jpa spring-security stripe-payment swagger-documentation validation
Last synced: 19 days ago
JSON representation
RESTful API hecho con el stack Java+ Spring Boot + PostgreSQL
- Host: GitHub
- URL: https://github.com/ricardohuaripata/spring-ecommerce-api
- Owner: ricardohuaripata
- License: mit
- Created: 2023-11-15T00:48:10.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2024-11-18T13:25:22.000Z (about 2 months ago)
- Last Synced: 2024-11-18T15:10:24.287Z (about 2 months ago)
- Topics: amazon-s3-storage, api-rest, ecommerce, java-mail-sender, jwt-authentication, lombok, maven, pagination, postgresql, spring-boot, spring-data-jpa, spring-security, stripe-payment, swagger-documentation, validation
- Language: Java
- Homepage: https://documenter.getpostman.com/view/25547682/2s9YXpUJ65
- Size: 943 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 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](database-diagram.png)
## API Reference
### Autenticación
#### Signup
Registra un nuevo usuario.
```http
GET /api/v1/auth/signup
```##### Parámetros
| Tipo | Nombre | Descripción |
|----------|-------------|--------------------------|
| `Body` | `signupDto` | Datos de registro del usuario |##### Ejemplo de solicitud
```json
{
"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.
```http
POST /api/v1/auth/login
```##### Parámetros
| Tipo | Nombre | Descripción |
|----------|-------------|--------------------------|
| `Body` | `loginDto` | Credenciales de inicio de sesión |##### Ejemplo de solicitud
```json
{
"email":"[email protected]",
"password": "Usuario9.Pass"
}
```#### Verificar Email
Verifica el correo electrónico del usuario utilizando un token de verificación de email.
```http
POST /api/v1/auth/verify-email/{token}
```##### Parámetros
| Tipo | Nombre | Descripción |
|----------|-------------|--------------------------|
| `Path` | `token` | Token de verificación de email |##### Ejemplo de respuesta
```json
{
"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.
```http
POST /api/v1/auth/forgot-password
```##### Parámetros
| Tipo | Nombre | Descripción |
|----------|-------------|--------------------------|
| `Body` | `forgotPasswordDto` | Email del usuario |##### Ejemplo de solicitud
```json
{
"email": "[email protected]"
}
```##### Ejemplo de respuesta
```json
{
"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.
```http
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
```json
{
"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.
```http
POST /api/v1/user/account/shipping-address
```##### Parámetros
| Tipo | Nombre | Descripción |
|----------|-------------|--------------------------|
| `Body` | `shippingAddressDto` | Datos de la dirección |##### Ejemplo de solicitud
```json
{
"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.
```http
PATCH /api/v1/user/account/details
```##### Parámetros
| Tipo | Nombre | Descripción |
|----------|-------------|--------------------------|
| `Body` | `UpdateUserDto` | Datos del usuario para actualizar |##### Ejemplo de solicitud
```json
{
"firstName": "Nombre actualizado",
"lastName": "Apellido actualizado"
}
```##### Ejemplo de respuesta
```json
{
"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.
```http
GET /api/v1/cart/{cartId}
```##### Parámetros
| Tipo | Nombre | Descripción |
|----------|-------------|--------------------------|
| `Path` | `cartId` | ID del carrito |##### Ejemplo de respuesta
```json
{
"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.
```http
POST /api/v1/cart
```##### Ejemplo de respuesta
```json
{
"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.
```http
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.
```http
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.
```http
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.
```http
GET /api/v1/order/{orderId}
```##### Parámetros
| Tipo | Nombre | Descripción |
|----------|-------------|--------------------------|
| `Path` | `orderId` | ID del pedido |##### Ejemplo de respuesta
```json
{
"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.
```http
POST /api/v1/order
```##### Parámetros
| Tipo | Nombre | Descripción |
|----------|-------------|--------------------------|
| `Body` | `orderDto` | Detalles del pedido |##### Ejemplo de solicitud
```json
{
"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"
}
```