{"id":25457651,"url":"https://github.com/juliorom/ecommerce-core","last_synced_at":"2026-04-12T09:38:37.516Z","repository":{"id":276848265,"uuid":"929620816","full_name":"JulioRom/ecommerce-core","owner":"JulioRom","description":"Este proyecto es una API REST de e-commerce desarrollada con Spring Boot, que gestiona carritos de compra en MongoDB y transacciones en PostgreSQL. Implementa Spring Security con JWT para autenticación y autorización, permitiendo la compra segura de productos y el control de acceso según roles (USER, ADMIN). 🚀","archived":false,"fork":false,"pushed_at":"2025-02-18T07:11:45.000Z","size":213,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-16T20:08:23.954Z","etag":null,"topics":["automation-testing","docker","integration-testing","java-17","jdk17","jwt-authentication","lombok","mongodb-database","postgresql-database","spring-boot","spring-security","swagger-ui","unit-testing"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JulioRom.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2025-02-09T00:59:27.000Z","updated_at":"2025-02-18T07:11:49.000Z","dependencies_parsed_at":"2025-05-16T20:08:25.220Z","dependency_job_id":"705d8c89-32a9-43b4-9f22-2a80ec733f7e","html_url":"https://github.com/JulioRom/ecommerce-core","commit_stats":null,"previous_names":["juliorom/ecommerce-core"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JulioRom/ecommerce-core","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulioRom%2Fecommerce-core","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulioRom%2Fecommerce-core/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulioRom%2Fecommerce-core/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulioRom%2Fecommerce-core/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JulioRom","download_url":"https://codeload.github.com/JulioRom/ecommerce-core/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JulioRom%2Fecommerce-core/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267327534,"owners_count":24069442,"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-07-27T02:00:11.917Z","response_time":82,"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":["automation-testing","docker","integration-testing","java-17","jdk17","jwt-authentication","lombok","mongodb-database","postgresql-database","spring-boot","spring-security","swagger-ui","unit-testing"],"created_at":"2025-02-18T02:18:21.461Z","updated_at":"2026-04-12T09:38:32.472Z","avatar_url":"https://github.com/JulioRom.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📦 Ecommerce API\n\nEcommerce API es un backend desarrollado en **Spring Boot** para la gestión de una tienda en línea. Incluye autenticación con **JWT**, gestión de usuarios, productos, carritos de compra y compras.\n\n## 🚀 Características\n👉 **Autenticación y autorización con JWT**  \n👉 **CRUD de usuarios** (registro, login, búsqueda, actualización y eliminación)  \n👉 **Gestión de productos** (crear, listar, buscar, actualizar y eliminar)  \n👉 **Carrito de compras** (agregar, eliminar y vaciar productos)  \n👉 **Proceso de compra** (validación de stock y confirmación de pedido)  \n👉 **Documentación con Swagger** (Exploración y prueba de endpoints)\n\n---\n\n## 🎠 Tecnologías Utilizadas\n- **Spring Boot 3.4.2** - Framework principal\n- **Spring Security \u0026 JWT** - Autenticación y autorización\n- **Spring Data JPA** - Acceso a PostgreSQL\n- **Spring Data MongoDB** - Acceso a MongoDB\n- **Hibernate** - ORM para PostgreSQL\n- **MongoDB** (Gestión del carrito de compras)\n- **Jakarta Validation** - Validaciones de datos\n- **Lombok** - Reducción de código repetitivo\n- **Swagger OpenAPI** - Documentación de la API\n- **JUnit 5 \u0026 Mockito** - Pruebas unitarias e integración\n- **Docker \u0026 Docker Compose** - Contenerización del sistema\n- **Maven** (Gestión de dependencias)\n\n---\n\n## 🛠️ Instalación y Configuración\n\n1. Clonar el repositorio:\n   ```sh\n   git clone https://github.com/JulioRom/ecommerce-core.git\n   cd ecommerce-api\n   ```\n2. Configurar el archivo `.env` o `application.yml` con las credenciales de BD.\n3. Ejecutar con Docker Compose:\n   ```sh\n   docker-compose up -d\n   ```\n4. Para ejecutar las pruebas:\n   ```sh\n   mvn test\n   ```\n---\n\n## 🚀 Configuración de Variables de Entorno\n\nEste proyecto utiliza un archivo `.env` para almacenar configuraciones sensibles. **Por seguridad, el archivo `.env` no se incluye en el repositorio**. Sigue estos pasos para configurarlo:\n\n1. **Copia el archivo de referencia:**\n   cp .env.example .env\n2. **Edita el archivo `.env` y completa los valores según tu entorno.**\n\n📌 **Importante:** Nunca subas el archivo `.env` al repositorio, ya que contiene información sensible.\n\n---\n\n## 🔥 Endpoints Principales\n\n### **Autenticación**\n| Método | Endpoint               | Descripción |\n|--------|------------------------|-------------|\n| `POST` | `/api/auth/register`   | Registrar usuario |\n| `POST` | `/api/auth/login`      | Iniciar sesión y obtener JWT |\n\n### **Usuarios**\n| Método | Endpoint               | Descripción |\n|--------|------------------------|-------------|\n| `GET`  | `/api/usuarios`        | Listar usuarios (ADMIN) |\n| `GET`  | `/api/usuarios/{id}`   | Obtener usuario por ID |\n| `GET`  | `/api/usuarios/buscar` | Buscar usuario por username |\n| `PUT`  | `/api/usuarios/{username}` | Actualizar usuario |\n| `DELETE` | `/api/usuarios/{id}` | Eliminar usuario (ADMIN) |\n\n### **Productos**\n| Método  | Endpoint                | Descripción |\n|---------|-------------------------|-------------|\n| `GET`   | `/api/productos`        | Listar productos |\n| `GET`   | `/api/productos/{codigoProducto}` | Obtener producto por código |\n| `POST`  | `/api/productos`        | Agregar producto (ADMIN) |\n| `PUT`   | `/api/productos/{codigoProducto}` | Actualizar producto (ADMIN) |\n| `DELETE`| `/api/productos/{codigoProducto}` | Eliminar producto (ADMIN) |\n\n### **Compras**\n| Método  | Endpoint                        | Descripción |\n|---------|---------------------------------|-------------|\n| `POST`  | `/api/compras/{idUsuario}`      | Generar una nueva compra |\n| `GET`   | `/api/compras/usuario/id/{idUsuario}` | Obtener órdenes de un usuario por ID |\n| `GET`   | `/api/compras/usuario/username/{username}` | Obtener órdenes de un usuario por username |\n| `GET`   | `/api/compras/{idOrden}`        | Obtener una orden de compra por ID |\n| `PUT`   | `/api/compras/{idOrden}/estado` | Actualizar el estado de una orden (ADMIN) |\n| `DELETE`| `/api/compras/{idOrden}/cancelar` | Cancelar una orden de compra |\n\n### **Carrito de Compras**\n| Método  | Endpoint                         | Descripción |\n|---------|----------------------------------|-------------|\n| `POST`  | `/api/carrito/{identificador}`   | Agregar producto al carrito |\n| `GET`   | `/api/carrito/{identificador}`   | Obtener el carrito de un usuario |\n| `DELETE`| `/api/carrito/{identificador}/{codigoProducto}` | Eliminar un producto del carrito |\n| `DELETE`| `/api/carrito/{identificador}`   | Vaciar el carrito de compras |\n\n### **Pruebas y CORS**\n| Método  | Endpoint        | Descripción |\n|---------|---------------|-------------|\n| `GET`   | `/api/test`   | Prueba de conexión con el backend |\n| `OPTIONS` | `/api/test` | Verificar si CORS está habilitado |\n---\n\n## 🔒 Autenticación y Seguridad\n\n1. **Registro de Usuario:**\n   ```http\n   POST api/auth/register\n   ```\n2. **Inicio de Sesión:**\n   ```http\n   POST api/auth/login\n   ```\n   - Respuesta: JWT Token\n3. **Acceso a Endpoints Protegidos:**\n   - Enviar el token en el encabezado:\n     ```http\n     Authorization: Bearer \u003ctoken\u003e\n     ```\n---\n\n## ✅ Pruebas y Cobertura\n\nSe han implementado **pruebas unitarias y de integración** para validar la funcionalidad:\n\n| Servicio                | Pruebas Unitarias | Pruebas de Integración | Observaciones |\n|-------------------------|------------------|------------------------|--------------|\n| `UsuarioService`        | ✅ Sí            | ✅ Necesario           | Validar autenticación y persistencia |\n| `ProductoService`       | ✅ Sí            | ⚠️ Opcional            | Cobertura completa con unitarias |\n| `CompraService`         | ✅ Sí            | ✅ Necesario           | Validar persistencia en PostgreSQL |\n| `CarritoCompraService`  | ✅ Sí            | ✅ Necesario           | Validar persistencia en MongoDB |\n\n---\n\n## 📖 Documentación con Swagger\nSwagger permite explorar y probar la API de manera interactiva.\n\n📄 **Acceder a la documentación Swagger:**\n```url\nhttp://localhost:8080/swagger-ui/index.html\n```\n\n📄 **Obtener el archivo OpenAPI en JSON:**\n```url\nhttp://localhost:8080/v3/api-docs\n```\n\n📄 **Obtener el archivo OpenAPI en YAML:**\n```url\nhttp://localhost:8080/v3/api-docs.yaml\n```\n\n---\n\n# 🚀🔥 ¡Descubre la API en Acción con Swagger UI! 🔥🚀\n💡 **¿Listo para explorar la API como un PRO?** Hemos implementado una **documentación interactiva** donde puedes probar todos los endpoints, enviar solicitudes en tiempo real y autenticarte con JWT.\n\n📌 **¡No te quedes con la teoría, pruébala ahora mismo!** 👇👇\n\n## 🌍 **Accede a Swagger UI en vivo:**\n🎯 **[👉 Swagger UI - Ecommerce Core API 👈](https://ecommerce-core-production.up.railway.app/swagger-ui.html)** 🎯\n\n---\n\n## 🎯 **¿Qué puedes hacer en Swagger UI?**\n✅ 📄 **Ver toda la documentación de la API** en una interfaz intuitiva.  \n✅ 🔑 **Autenticarse con JWT** y probar endpoints protegidos de forma segura.  \n✅ 🚀 **Hacer solicitudes GET, POST, PUT, DELETE** con un solo clic.  \n✅ 📡 **Obtener respuestas en tiempo real** directamente desde el backend en producción.  \n✅ 💡 **Descubrir y probar nuevas funcionalidades** sin escribir código.\n\n\u003e **🔥 TIP:** Inicia sesión primero para obtener el token y úsalo en los endpoints protegidos.\n\n---\n\n### 🔥 **¡No esperes más! Haz clic y explora la API en vivo ahora mismo:**\n[![Swagger UI](https://img.shields.io/badge/Swagger-UI-green?style=for-the-badge\u0026logo=swagger)](https://ecommerce-core-production.up.railway.app/swagger-ui.html)\n\n---\n\n### 🔑 **Autenticación en Swagger**\nPara probar los endpoints protegidos, sigue estos pasos:\n\n1. **Ir a la sección \"Authorize\"** en Swagger UI.\n2. **Ingresar el token con el prefijo `Bearer`**, ejemplo:\n   ```\n   Bearer tu_token_aquí\n   ```\n3. **Hacer clic en \"Authorize\" y cerrar la ventana.**\n4. **Ahora podrás probar los endpoints protegidos.**\n\n📌 **Importante:**  \nPara obtener un token, primero debes autenticarte usando el endpoint `/api/auth/login`, enviando las credenciales en el cuerpo de la solicitud.\n\n---\n\n## 🔧 **Configuración y Ejecución en Local**\n### 📌 **Requisitos**\n- Java 17+\n- Maven\n- Docker (opcional, para bases de datos)\n\n### 🚀 **Ejecutar el Proyecto en Local**\n```bash\n# Clonar el repositorio\ngit clone https://github.com/JulioRom/ecommerce-core\ncd tu-repositorio\n\n# Configurar el perfil de desarrollo\nexport SPRING_PROFILES_ACTIVE=dev  # Linux/macOS\nset SPRING_PROFILES_ACTIVE=dev      # Windows\n\n# Ejecutar con Maven\nmvn spring-boot:run\n```\n\n### 🛠 **Variables de Entorno**\nCrea un archivo `.env` en la raíz del proyecto con las siguientes variables (para desarrollo):\n\n```env\nDATABASE_URL=jdbc:postgresql://localhost:5432/ecommerce\nDATABASE_USER=admin\nDATABASE_PASSWORD=admin\nMONGODB_URI=mongodb://localhost:27017/ecommerce\nJWT_SECRET=ClaveSecretaDesarrollo\nJWT_EXPIRATION=3600000\nCORS_ALLOWED_ORIGINS=http://localhost:3000\n```\n\n---\n\n## 📦 **Despliegue en Producción**\nEste proyecto está desplegado en **Railway**, donde Swagger UI está disponible para probar los endpoints.\n\n🔹 **Railway maneja las variables de entorno en la sección \"Variables\".**  \n🔹 **No es necesario un archivo `.env` en producción.**\n\n---\n\n## 📚 Estructura del Proyecto\n```\n📂 ecommerce-api\n ┗📂 src/main/java/com/springproject/ecommercecore\n   ┗📂 controller    # Controladores REST\n   ┗📂 model         # Modelos de la base de datos\n   ┗📂 repository    # Repositorios JPA y MongoDB\n   ┗📂 security      # Configuración de JWT y seguridad\n   ┗📂 service       # Lógica de negocio\n   ┗📂 dataaccess    # Acceso a base de datos (PostgreSQL/MongoDB)\n   ┗📂 exception     # Manejo de excepciones globales\n   ┗📂 config        # Configuraciones de la aplicación\n\n   ┗📚 EcommerceApplication.java  # Clase principal\n ┗📂 src/main/resources\n   ┗📚 application.properties  # Configuración del proyecto\n ┗📚 pom.xml  # Dependencias del proyecto\n```\n\n---\n\n## 🚀 Mejoras Futuras\n\n- Integración con **pasarelas de pago**.\n- Implementación de **WebSockets** para notificaciones en tiempo real.\n- Desarrollo del **frontend en React o Angular**.\n- Optimización de consultas con **Redis Cache**.\n---\n\n## 🧑‍💻 Autor\n\n- **Desarrollado por JulioRom**\n- 📧 **Correo:** [julioandrescampos@gmail.com](mailto:julioandrescampos@gmail.com)\n- 🔗 **GitHub:** [https://github.com/JulioRom](https://github.com/JulioRom)\n\n## 📜 Licencia\n\nEste proyecto está bajo la **Licencia MIT**. Consulta el archivo LICENSE para más detalles.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliorom%2Fecommerce-core","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuliorom%2Fecommerce-core","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliorom%2Fecommerce-core/lists"}