{"id":26562574,"url":"https://github.com/luisgrr/avalon_inventory_demo","last_synced_at":"2025-07-01T22:33:01.848Z","repository":{"id":283198120,"uuid":"950942764","full_name":"LuisGRR/Avalon_Inventory_DEMO","owner":"LuisGRR","description":"Sistema de inventario back-end RESTapi","archived":false,"fork":false,"pushed_at":"2025-03-19T02:31:32.000Z","size":64,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-04T01:02:58.143Z","etag":null,"topics":["java-17","postgresql","rest-api","spring-boot"],"latest_commit_sha":null,"homepage":"","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/LuisGRR.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}},"created_at":"2025-03-18T23:25:28.000Z","updated_at":"2025-03-19T02:31:34.000Z","dependencies_parsed_at":"2025-03-19T03:37:32.781Z","dependency_job_id":null,"html_url":"https://github.com/LuisGRR/Avalon_Inventory_DEMO","commit_stats":null,"previous_names":["luisgrr/avalon_inventory_demo"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/LuisGRR/Avalon_Inventory_DEMO","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuisGRR%2FAvalon_Inventory_DEMO","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuisGRR%2FAvalon_Inventory_DEMO/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuisGRR%2FAvalon_Inventory_DEMO/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuisGRR%2FAvalon_Inventory_DEMO/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LuisGRR","download_url":"https://codeload.github.com/LuisGRR/Avalon_Inventory_DEMO/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuisGRR%2FAvalon_Inventory_DEMO/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263046860,"owners_count":23405277,"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","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":["java-17","postgresql","rest-api","spring-boot"],"created_at":"2025-03-22T15:18:09.971Z","updated_at":"2025-07-01T22:33:01.745Z","avatar_url":"https://github.com/LuisGRR.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Avalon Inventory\n\n## Descripción\nAvalon Inventory es un sistema de gestión de inventario desarrollado en **Java 17** utilizando **Spring Boot** y el paradigma **Domain-Driven Design (DDD)**. La aplicación está contenedorizada con **Docker** y se puede desplegar fácilmente con **Docker Compose**.\n\nEl sistema implementa **autenticación y autorización con JWT**, permitiendo validar usuarios y roles. Se crea un usuario **ADMIN** por defecto con un rol **ADMIN** que tiene todos los permisos. La aplicación valida los permisos asignados a cada usuario y restringe el acceso a las funcionalidades según su rol.\n\n## Tecnologías utilizadas\n- **Java 17**\n- **Spring Boot**\n- **Domain-Driven Design (DDD)**\n- **JWT (JSON Web Token)**\n- **PostgreSQL**\n- **Docker \u0026 Docker Compose**\n\n---\n\n## Instalación y despliegue\n\n### Prerrequisitos\nAsegúrate de tener instalados los siguientes componentes en tu sistema:\n- [Docker](https://www.docker.com/)\n- [Docker Compose](https://docs.docker.com/compose/install/)\n\n### Construcción y despliegue del proyecto\n\n1. Clona el repositorio:\n   ```sh\n   git clone https://github.com/tu-usuario/avalon-inventory.git\n   cd avalon-inventory\n   ```\n\n2. Compila el proyecto y genera el JAR:\n   ```sh\n   ./mvnw clean package\n   ```\n\n3. Construye la imagen Docker:\n   ```sh\n   docker build -t avalon-inventory .\n   ```\n\n4. Inicia el entorno con Docker Compose:\n   ```sh\n   docker-compose up -d\n   ```\n\n5. La aplicación estará disponible en `http://localhost:9080`\n\n---\n\n## Configuración de entorno\nEl sistema utiliza variables de entorno para la conexión con la base de datos PostgreSQL:\n\n```sh\nSPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/db_avalon_inventory\nSPRING_DATASOURCE_USERNAME=merlin\nSPRING_DATASOURCE_PASSWORD=avalonpassword\nSPRING_SECURITY_JWT_SECRET=clave-secreta\n```\n\n---\n\n## Seguridad y Autenticación\nAvalon Inventory utiliza **JWT (JSON Web Token)** para la autenticación y autorización de usuarios. El sistema maneja **roles y permisos**, asegurando que cada usuario solo pueda acceder a las funcionalidades permitidas.\n\n- **Usuario y rol por defecto:**\n  - Se crea un usuario `ADMIN` por defecto.\n  - Se genera un rol `ADMIN` con acceso total al sistema.\n  - Todos los usuarios deben autenticarse con JWT para acceder a las rutas protegidas.\n\n---\n\n## Estructura del proyecto\nEl proyecto sigue el paradigma **Domain-Driven Design (DDD)** y está organizado de la siguiente manera:\n\n```\navalon-inventory/\n├── src/main/java/com/avalon/inventory/\n│   ├── application/   # Casos de uso y servicios\n│   ├── domain/        # Lógica de negocio y entidades\n│   ├── infrastructure/# Adaptadores y configuraciones\n│   │   └─── security/      # Configuración de seguridad y JWT\n│   ├── presentation/  \n│   │   └─── controller/ # Controladores REST\n│   ├── AvalonInventoryApplication.java\n├── src/main/resources/\n│   └── application.properties\n├── Dockerfile\n├── docker-compose.yml\n├── pom.xml  # Dependencias y configuración de Maven\n└── README.md\n```\n\n---\n\n## Dockerfile\n\n```dockerfile\nFROM openjdk:17-jdk-slim\nWORKDIR /app\nCOPY target/Avalon_Inventory.jar app.jar\nENTRYPOINT [\"java\", \"-jar\", \"app.jar\"]\nEXPOSE 9080\n```\n\n---\n\n## Docker Compose\n\n```yaml\nversion: \"3.88\"\nservices:\n  app:\n    image: avalon-inventory\n    build:\n      context: .\n      dockerfile: Dockerfile\n    container_name: avalon-inventory-container\n    ports:\n      - \"9080:9080\"\n    restart: always\n    environment:\n      SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/db_avalon_inventory\n      SPRING_DATASOURCE_USERNAME: merlin\n      SPRING_DATASOURCE_PASSWORD: avalonpassword\n      SPRING_SECURITY_JWT_SECRET: clave-secreta\n    depends_on:\n      - postgres\n\n  postgres:\n    image: postgres\n    restart: always\n    ports:\n      - \"5433:5432\"\n    environment:\n      - DATABASE_HOST=127.0.0.1\n      - POSTGRES_USER=merlin\n      - POSTGRES_PASSWORD=avalonpassword\n      - POSTGRES_DB=db_avalon_inventory\n    volumes:\n      - postgres_data:/var/lib/postgresql/data\n\nvolumes:\n  postgres_data:\n    driver: local\n```\n\n---\n\n## Comandos útiles\n\n### Parar y eliminar los contenedores\n```sh\ndocker-compose down\n```\n\n### Ver logs de la aplicación\n```sh\ndocker logs -f avalon-inventory-container\n```\n\n### Conectarse al contenedor de PostgreSQL\n```sh\ndocker exec -it $(docker ps -qf \"name=postgres\") psql -U merlin -d db_avalon_inventory\n```\n\n---\n\n## Licencia\nEste proyecto está bajo la licencia MIT. Para más detalles, consulta el archivo `LICENSE`.\n\n---\n\n## Contacto\n- **Autor**: Luis Gerardo Rivera Rivera\n- **Email**: tuemail@example.com\n- **Repositorio**: [GitHub](https://github.com/tu-usuario/avalon-inventory)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluisgrr%2Favalon_inventory_demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fluisgrr%2Favalon_inventory_demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluisgrr%2Favalon_inventory_demo/lists"}