.github/workflows
└── ci.yml
docs
├── database
│ ├── diagram
│ │ └── inventory-notification-der.png
│ └── database-description.md
├── email-notification
│ ├── picture
│ │ ├── email-daily-report.png
│ │ └── email-low-stock.png
│ └── email-notification.md
├── insomnia
│ └── insomnia-api-export
├── kafka
│ ├── diagram
│ │ ├── C4-component-diagram.png
│ │ └── C4-container-diagram.png
│ └── kafka-architecture.md
├── swagger-demonstration
│ ├── gifs
│ │ ├── diagram
│ │ ├── complete-and-interactive-documentation.gif
│ │ ├── complete-documentation.gif
│ │ ├── login-api-jwt.gif
│ │ ├── order-approve.gif
│ │ ├── order-creation.gif
│ │ ├── order-list.gif
│ │ ├── order-reject.gif
│ │ ├── order-update.gif
│ │ ├── people-and-users-list.gif
│ │ ├── person-softdelete-activate.gif
│ │ ├── person-user-create.gif
│ │ ├── product-list.gif
│ │ ├── product-registration.gif
│ │ ├── product-softdelete-activate.gif
│ │ ├── product-update.gif
│ │ ├── user-softdelete-activate.gif
│ │ ├── user-type-update.gif
│ │ └── user-update-password.gif
│ └── swagger-documentation.md
└── project-structure.md
src
├── main/java/com/github/renanc/vitor/inventory
│ ├── application
│ │ ├── authentication
│ │ │ ├── controller
│ │ │ │ └── AuthenticationController.java
│ │ │ ├── dto
│ │ │ │ ├── JWTTokenData.java
│ │ │ │ └── LoginData.java
│ │ │ └── service
│ │ │ ├── AuthenticationService.java
│ │ │ └── TokenService.java
│ │ ├── category
│ │ │ └── repository
│ │ │ └── CategoryRepository.java
│ │ ├── email
│ │ │ ├── dto
│ │ │ │ ├── EmailLogData.java
│ │ │ │ ├── EmailRequest.java
│ │ │ │ └── EmailResponse.java
│ │ │ └── service
│ │ │ └── EmailService.java
│ │ ├── errorlog
│ │ │ └── repository
│ │ │ └── ErrorLogRepository.java
│ │ ├── movement
│ │ │ ├── dto
│ │ │ │ ├── MovementData.java
│ │ │ │ ├── MovementDetailData.java
│ │ │ │ ├── MovementListingData.java
│ │ │ │ ├── MovementLogData.java
│ │ │ │ ├── MovementOrderRequest.java
│ │ │ │ ├── MovementRequest.java
│ │ │ │ └── MovementWithOrderRequest.java
│ │ │ ├── repository
│ │ │ │ ├── MovementRepository.java
│ │ │ │ └── MovementTypeRepository.java
│ │ │ └── service
│ │ │ ├── MovementReportService.java
│ │ │ ├── MovementService.java
│ │ │ └── ReportScheduler.java
│ │ ├── order
│ │ │ ├── controller
│ │ │ │ └── OrderController.java
│ │ │ ├── dto
│ │ │ │ ├── OrderCreationData.java
│ │ │ │ ├── OrderDetailData.java
│ │ │ │ ├── OrderFilter.java
│ │ │ │ ├── OrderItemRequest.java
│ │ │ │ ├── OrderLogData.java
│ │ │ │ └── OrderUpdateData.java
│ │ │ ├── repository
│ │ │ │ ├── OrderItemRepository.java
│ │ │ │ ├── OrderRepository.java
│ │ │ │ ├── OrderSpecifications.java
│ │ │ │ └── OrderStatusRepository.java
│ │ │ └── service
│ │ │ └── OrderService.java
│ │ ├── person
│ │ │ ├── controller
│ │ │ │ └── PersonController.java
│ │ │ ├── dto
│ │ │ │ ├── PersonCreationData.java
│ │ │ │ ├── PersonDetailData.java
│ │ │ │ ├── PersonListingData.java
│ │ │ │ ├── PersonLogData.java
│ │ │ │ └── PersonUserCreationData.java
│ │ │ ├── repository
│ │ │ │ └── PersonRepository.java
│ │ │ └── service
│ │ │ └── PersonService.java
│ │ ├── product
│ │ │ ├── controller
│ │ │ │ └── ProductController.java
│ │ │ ├── dto
│ │ │ │ ├── InputProductResponse.java
│ │ │ │ ├── OutputProductResponse.java
│ │ │ │ ├── ProductCreationData.java
│ │ │ │ ├── ProductDetailData.java
│ │ │ │ ├── ProductFilter.java
│ │ │ │ ├── ProductListingData.java
│ │ │ │ ├── ProductLogData.java
│ │ │ │ └── ProductUpdateData.java
│ │ │ ├── repository
│ │ │ │ ├── ProductRepository.java
│ │ │ │ └── ProductSpecifications.java
│ │ │ └── service
│ │ │ ├── ProductService.java
│ │ │ └── StockMonitorService.java
│ │ ├── systemlog
│ │ │ └── repository
│ │ │ └── SystemLogRepository.java
│ │ └── user
│ │ ├── controller
│ │ │ └── UserController.java
│ │ ├── dto
│ │ │ ├── UserCreationData.java
│ │ │ ├── UserDetailData.java
│ │ │ ├── UserListingData.java
│ │ │ ├── UserLogData.java
│ │ │ ├── UserLogPasswordData.java
│ │ │ ├── UserPasswordUpdateData.java
│ │ │ ├── UserSummaryData.java
│ │ │ └── UserTypeUpdateData.java
│ │ ├── repository
│ │ │ ├── UserRepository.java
│ │ │ └── UserTypeRepository.java
│ │ └── service
│ │ └── UserService.java
│ ├── domain
│ │ ├── entity
│ │ │ ├── category
│ │ │ │ ├── enums
│ │ │ │ │ └── CategoryEnum.java
│ │ │ │ └── CategoryEntity.java
│ │ │ ├── errorlog
│ │ │ │ ├── ErrorLog.java
│ │ │ │ └── ErrorLogEvent.java
│ │ │ ├── movement
│ │ │ │ ├── enums
│ │ │ │ │ └── MovementTypeEnum.java
│ │ │ │ ├── Movement.java
│ │ │ │ └── MovementTypeEntity.java
│ │ │ ├── order
│ │ │ │ ├── enums
│ │ │ | │ └── OrderStatusEnum.java
│ │ │ │ ├── exception
│ │ │ │ │ └── OrderStatusException.java
│ │ │ │ ├── Order.java
│ │ │ │ ├── OrderItem.java
│ │ │ │ └── OrderStatusEntity.java
│ │ │ ├── person
│ │ │ │ └── Person.java
│ │ │ ├── product
│ │ │ │ ├── exception
│ │ │ │ │ ├── DuplicateProductException.java
│ │ │ │ │ ├── InsufficientStockException.java
│ │ │ │ │ └── InvalidQuantityException.java
│ │ │ │ └── Product.java
│ │ │ ├── systemlog
│ │ │ │ ├── SystemLog.java
│ │ │ │ └── SystemLogEvent.java
│ │ │ └── user
│ │ │ ├── enums
│ │ │ │ ├── PermissionEnum.java
│ │ │ │ └── UserTypeEnum.java
│ │ │ ├── exception
│ │ │ │ └── AccessDeniedException.java
│ │ │ ├── PermissionEntity.java
│ │ │ ├── User.java
│ │ │ └── UserTypeEntity.java
│ │ └── events
│ │ ├── enums
│ │ │ └── EventVersions.java
│ │ ├── BusinessEvent.java
│ │ ├── DomainEventEnvelope.java
│ │ ├── DomainEventPublisher.java
│ │ ├── EventTypes.java
│ │ ├── OrderCreationEvent.java
│ │ └── StockBelowMinimumEvent.java
│ ├── exception
│ │ ├── factory
│ │ │ ├── NotFoundExceptionFactory.java
│ │ │ └── ValidationExceptionFactory.java
│ │ ├── handler
│ │ │ └── ErrorHandler.java
│ │ ├── model
│ │ │ ├── ApiError.java
│ │ │ └── DataValidationError.java
│ │ └── types
│ │ ├── auth
│ │ │ └── AuthorizationException.java
│ │ ├── common
│ │ │ ├── EntityNotFoundException.java
│ │ │ ├── JsonSerializationException.java
│ │ │ └── ValidationException.java
│ │ └── email
│ │ └── EmailException.java
│ ├── infra
│ │ ├── config
│ │ │ ├── AwsSesConfig.java
│ │ │ └── WebConfig.java
│ │ ├── documentation
│ │ │ └── SpringDocConfigurations.java
│ │ ├── messaging
│ │ │ ├── errorlog
│ │ │ │ ├── ErrorLogListener.java
│ │ │ │ └── ErrorLogPublisherService.java
│ │ │ ├── fallback
│ │ │ │ └── NoOpDomainEventPublisher.java
│ │ │ ├── kafka
│ │ │ │ ├── config
│ │ │ │ │ └── KafkaProducerConfig.java
│ │ │ │ ├── consumer
│ │ │ │ │ ├── OrderCreationKafkaConsumer.java
│ │ │ │ │ └── StockBelowMinimumKafkaConsumer.java
│ │ │ │ ├── idempotency
│ │ │ │ │ ├── EventDuplication.java
│ │ │ │ │ ├── JpaEventDuplication.java
│ │ │ │ │ ├── ProcessedEvent.java
│ │ │ │ │ └── ProcessedEventRepository.java
│ │ │ │ ├── observability
│ │ │ │ │ └── CorrelationIdFilter.java
│ │ │ │ ├── producer
│ │ │ │ │ └── KafkaDomainEventPublisher.java
│ │ │ │ ├── routing
│ │ │ │ │ └── KafkaEventRouting.java
│ │ │ │ └── topic
│ │ │ │ └── KafkaTopics.java
│ │ │ └── systemlog
│ │ │ ├── LoggableData.java
│ │ │ ├── SystemLogListener.java
│ │ │ └── SystemLogPublisherService.java
│ │ ├── outbox
│ │ │ ├── entity
│ │ │ │ ├── OutboxEventEntity.java
│ │ │ │ └── OutboxStatus.java
│ │ │ ├── publisher
│ │ │ │ ├── OutboxPublisherService.java
│ │ │ │ └── OutboxService.java
│ │ │ ├── repository
│ │ │ │ └── OutboxEventRepository.java
│ │ │ └── scheduler
│ │ │ ├── OutboxScheduler.java
│ │ │ └── OutboxSchedulerConfig.java
│ │ └── security
│ │ ├── SecurityConfiguration.java
│ │ └── SecurityFilter.java
│ ├── shared
│ │ ├── CustomPage.java
│ │ ├── PageMapper.java
│ │ └── StackTraceUtils.java
│ └── InventoryNotificationSystemBackendApplication.java
├── resources
│ ├── db
│ │ ├── V1__create_table_system_logs.sql
│ │ ├── V2__create_table_people.sql
│ │ ├── V3__create_table_permissions.sql
│ │ ├── V4__create_table_user_types.sql
│ │ ├── V5__create_table_user_types_permissions.sql
│ │ ├── V6__seed_user_types_and_permissions.sql
│ │ ├── V7__create_table_users.sql
│ │ ├── V8__create_table_categories.sql
│ │ ├── V9__create_table_products.sql
│ │ ├── V10__seed_categories.sql
│ │ ├── V11__create_table_error_logs.sql
│ │ ├── V12__insert_admin_user.sql
│ │ ├── V13__create_table_order_status.sql
│ │ ├── V14__create_table_orders.sql
│ │ ├── V15__seed_order_status.sql
│ │ ├── V16__create_table_movement_types.sql
│ │ ├── V17__create_table_movements.sql
│ │ ├── V18__seed_movement_types.sql
│ │ ├── V19__create_table_order_item.sql
│ │ ├── V20__create_table_events_kafka.sql
│ │ └── V21__create_table_outbox_events.sql
│ ├── application-dev.properties
│ ├── application-prod.properties
│ ├── application-secret.properties # Oculto, possui dados sensíveis
│ └── application.properties
├── test/java/com/github/renancvitor/inventory
│ ├── controller
│ │ ├── authentication
│ │ │ └── AuthenticationControllerTests.java
│ │ ├── order
│ │ │ ├── OrderControllerApproveTests.java
│ │ │ ├── OrderControllerCreationTests.java
│ │ │ ├── OrderControllerListTests.java
│ │ │ ├── OrderControllerRejectTests.java
│ │ │ └── OrderControllerUpdateTests.java
│ │ ├── person
│ │ │ ├── PersonControllerActivateTests.java
│ │ │ ├── PersonControllerCreateTests.java
│ │ │ ├── PersonControllerDeleteTests.java
│ │ │ └── PersonControllerListTests.java
│ │ ├── product
│ │ │ ├── ProductControllerActivateTests.java
│ │ │ ├── ProductControllerCreateTests.java
│ │ │ ├── ProductControllerDeleteTests.java
│ │ │ ├── ProductControllerListTests.java
│ │ │ └── ProductControllerUpdateTests.java
│ │ └── user
│ │ ├── UserControllerActivateTests.java
│ │ ├── UserControllerDeleteTests.java
│ │ ├── UserControllerListTests.java
│ │ ├── UserControllerUpdatePasswordTests.java
│ │ └── UserControllerUpdateUserTypeTests.java
│ ├── service
│ │ ├── authentication
│ │ │ ├── AuthenticationServiceTests.java
│ │ │ └── TokenServiceTests.java
│ │ ├── email
│ │ │ └── EmailServiceTests.java
│ │ ├── movement
│ │ │ ├── MovementReportServiceTests.java
│ │ │ └── MovementServiceTests.java
│ │ ├── order
│ │ │ ├── OrderServiceApproveTests.java
│ │ │ ├── OrderServiceCreateTests.java
│ │ │ ├── OrderServiceListTests.java
│ │ │ ├── OrderServiceRejectTests.java
│ │ │ └── OrderServiceUpdateTests.java
│ │ ├── person
│ │ │ ├── PersonServiceActivateTests.java
│ │ │ ├── PersonServiceCreateTests.java
│ │ │ ├── PersonServiceDeleteTests.java
│ │ │ └── PersonServiceListTests.java
│ │ ├── product
│ │ │ ├── ProductServiceActivateTests.java
│ │ │ ├── ProductServiceCreateTests.java
│ │ │ ├── ProductServiceDeleteTests.java
│ │ │ ├── ProductServiceListTests.java
│ │ │ └── ProductServiceUpdateTests.java
│ │ └── user
│ │ ├── UserServiceActivateTests.java
│ │ ├── UserServiceDeleteTests.java
│ │ ├── UserServiceListTests.java
│ │ ├── UserServiceUpdatePasswordTests.java
│ │ └── UserServiceUpdateUserTypeTests.java
│ ├── utils
│ │ └── TestEntityFactory.java
│ └── InventoryNotificationSystemBackendApplicationTests.java
├── resources
│ ├── payload
│ │ ├── order-creation.jsonl
│ │ ├── person-user-creation.jsonl
│ │ └── product-creation.jsonl
│ ├── application-test-secret.properties
│ └── application-test.properties
├── LICENSE
└── README.md
Estrutura atualizada em: Dezembro/2025