{"id":22967600,"url":"https://github.com/ricardohuaripata/spring-ecommerce-api","last_synced_at":"2026-02-25T05:35:25.293Z","repository":{"id":207410397,"uuid":"718872309","full_name":"ricardohuaripata/spring-ecommerce-api","owner":"ricardohuaripata","description":"REST API para ecommerce de ropa hecho con Spring Boot, PostgreSQL, Stripe y Amazon S3.","archived":false,"fork":false,"pushed_at":"2025-01-14T17:35:01.000Z","size":971,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-22T15:46:06.644Z","etag":null,"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"],"latest_commit_sha":null,"homepage":"https://documenter.getpostman.com/view/25547682/2s9YXpUJ65","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ricardohuaripata.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-11-15T00:48:10.000Z","updated_at":"2025-02-11T14:23:24.000Z","dependencies_parsed_at":"2024-01-14T02:53:39.940Z","dependency_job_id":"3e4754fe-f678-499a-84cd-72e2c84f3365","html_url":"https://github.com/ricardohuaripata/spring-ecommerce-api","commit_stats":{"total_commits":38,"total_committers":1,"mean_commits":38.0,"dds":0.0,"last_synced_commit":"51868056d8ee8702c1666b48690c35c6368328bc"},"previous_names":["ricardohuaripata/spring-ecommerce-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ricardohuaripata/spring-ecommerce-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ricardohuaripata%2Fspring-ecommerce-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ricardohuaripata%2Fspring-ecommerce-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ricardohuaripata%2Fspring-ecommerce-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ricardohuaripata%2Fspring-ecommerce-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ricardohuaripata","download_url":"https://codeload.github.com/ricardohuaripata/spring-ecommerce-api/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ricardohuaripata%2Fspring-ecommerce-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281068980,"owners_count":26438554,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-26T02:00:06.575Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["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"],"created_at":"2024-12-14T21:14:15.917Z","updated_at":"2025-10-26T06:40:54.014Z","avatar_url":"https://github.com/ricardohuaripata.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Spring Ecommerce API\n\nREST API desarrollado con Spring Boot que ofrece funcionalidades para un ecommerce de ropa. Permite gestionar productos, pedidos, usuarios y autenticación, entre otras características.\n\n## Tecnologías Utilizadas\n\n**Spring Boot:** Plataforma de aplicación Java para crear aplicaciones independientes basadas en Spring.\n\n**Spring Data JPA:** Facilita el acceso y la manipulación de datos utilizando el estándar Java Persistence API (JPA).\n\n**Spring Security:** Ofrece autenticación y control de acceso a la API.\n\n**Spring Validation:** Proporciona validación de datos de entrada.\n\n**Spring Web:** Permite el desarrollo de aplicaciones web, incluyendo controladores REST.\n\n**Spring Mail:** Facilita el envío de correos electrónicos desde la aplicación.\n\n**PostgreSQL:** Sistema de gestión de bases de datos relacional utilizado para almacenar los datos de la aplicación.\n\n**Lombok:** Biblioteca que agiliza el desarrollo eliminando la necesidad de escribir código repetitivo.\n\n**Springfox:** Herramienta para generar documentación interactiva de la API utilizando Swagger.\n\n**Java JWT (JSON Web Tokens):** Utilizado para la generación y validación de tokens JWT para autenticación.\n\n**Stripe Java:** Biblioteca para interactuar con la API de Stripe, utilizada para procesar pagos.\n\n**Amazon S3:** Servicio de almacenamiento en la nube que permite la subida y gestión de imágenes u otros archivos.\n\n## Database Diagram\n\n![alt text](database-diagram.png)\n\n## API Reference\n\n### Autenticación\n\n#### Signup\n\nRegistra un nuevo usuario.\n\n```http\n  GET /api/v1/auth/signup\n```\n\n##### Parámetros\n| Tipo     | Nombre      | Descripción              |\n|----------|-------------|--------------------------|\n| `Body`   | `signupDto` | Datos de registro del usuario |\n\n##### Ejemplo de solicitud\n\n```json\n{\n    \"email\":\"usuario9@example.com\",\n    \"password\": \"Usuario9.Pass\",\n    \"passwordRepeat\": \"Usuario9.Pass\",\n    \"firstName\": \"Javier\",\n    \"lastName\": \"Díaz\"\n}\n```\n\n#### Login\n\nInicia sesión para obtener un token de autenticación.\n\n```http\n  POST /api/v1/auth/login\n```\n\n##### Parámetros\n| Tipo     | Nombre      | Descripción              |\n|----------|-------------|--------------------------|\n| `Body`   | `loginDto` | Credenciales de inicio de sesión |\n\n##### Ejemplo de solicitud\n\n```json\n{\n    \"email\":\"usuario9@example.com\",\n    \"password\": \"Usuario9.Pass\"\n}\n```\n\n#### Verificar Email\n\nVerifica el correo electrónico del usuario utilizando un token de verificación de email.\n\n```http\n  POST /api/v1/auth/verify-email/{token}\n```\n\n##### Parámetros\n| Tipo     | Nombre      | Descripción              |\n|----------|-------------|--------------------------|\n| `Path`   | `token` | Token de verificación de email |\n\n##### Ejemplo de respuesta\n\n```json\n{\n    \"id\": \"07ea76e0-142f-499a-929f-bedb08c79624\",\n    \"email\": \"ricardohuaripatabellido@gmail.com\",\n    \"firstName\": \"Ricardo\",\n    \"lastName\": \"Huaripata\",\n    \"role\": \"ROLE_USER\",\n    \"emailVerified\": true,\n    \"dateCreated\": \"15-11-2023 18:56:01\",\n    \"dateLastModified\": \"20-11-2023 00:33:21\"\n}\n```\n\n#### Olvidé mi Contraseña\n\nSolicita restablecer la contraseña olvidada del usuario.\n\n```http\n  POST /api/v1/auth/forgot-password\n```\n\n##### Parámetros\n| Tipo     | Nombre      | Descripción              |\n|----------|-------------|--------------------------|\n| `Body`   | `forgotPasswordDto` | Email del usuario |\n\n##### Ejemplo de solicitud\n\n```json\n{\n    \"email\": \"ricardohuaripatabellido@gmail.com\"\n}\n```\n\n##### Ejemplo de respuesta\n\n```json\n{\n    \"message\": \"Please, check your email.\",\n    \"timestamp\": \"19-11-2023 21:26:39\"\n}\n```\n\n#### Reiniciar Contraseña\n\nRestablece la contraseña del usuario utilizando un token de restablecimiento de contraseña.\n\n```http\n  POST /api/v1/auth/reset-password/{token}\n```\n\n##### Parámetros\n| Tipo     | Nombre      | Descripción              |\n|----------|-------------|--------------------------|\n| `Body`   | `resetPasswordDto` | Nueva contraseña para restablecer la contraseña |\n| `Path`   | `token` | Token de restablecimiento de contraseña |\n\n\n##### Ejemplo de solicitud\n\n```json\n{\n    \"password\": \"RicardoDev.12\",\n    \"passwordRepeat\": \"RicardoDev.12\"\n}\n```\n\n#### Añadir dirección de envío (Requiere autenticación)\n\nPermite añadir una dirección de envio a la lista de direcciones del usuario.\n\n```http\n  POST /api/v1/user/account/shipping-address\n```\n\n##### Parámetros\n| Tipo     | Nombre      | Descripción              |\n|----------|-------------|--------------------------|\n| `Body`   | `shippingAddressDto` | Datos de la dirección |\n\n##### Ejemplo de solicitud\n\n```json\n{\n    \"firstName\": \"Ricardo\",\n    \"lastName\": \"Huaripata\",\n    \"country\": \"España\",\n    \"city\": \"Málaga\",\n    \"postalCode\": \"49023\",\n    \"address\": \"Calle Vergara, Nº 13, 2ºA\",\n    \"contactPhone\": \"67040813\"\n}\n```\n\n#### Actualizar detalles del usuario (Requiere autenticación)\n\nPermite actualizar detalles del usuario.\n\n```http\n  PATCH /api/v1/user/account/details\n```\n\n##### Parámetros\n| Tipo     | Nombre      | Descripción              |\n|----------|-------------|--------------------------|\n| `Body`   | `UpdateUserDto` | Datos del usuario para actualizar |\n\n##### Ejemplo de solicitud\n\n```json\n{\n    \"firstName\": \"Nombre actualizado\",\n    \"lastName\": \"Apellido actualizado\"\n}\n```\n\n##### Ejemplo de respuesta\n\n```json\n{\n    \"id\": \"07ea76e0-142f-499a-929f-bedb08c79624\",\n    \"email\": \"ricardohuaripatabellido@gmail.com\",\n    \"firstName\": \"Nombre actualizado\",\n    \"lastName\": \"Apellido actualizado\",\n    \"role\": \"ROLE_USER\",\n    \"emailVerified\": false,\n    \"dateCreated\": \"15-11-2023 18:56:01\",\n    \"dateLastModified\": \"08-12-2023 21:54:59\"\n}\n```\n\n### Carrito\n\n#### Obtener Carrito\n\nObtiene información sobre un carrito específico.\n\n```http\n  GET /api/v1/cart/{cartId}\n```\n\n##### Parámetros\n| Tipo     | Nombre      | Descripción              |\n|----------|-------------|--------------------------|\n| `Path`   | `cartId` | ID del carrito |\n\n##### Ejemplo de respuesta\n\n```json\n{\n    \"id\": \"52f1839a-a010-4ccd-922d-e990cfa530f3\",\n    \"dateCreated\": \"17-11-2023 01:53:14\",\n    \"dateLastModified\": \"17-11-2023 01:53:14\",\n    \"dateExpiration\": \"15-12-2023 01:53:14\",\n    \"cartItems\": [\n        {\n            \"id\": \"7f1ba2c2-e4c3-4a09-86e0-3613d417ed53\",\n            \"quantity\": 2,\n            \"sizeColorProductVariant\": {\n                \"id\": \"757d3745-0168-4d1c-a699-195fca04947f\",\n                \"colorProductVariant\": {\n                    \"id\": \"571a42a0-4dcb-4a21-a8c8-f13852850ffc\",\n                    \"product\": {\n                        \"id\": \"2d271f27-f6be-4357-bac1-f92289cb2ddc\",\n                        \"title\": \"FATALITY - Hoodie\",\n                        \"slug\": \"fatality-hoodie\",\n                        \"description\": \"Esto es una descripcion.\",\n                        \"category\": {\n                            \"id\": \"dad347c3-7ea6-457e-9bf4-b8b3f976c812\",\n                            \"title\": \"LOS CLÁSICOS\",\n                            \"slug\": \"los-clasicos\",\n                            \"featuredImageUrl\": \"https://image-url.jpg\",\n                            \"dateCreated\": \"15-11-2023 19:18:32\",\n                            \"dateLastModified\": \"15-11-2023 19:18:32\"\n                        },\n                        \"dateCreated\": \"16-11-2023 01:14:04\",\n                        \"dateLastModified\": \"16-11-2023 01:14:04\"\n                    },\n                    \"color\": {\n                        \"id\": \"890e6b76-c264-4520-b70e-d564c62096f8\",\n                        \"title\": \"White\",\n                        \"hexCode\": \"FFFFFF\",\n                        \"slug\": \"white\",\n                        \"dateCreated\": \"16-11-2023 01:08:36\",\n                        \"dateLastModified\": \"16-11-2023 01:08:36\"\n                    },\n                    \"basePrice\": 42.99,\n                    \"finalPrice\": 42.99,\n                    \"mainImageUrl\": \"https://image-url.jpg\",\n                    \"productImageList\": [],\n                    \"dateCreated\": \"16-11-2023 15:51:06\",\n                    \"dateLastModified\": \"16-11-2023 15:51:06\"\n                },\n                \"size\": \"XL\",\n                \"stock\": 99,\n                \"dateCreated\": \"16-11-2023 18:09:40\",\n                \"dateLastModified\": \"16-11-2023 18:09:40\"\n            }\n        }\n    ],\n    \"totalAmount\": 85.98,\n    \"totalQuantity\": 2\n}\n```\n\n#### Crear Carrito\n\nCrea un nuevo carrito de compras.\n\n```http\n  POST /api/v1/cart\n```\n\n##### Ejemplo de respuesta\n\n```json\n{\n    \"id\": \"52f1839a-a010-4ccd-922d-e990cfa530f3\",\n    \"dateCreated\": \"17-11-2023 01:53:14\",\n    \"dateLastModified\": \"17-11-2023 01:53:14\",\n    \"dateExpiration\": \"15-12-2023 01:53:14\",\n    \"cartItems\": [],\n    \"totalAmount\": 0,\n    \"totalQuantity\": 0\n}\n```\n\n#### Agregar al Carrito\n\nAgrega un artículo al carrito de compras.\n\n```http\n  PATCH /api/v1/cart/{cartId}\n```\n\n##### Parámetros\n| Tipo     | Nombre      | Descripción              |\n|----------|-------------|--------------------------|\n| `Path`   | `cartId` | ID del carrito |\n| `Body`   | `cartItemDto` | ID del variante talla-color del producto por añadir |\n\n#### Limpiar Carrito\n\nElimina todos los artículos del carrito.\n\n```http\n  DELETE /api/v1/cart/{cartId}/items\n```\n\n##### Parámetros\n| Tipo     | Nombre      | Descripción              |\n|----------|-------------|--------------------------|\n| `Path`   | `cartId` | ID del carrito |\n\n#### Eliminar Artículo del Carrito\n\nElimina un artículo específico del carrito.\n\n```http\n  DELETE /api/v1/cart/items/{cartItemId}\n```\n\n##### Parámetros\n| Tipo     | Nombre      | Descripción              |\n|----------|-------------|--------------------------|\n| `Path`   | `cartItemId` | ID del artículo del carrito |\n\n### Pedido\n\n#### Obtener Pedido por ID (Requiere autenticación de Admin o propietario del pedido)\n\nObtiene detalles de un pedido específico por su ID.\n\n```http\n  GET /api/v1/order/{orderId}\n```\n\n##### Parámetros\n| Tipo     | Nombre      | Descripción              |\n|----------|-------------|--------------------------|\n| `Path`   | `orderId` | ID del pedido |\n\n##### Ejemplo de respuesta\n\n```json\n{\n    \"id\": \"7c72ff82-5f49-456e-a654-14dcccc8c403\",\n    \"user\": {\n        \"id\": \"07ea76e0-142f-499a-929f-bedb08c79624\",\n        \"email\": \"ricardohuaripatabellido@gmail.com\",\n        \"firstName\": \"Ricardo\",\n        \"lastName\": \"Huaripata\",\n        \"role\": \"ROLE_ADMIN\",\n        \"emailVerified\": true,\n        \"dateCreated\": \"15-11-2023 18:56:01\",\n        \"dateLastModified\": \"15-11-2023 18:56:01\"\n    },\n    \"status\": \"pending\",\n    \"chargeId\": \"ch_3OFLqXEARNZfy9ac1W7bWZgh\",\n    \"firstName\": \"Ricardo\",\n    \"lastName\": \"Huaripata\",\n    \"country\": \"España\",\n    \"city\": \"Málaga\",\n    \"postalCode\": \"49023\",\n    \"address\": \"Calle Juan Alberto, Nº 13, 2ºA\",\n    \"contactPhone\": \"77040813\",\n    \"orderDate\": \"22-11-2023 19:12:30\",\n    \"orderItems\": [\n        {\n            \"id\": \"4245708c-df1a-490e-8fb4-fcbd1f016242\",\n            \"sizeColorProductVariant\": {\n                \"id\": \"ca1703a0-4a50-4df0-a382-db5c090192d5\",\n                \"colorProductVariant\": {\n                    \"id\": \"01326f52-c1a8-40e9-8c09-ff5b54b52321\",\n                    \"product\": {\n                        \"id\": \"4e3a9b56-afea-4402-b9a2-0de47db43cae\",\n                        \"title\": \"ALFRED - Hoodie\",\n                        \"slug\": \"alfred-hoodie\",\n                        \"description\": \"Ssfasfxawqeuwieuwiesxnvkzas.\",\n                        \"category\": {\n                            \"id\": \"dad347c3-7ea6-457e-9bf4-b8b3f976c812\",\n                            \"title\": \"LOS CLÁSICOS\",\n                            \"slug\": \"los-clasicos\",\n                            \"featuredImageUrl\": \"https://image-url.jpg\",\n                            \"dateCreated\": \"15-11-2023 19:18:32\",\n                            \"dateLastModified\": \"15-11-2023 19:18:32\"\n                        },\n                        \"dateCreated\": \"16-11-2023 01:16:39\",\n                        \"dateLastModified\": \"16-11-2023 01:16:39\"\n                    },\n                    \"color\": {\n                        \"id\": \"0c912c8b-6129-4292-9da4-5fbc6dc24682\",\n                        \"title\": \"Black\",\n                        \"hexCode\": \"000000\",\n                        \"slug\": \"black\",\n                        \"dateCreated\": \"16-11-2023 01:08:15\",\n                        \"dateLastModified\": \"16-11-2023 01:08:15\"\n                    },\n                    \"basePrice\": 42.99,\n                    \"finalPrice\": 42.99,\n                    \"mainImageUrl\": \"https://image-url.jpg\",\n                    \"productImageList\": [],\n                    \"dateCreated\": \"16-11-2023 15:55:53\",\n                    \"dateLastModified\": \"16-11-2023 15:55:53\"\n                },\n                \"size\": \"S\",\n                \"stock\": 96,\n                \"dateCreated\": \"16-11-2023 18:11:54\",\n                \"dateLastModified\": \"22-11-2023 19:12:30\"\n            },\n            \"quantity\": 3,\n            \"unitPrice\": 42.99\n        }\n    ],\n    \"totalQuantity\": 3,\n    \"totalAmount\": 128.97\n}\n```\n\n#### Crear Pedido (Requiere autenticación)\n\nCrea un nuevo pedido.\n\n```http\n  POST /api/v1/order\n```\n\n##### Parámetros\n| Tipo     | Nombre      | Descripción              |\n|----------|-------------|--------------------------|\n| `Body`   | `orderDto` | Detalles del pedido |\n\n##### Ejemplo de solicitud\n\n```json\n{\n    \"cartId\": \"52f1839a-a010-4ccd-922d-e990cfa530f3\",\n    \"cardNumber\": \"4242424242424242\",\n    \"expMonth\": \"05\",\n    \"expYear\": \"28\",\n    \"cvc\": \"333\",    \n    \"firstName\": \"Ricardo\",\n    \"lastName\": \"Huaripata\",\n    \"country\": \"España\",\n    \"city\": \"Málaga\",\n    \"postalCode\": \"49023\",\n    \"address\": \"Calle Juan Alberto, Nº 13, 2ºA\",\n    \"contactPhone\": \"77040813\"\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fricardohuaripata%2Fspring-ecommerce-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fricardohuaripata%2Fspring-ecommerce-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fricardohuaripata%2Fspring-ecommerce-api/lists"}