- 프로젝트 이름: EvERP
- 프로젝트 설명: 전사적 자원관리(ERP)를 기반으로 마이크로 서비스 아키텍처(MSA)를 적용한 웹 및 모바일 통합 시스템 개발 프로젝트
| 김대환 | 김호집 | 권오윤 | 박지원 | 오창은 | 최동진 |
|---|---|---|---|---|---|
![]() |
|||||
| BackEnd iOS |
Infra BackEnd |
FrontEnd iOS |
BackEnd Android |
FrontEnd | BackEnd |
| 영역 | 주요 사용 기술 |
|---|---|
| FrontEnd | |
| BackEnd | |
| Android | |
| iOS | |
| Infra & Collaboration |
src
├── app
│ ├── (private)
│ │ ├── _PrivateGuard.tsx
│ │ ├── alarm
│ │ │ ├── AlarmList.tsx
│ │ │ └── page.tsx
│ │ ├── dashboard
│ │ │ ├── components
│ │ │ │ ├── ActionCard.tsx
│ │ │ │ ├── QuickActions.tsx
│ │ │ │ ├── ReportDownloadModal.tsx
│ │ │ │ └── WorkflowStatus.tsx
│ │ │ ├── dashboard.api.ts
│ │ │ ├── dashboard.service.ts
│ │ │ ├── dashboard.utils.ts
│ │ │ ├── page.tsx
│ │ │ └── types
│ │ │ ├── ActionCardType.ts
│ │ │ ├── DashboardStatsType.ts
│ │ │ ├── DashboardWorkflowType.ts
│ │ │ └── ReportDownloadModalType.ts
│ │ ├── finance
│ │ │ ├── components
│ │ │ │ ├── modals
│ │ │ │ │ └── InvoiceDetailModal.tsx
│ │ │ │ └── tabs
│ │ │ │ ├── FinanceTabs.tsx
│ │ │ │ └── InvoiceList.tsx
│ │ │ ├── constants.ts
│ │ │ ├── finance.api.ts
│ │ │ ├── finance.service.ts
│ │ │ ├── page.tsx
│ │ │ ├── types
│ │ │ │ ├── FinanceStatsType.ts
│ │ │ │ ├── InvoiceDetailModalType.ts
│ │ │ │ └── InvoiceListType.ts
│ │ │ └── utils.ts
│ │ ├── hrm
│ │ │ ├── api
│ │ │ │ ├── hrm.api.ts
│ │ │ │ └── hrm.endpoints.ts
│ │ │ ├── components
│ │ │ │ ├── modals
│ │ │ │ │ ├── AddEmployeeTrainingModal.tsx
│ │ │ │ │ ├── AddProgramModal.tsx
│ │ │ │ │ ├── AttendanceEditModal.tsx
│ │ │ │ │ ├── DepartmentDetailModal.tsx
│ │ │ │ │ ├── DepartmentEditModal.tsx
│ │ │ │ │ ├── EmployeeDetailModal.tsx
│ │ │ │ │ ├── EmployeeEditModal.tsx
│ │ │ │ │ ├── EmployeeRegisterModal.tsx
│ │ │ │ │ ├── PayrollDetailModal.tsx
│ │ │ │ │ ├── PositionDetailModal.tsx
│ │ │ │ │ ├── ProgramDetailModal.tsx
│ │ │ │ │ ├── ProgramEditModal.tsx
│ │ │ │ │ └── TrainingDetailModal.tsx
│ │ │ │ └── tabs
│ │ │ │ ├── mainTab
│ │ │ │ │ ├── AttendanceManagement.tsx
│ │ │ │ │ ├── EmployeeManagement.tsx
│ │ │ │ │ ├── PayrollManagement.tsx
│ │ │ │ │ └── TrainingManagement.tsx
│ │ │ │ └── subTab
│ │ │ │ ├── attendanceTab
│ │ │ │ │ ├── AttendanceTab.tsx
│ │ │ │ │ └── LeaveTab.tsx
│ │ │ │ ├── employeeTab
│ │ │ │ │ ├── DepartmentsTab.tsx
│ │ │ │ │ └── EmployeesTab.tsx
│ │ │ │ └── trainingTab
│ │ │ │ ├── AvailableProgramTab.tsx
│ │ │ │ └── EmployeeTrainingTab.tsx
│ │ │ ├── constants.ts
│ │ │ ├── page.tsx
│ │ │ ├── services
│ │ │ │ └── hrm.service.ts
│ │ │ └── types
│ │ │ ├── HrmAttendanceApiType.ts
│ │ │ ├── HrmDepartmentsApiType.ts
│ │ │ ├── HrmDropdownApiType.ts
│ │ │ ├── HrmEmployeesApiType.ts
│ │ │ ├── HrmLeaveApiType.ts
│ │ │ ├── HrmPayrollApiType.ts
│ │ │ ├── HrmPositionsApiType.ts
│ │ │ ├── HrmProgramApiType.ts
│ │ │ ├── HrmStatsApiType.ts
│ │ │ └── HrmTrainingApiType.ts
│ │ ├── inventory
│ │ │ ├── components
│ │ │ │ ├── LowStockAlert.tsx
│ │ │ │ ├── StockMovement.tsx
│ │ │ │ ├── modals
│ │ │ │ │ ├── AddInventoryModal.tsx
│ │ │ │ │ ├── InventoryDetailModal.tsx
│ │ │ │ │ ├── InventoryMoveModal.tsx
│ │ │ │ │ ├── InventoryPurchaseRequestModal.tsx
│ │ │ │ │ ├── InventorySafetyStockModal.tsx
│ │ │ │ │ └── ShippingDetailModal.tsx
│ │ │ │ └── tabs
│ │ │ │ ├── InventoryList.tsx
│ │ │ │ ├── ReceivingManagementList.tsx
│ │ │ │ └── ShippingManagementList.tsx
│ │ │ ├── inventory.api.ts
│ │ │ ├── inventory.constants.ts
│ │ │ ├── inventory.service.ts
│ │ │ ├── inventory.utils.ts
│ │ │ ├── page.tsx
│ │ │ └── types
│ │ │ ├── AddInventoryModalType.ts
│ │ │ ├── InventoryDetailModalType.ts
│ │ │ ├── InventoryListType.ts
│ │ │ ├── InventoryMoveModalType.ts
│ │ │ ├── InventorySafetyStockModalType.ts
│ │ │ ├── InventoryStatsType.ts
│ │ │ ├── ItemListType.ts
│ │ │ ├── ReceivingManagementListType.ts
│ │ │ ├── ShippingDetailModalType.ts
│ │ │ ├── ShippingManagementListType.ts
│ │ │ └── StockMovement.ts
│ │ ├── layout.tsx
│ │ ├── low-stock
│ │ │ ├── components
│ │ │ │ └── LowStockList.tsx
│ │ │ ├── lowStock.api.ts
│ │ │ ├── lowStock.service.ts
│ │ │ ├── page.tsx
│ │ │ └── types
│ │ │ ├── LowStockAlertType.ts
│ │ │ ├── LowStockListType.ts
│ │ │ └── LowStockStatsType.ts
│ │ ├── production
│ │ │ ├── api
│ │ │ │ ├── production.api.ts
│ │ │ │ └── production.endpoints.ts
│ │ │ ├── components
│ │ │ │ ├── modals
│ │ │ │ │ ├── BomDetailModal.tsx
│ │ │ │ │ ├── BomInputFormModal.tsx
│ │ │ │ │ ├── MpsPreviewModal.tsx
│ │ │ │ │ ├── MrpPurchaseRequestModal.tsx
│ │ │ │ │ ├── ProcessDetailModal.tsx
│ │ │ │ │ └── SimulationResultModal.tsx
│ │ │ │ └── tabs
│ │ │ │ ├── BomTab.tsx
│ │ │ │ ├── MesTab.tsx
│ │ │ │ ├── MpsTab.tsx
│ │ │ │ ├── MrpTab.tsx
│ │ │ │ ├── OrdersTab.tsx
│ │ │ │ ├── PlannedOrdersTab.tsx
│ │ │ │ └── QuotationTab.tsx
│ │ │ ├── constants.ts
│ │ │ ├── page.tsx
│ │ │ ├── services
│ │ │ │ └── production.service.ts
│ │ │ └── types
│ │ │ ├── BomDetailApiType.ts
│ │ │ ├── BomListApiType.ts
│ │ │ ├── BomType.ts
│ │ │ ├── DropdownApiType.ts
│ │ │ ├── MesDetailApiType.ts
│ │ │ ├── MesListApiType.ts
│ │ │ ├── MpsApiType.ts
│ │ │ ├── MrpOrdersApiType.ts
│ │ │ ├── MrpOrdersConvertApiType.ts
│ │ │ ├── MrpPlannedOrdersDetailApiType.ts
│ │ │ ├── MrpPlannedOrdersListApiType.ts
│ │ │ ├── ProductionStatsType.ts
│ │ │ ├── QuotationApiType.ts
│ │ │ ├── QuotationPreviewApiType.ts
│ │ │ └── QuotationSimulationApiType.ts
│ │ ├── purchase
│ │ │ ├── api
│ │ │ │ ├── purchase.api.ts
│ │ │ │ └── purchase.endpoints.ts
│ │ │ ├── components
│ │ │ │ ├── modals
│ │ │ │ │ ├── PurchaseOrderDetailModal.tsx
│ │ │ │ │ ├── PurchaseRequestDetailModal.tsx
│ │ │ │ │ ├── PurchaseRequestModal.tsx
│ │ │ │ │ ├── SupplierDetailModal.tsx
│ │ │ │ │ └── SupplierFormModal.tsx
│ │ │ │ ├── sections
│ │ │ │ │ ├── EditSupplierFormSection.tsx
│ │ │ │ │ ├── PurchaseOrderTableSection.tsx
│ │ │ │ │ └── PurchaseStatsSection.tsx
│ │ │ │ └── tabs
│ │ │ │ ├── PurchaseOrderListTab.tsx
│ │ │ │ ├── PurchaseRequestListTab.tsx
│ │ │ │ └── SupplierListTab.tsx
│ │ │ ├── constants.ts
│ │ │ ├── page.tsx
│ │ │ ├── services
│ │ │ │ └── purchase.service.ts
│ │ │ └── types
│ │ │ ├── PurchaseApiRequestType.ts
│ │ │ ├── PurchaseOrderType.ts
│ │ │ ├── PurchaseReqType.ts
│ │ │ ├── PurchaseRequestResultType.ts
│ │ │ ├── PurchaseStatsType.ts
│ │ │ ├── SupplierType.ts
│ │ │ └── TableHeader.ts
│ │ ├── sales
│ │ │ ├── components
│ │ │ │ ├── modals
│ │ │ │ │ ├── CustomerDetailModal.tsx
│ │ │ │ │ ├── CustomerEditModal.tsx
│ │ │ │ │ ├── NewCustomerModal.tsx
│ │ │ │ │ ├── NewOrderModal.tsx
│ │ │ │ │ ├── NewQuoteModal.tsx
│ │ │ │ │ ├── QuoteDetailModal.tsx
│ │ │ │ │ ├── QuoteReviewModal.tsx
│ │ │ │ │ └── SalesOrderDetailModal.tsx
│ │ │ │ └── tabs
│ │ │ │ ├── SalesChart.tsx
│ │ │ │ ├── SalesCustomerList.tsx
│ │ │ │ ├── SalesOrderList.tsx
│ │ │ │ ├── SalesQuoteList.tsx
│ │ │ │ └── SalesTabs.tsx
│ │ │ ├── constant.ts
│ │ │ ├── page.tsx
│ │ │ ├── sales.api.ts
│ │ │ ├── sales.service.ts
│ │ │ ├── types
│ │ │ │ ├── CustomerDetailModalProps.ts
│ │ │ │ ├── CustomerEditModalType.ts
│ │ │ │ ├── NewCustomerModalType.ts
│ │ │ │ ├── NewOrderModalType.ts
│ │ │ │ ├── NewQuoteModalType.ts
│ │ │ │ ├── QuoteDetailModalType.ts
│ │ │ │ ├── QuoteReviewModalType.ts
│ │ │ │ ├── SalesChartType.ts
│ │ │ │ ├── SalesCustomerDetailType.ts
│ │ │ │ ├── SalesCustomerListType.ts
│ │ │ │ ├── SalesOrderDetailType.ts
│ │ │ │ ├── SalesOrderListType.ts
│ │ │ │ ├── SalesQuoteListType.ts
│ │ │ │ └── SalesStatsType.ts
│ │ │ └── utils.ts
│ │ └── warehouse
│ │ ├── components
│ │ │ ├── WarehouseList.tsx
│ │ │ ├── modals
│ │ │ │ ├── AddWarehouseModal.tsx
│ │ │ │ ├── ManageWarehouseModal.tsx
│ │ │ │ └── WarehouseDetailModal.tsx
│ │ │ └── warehouseVisualizer
│ │ │ ├── WarehouseVisualizerType.ts
│ │ │ ├── clusters.ts
│ │ │ ├── components
│ │ │ │ ├── FreeCameraControls.tsx
│ │ │ │ ├── Warehouse3DModal.tsx
│ │ │ │ ├── WarehouseScene.tsx
│ │ │ │ └── WarehouseVisualizer.tsx
│ │ │ └── useWarehouseClusters.ts
│ │ ├── page.tsx
│ │ ├── types
│ │ │ ├── AddWarehouseModalType.ts
│ │ │ ├── ManageWarehouseModalType.ts
│ │ │ ├── WarehouseDetailModalType.ts
│ │ │ ├── WarehouseListType.ts
│ │ │ └── WarehouseStatsType.ts
│ │ ├── warehouse.api.ts
│ │ └── warehouse.service.ts
│ ├── (public)
│ │ ├── callback
│ │ │ ├── callback.api.ts
│ │ │ ├── page.tsx
│ │ │ └── userInfoType.ts
│ │ ├── layout.tsx
│ │ ├── profile
│ │ │ ├── ProfileType.ts
│ │ │ ├── components
│ │ │ │ ├── AttendanceRecord.tsx
│ │ │ │ ├── EmploymentInfo.tsx
│ │ │ │ ├── ProfileHeader.tsx
│ │ │ │ └── TrainingStatus.tsx
│ │ │ ├── page.tsx
│ │ │ └── profile.api.ts
│ │ └── unauthorized
│ │ └── page.tsx
│ ├── components
│ │ ├── common
│ │ │ ├── Button.tsx
│ │ │ ├── CalendarButton.tsx
│ │ │ ├── DateRangePicker.tsx
│ │ │ ├── Dropdown.tsx
│ │ │ ├── DropdownInputListModal.tsx
│ │ │ ├── DropdownInputModal.tsx
│ │ │ ├── ErrorMessage.tsx
│ │ │ ├── IconButton.tsx
│ │ │ ├── Input.tsx
│ │ │ ├── InputList.tsx
│ │ │ ├── LoadingMessage.tsx
│ │ │ ├── LoadingSpinner.tsx
│ │ │ ├── Modal.tsx
│ │ │ ├── ModalStatusBox.tsx
│ │ │ ├── PageTitle.tsx
│ │ │ ├── Pagination.tsx
│ │ │ ├── SearchBar.tsx
│ │ │ ├── SimplePagination.tsx
│ │ │ ├── SlidingNavBar.tsx
│ │ │ ├── StatSection.tsx
│ │ │ ├── StatusLabel.tsx
│ │ │ ├── SubNavigation.tsx
│ │ │ ├── TabNavigation.tsx
│ │ │ ├── TableStatusBox.tsx
│ │ │ └── modal
│ │ │ ├── ModalContainer.tsx
│ │ │ ├── ModalProvider.tsx
│ │ │ ├── types.ts
│ │ │ └── useModal.ts
│ │ ├── header
│ │ │ ├── Header.tsx
│ │ │ ├── Logo.tsx
│ │ │ ├── Navigation.tsx
│ │ │ ├── Notification
│ │ │ │ ├── NoificationDropdown.tsx
│ │ │ │ ├── NotificationHeader.tsx
│ │ │ │ ├── NotificationList.tsx
│ │ │ │ ├── NotificationPagination.tsx
│ │ │ │ └── useNotificationSSE.ts
│ │ │ ├── ProfileDropdown.tsx
│ │ │ ├── ProfileInfoModal.tsx
│ │ │ ├── header.api.ts
│ │ │ └── types
│ │ │ ├── CustomerOrSupplierInfoType.ts
│ │ │ ├── NotificatioApiType.ts
│ │ │ └── NotificationType.ts
│ │ └── statCard
│ │ ├── StatCardItem.tsx
│ │ └── StatCardList.tsx
│ ├── hooks
│ │ ├── useDebouncedKeyword.tsx
│ │ ├── useDropdown.tsx
│ │ └── useRole.ts
│ ├── layout.tsx
│ ├── not-found.tsx
│ ├── page.tsx
│ ├── postcss.config.mjs
│ ├── providers.tsx
│ ├── types
│ │ ├── CommonType.ts
│ │ ├── Date.ts
│ │ ├── KeywordType.ts
│ │ ├── NavigationType.ts
│ │ ├── Page.ts
│ │ ├── StatType.ts
│ │ ├── api.ts
│ │ ├── componentConstant.ts
│ │ └── role.constant.ts
│ └── utils
│ └── date.ts
├── lib
│ ├── CreateStatCard.ts
│ ├── api
│ │ ├── notification.api.ts
│ │ └── notification.endpoints.ts
│ ├── auth
│ │ ├── pkce.ts
│ │ ├── refresh.ts
│ │ ├── startAuthorization.ts
│ │ └── tokenStorage.ts
│ ├── axiosInstance.ts
│ ├── queryClient.ts
│ ├── role.ts
│ └── status.constants.ts
├── middleware.ts
├── store
│ └── authStore.ts
└── styles
└── globals.css
src
├── main
│ ├── java
│ │ └── org
│ │ └── ever
│ │ ├── _4ever_be_auth
│ │ │ ├── Application.java
│ │ │ ├── auth
│ │ │ │ ├── account
│ │ │ │ │ ├── controller
│ │ │ │ │ │ ├── AccountController.java
│ │ │ │ │ │ └── LogoutController.java
│ │ │ │ │ ├── entity
│ │ │ │ │ │ └── PasswordResetToken.java
│ │ │ │ │ ├── filter
│ │ │ │ │ │ └── PasswordChangeEnforcementFilter.java
│ │ │ │ │ ├── handler
│ │ │ │ │ │ ├── LoginFailureHandler.java
│ │ │ │ │ │ └── LoginSuccessHandler.java
│ │ │ │ │ ├── repository
│ │ │ │ │ │ └── PasswordResetTokenRepository.java
│ │ │ │ │ └── service
│ │ │ │ │ ├── AccountService.java
│ │ │ │ │ ├── AccountServiceImpl.java
│ │ │ │ │ ├── EverUserDetailsService.java
│ │ │ │ │ └── PasswordResetMailFactory.java
│ │ │ │ ├── client
│ │ │ │ │ ├── dto
│ │ │ │ │ │ └── OAuthRequestParams.java
│ │ │ │ │ ├── exception
│ │ │ │ │ │ └── ClientValidationException.java
│ │ │ │ │ ├── filter
│ │ │ │ │ │ └── ClientValidationFilter.java
│ │ │ │ │ ├── service
│ │ │ │ │ │ └── ClientValidationService.java
│ │ │ │ │ └── serviceImpl
│ │ │ │ │ └── ClientValidationServiceImpl.java
│ │ │ │ └── oauth
│ │ │ │ ├── entity
│ │ │ │ │ ├── OAuth2AuthorizationConsentEntity.java
│ │ │ │ │ ├── OAuth2AuthorizationEntity.java
│ │ │ │ │ └── RegisteredClientEntity.java
│ │ │ │ ├── filter
│ │ │ │ │ └── TokenDebugLoggingFilter.java
│ │ │ │ ├── handler
│ │ │ │ │ ├── RefreshTokenCookieAuthenticationFailureHandler.java
│ │ │ │ │ └── RefreshTokenCookieAuthenticationSuccessHandler.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── OAuth2AuthorizationConsentJpaRepository.java
│ │ │ │ │ ├── OAuth2AuthorizationJpaRepository.java
│ │ │ │ │ └── RegisteredClientJpaRepository.java
│ │ │ │ └── service
│ │ │ │ ├── JpaOAuth2AuthorizationConsentService.java
│ │ │ │ ├── JpaOAuth2AuthorizationService.java
│ │ │ │ ├── JpaRegisteredClientRepository.java
│ │ │ │ ├── LogoutService.java
│ │ │ │ ├── OAuth2AuthorizationConsentMapper.java
│ │ │ │ ├── OAuth2AuthorizationMapper.java
│ │ │ │ ├── RegisteredClientMapper.java
│ │ │ │ └── TokenDebugInspector.java
│ │ │ ├── common
│ │ │ │ ├── audit
│ │ │ │ │ ├── Auditable.java
│ │ │ │ │ ├── ChangeType.java
│ │ │ │ │ ├── EntityAuditListener.java
│ │ │ │ │ ├── EntityChange.java
│ │ │ │ │ ├── TransactionChanges.java
│ │ │ │ │ └── TransactionEntityChangeCollector.java
│ │ │ │ ├── dto
│ │ │ │ ├── entity
│ │ │ │ │ ├── SagaTransactionStatus.java
│ │ │ │ │ ├── TimeStamp.java
│ │ │ │ │ └── TransactionChangeLog.java
│ │ │ │ ├── exception
│ │ │ │ │ ├── BusinessException.java
│ │ │ │ │ ├── DatabaseException.java
│ │ │ │ │ ├── ErrorCode.java
│ │ │ │ │ ├── PaymentException.java
│ │ │ │ │ ├── handler
│ │ │ │ │ │ └── GlobalExceptionHandler.java
│ │ │ │ │ └── view
│ │ │ │ │ ├── ErrorMessageResolver.java
│ │ │ │ │ └── ErrorViewModel.java
│ │ │ │ ├── jpa_converter
│ │ │ │ │ ├── PlainMapToJsonConverter.java
│ │ │ │ │ ├── SecurityMapToJsonConverter.java
│ │ │ │ │ └── StringSetToJsonConverter.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── SagaTransactionStatusRepository.java
│ │ │ │ │ └── TransactionChangeLogRepository.java
│ │ │ │ ├── response
│ │ │ │ │ └── ApiResponse.java
│ │ │ │ └── saga
│ │ │ │ ├── CompensationHandler.java
│ │ │ │ ├── SagaCompensationService.java
│ │ │ │ ├── SagaTransactionContext.java
│ │ │ │ ├── SagaTransactionManager.java
│ │ │ │ ├── SagaTransactionState.java
│ │ │ │ └── SagaTransactionStatusService.java
│ │ │ ├── config
│ │ │ │ ├── CorsConfig.java
│ │ │ │ ├── CsrfAdvice.java
│ │ │ │ ├── application
│ │ │ │ │ ├── AppConfig.java
│ │ │ │ │ └── SchedulingConfig.java
│ │ │ │ ├── database
│ │ │ │ │ └── DatabaseConfig.java
│ │ │ │ ├── jackson
│ │ │ │ │ └── SecurityJacksonConfig.java
│ │ │ │ ├── oauth
│ │ │ │ │ ├── AuthorizationServerConfig.java
│ │ │ │ │ ├── JwksConfig.java
│ │ │ │ │ ├── JwtTokenCustomizerConfig.java
│ │ │ │ │ └── TokenProperties.java
│ │ │ │ ├── security
│ │ │ │ │ ├── AdminInitializer.java
│ │ │ │ │ └── SecurityConfig.java
│ │ │ │ └── swagger
│ │ │ │ └── SwaggerConfig.java
│ │ │ ├── filter
│ │ │ │ └── LoggingFilter.java
│ │ │ ├── infrastructure
│ │ │ │ ├── kafka
│ │ │ │ │ ├── config
│ │ │ │ │ │ ├── KafkaConfig.java
│ │ │ │ │ │ ├── KafkaFilterConfig.java
│ │ │ │ │ │ └── KafkaTopicConfig.java
│ │ │ │ │ ├── consumer
│ │ │ │ │ │ ├── AuthUserEventListener.java
│ │ │ │ │ │ ├── CustomerUserEventListener.java
│ │ │ │ │ │ ├── SupplierUserEventListener.java
│ │ │ │ │ │ └── handler
│ │ │ │ │ │ ├── MultiTopicEventHandler.java
│ │ │ │ │ │ └── impl
│ │ │ │ │ │ └── MultiTopicEventHandlerImpl.java
│ │ │ │ │ ├── event
│ │ │ │ │ │ ├── AlarmEvent.java
│ │ │ │ │ │ ├── BaseEvent.java
│ │ │ │ │ │ ├── BusinessEvent.java
│ │ │ │ │ │ ├── PaymentEvent.java
│ │ │ │ │ │ ├── ScmEvent.java
│ │ │ │ │ │ └── UserEvent.java
│ │ │ │ │ ├── handler
│ │ │ │ │ │ ├── DeadLetterQueueHandler.java
│ │ │ │ │ │ ├── KafkaErrorHandler.java
│ │ │ │ │ │ └── impl
│ │ │ │ │ │ └── DeadLetterQueueHandlerImpl.java
│ │ │ │ │ └── producer
│ │ │ │ │ ├── KafkaProducerService.java
│ │ │ │ │ └── impl
│ │ │ │ │ └── KafkaProducerServiceImpl.java
│ │ │ │ └── redis
│ │ │ │ ├── config
│ │ │ │ │ └── RedisConfig.java
│ │ │ │ └── service
│ │ │ │ ├── RedisService.java
│ │ │ │ └── impl
│ │ │ │ └── RedisServiceImpl.java
│ │ │ └── user
│ │ │ ├── application
│ │ │ │ ├── controller
│ │ │ │ ├── port
│ │ │ │ │ └── in
│ │ │ │ │ ├── AuthUserSagaPort.java
│ │ │ │ │ ├── CustomerUserSagaPort.java
│ │ │ │ │ └── SupplierUserSagaPort.java
│ │ │ │ └── service
│ │ │ │ ├── AsyncResultManager.java
│ │ │ │ ├── AuthUserSagaService.java
│ │ │ │ ├── CustomerUserSagaService.java
│ │ │ │ ├── GenericAsyncResultManager.java
│ │ │ │ ├── SagaRollbackService.java
│ │ │ │ ├── SupplierUserSagaService.java
│ │ │ │ └── UserAccountCreationSupport.java
│ │ │ ├── dto
│ │ │ │ ├── CreateUserRequestDto.java
│ │ │ │ ├── request
│ │ │ │ └── response
│ │ │ │ └── EmployeeCreateResponseDto.java
│ │ │ ├── entity
│ │ │ │ └── User.java
│ │ │ ├── enums
│ │ │ │ ├── UserRole.java
│ │ │ │ ├── UserStatus.java
│ │ │ │ └── UserType.java
│ │ │ ├── repository
│ │ │ │ └── UserRepository.java
│ │ │ ├── service
│ │ │ │ ├── UserNotificationService.java
│ │ │ │ ├── UserNotificationServiceImpl.java
│ │ │ │ ├── UserService.java
│ │ │ │ └── UserServiceImpl.java
│ │ │ └── util
│ │ │ └── TemporaryPasswordGenerator.java
│ │ └── event
│ │ ├── CreateAuthUserEvent.java
│ │ ├── CreateAuthUserResultEvent.java
│ │ ├── CreateCustomerUserEvent.java
│ │ └── CreateSupplierUserEvent.java
│ └── resources
│ ├── application-local.yml
│ ├── application.yml
│ ├── static
│ │ ├── css
│ │ │ ├── error.css
│ │ │ └── login.css
│ │ ├── images
│ │ │ └── brand-logo.png
│ │ ├── js
│ │ │ ├── error-modal.js
│ │ │ ├── login.js
│ │ │ ├── password-change.js
│ │ │ └── password-reset.js
│ │ └── videos
│ │ ├── hy-autoever-intro1.mp4
│ │ ├── hy-autoever-intro2.mp4
│ │ └── hy-autoever-intro3.mp4
│ └── templates
│ ├── error
│ │ └── general.html
│ ├── login.html
│ ├── password-change.html
│ ├── password-reset-confirm.html
│ └── password-reset-request.html
└── test
└── java
└── org
└── ever
└── _4ever_be_auth
├── ApplicationTests.java
└── user
└── service
└── UserServiceImplTest.java
src
├── main
│ ├── java
│ │ └── org
│ │ └── ever
│ │ ├── _4ever_be_business
│ │ │ ├── Application.java
│ │ │ ├── common
│ │ │ │ ├── async
│ │ │ │ │ ├── AsyncResultManager.java
│ │ │ │ │ └── GenericAsyncResultManager.java
│ │ │ │ ├── audit
│ │ │ │ │ ├── Auditable.java
│ │ │ │ │ ├── ChangeType.java
│ │ │ │ │ ├── EntityAuditListener.java
│ │ │ │ │ ├── EntityChange.java
│ │ │ │ │ ├── TransactionChanges.java
│ │ │ │ │ └── TransactionEntityChangeCollector.java
│ │ │ │ ├── config
│ │ │ │ │ ├── QueryDslConfig.java
│ │ │ │ │ └── RestClientConfig.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── internel
│ │ │ │ │ │ └── InternelServerResponse.java
│ │ │ │ │ └── response
│ │ │ │ │ └── ApiResponse.java
│ │ │ │ ├── entity
│ │ │ │ │ ├── TimeStamp.java
│ │ │ │ │ └── TransactionChangeLog.java
│ │ │ │ ├── exception
│ │ │ │ │ ├── BusinessException.java
│ │ │ │ │ ├── DatabaseException.java
│ │ │ │ │ ├── ErrorCode.java
│ │ │ │ │ ├── PaymentException.java
│ │ │ │ │ └── handler
│ │ │ │ │ └── GlobalExceptionHandler.java
│ │ │ │ ├── jpa
│ │ │ │ │ └── converter
│ │ │ │ │ └── DurationToSecondsConverter.java
│ │ │ │ ├── mock
│ │ │ │ │ └── MockDataProvider.java
│ │ │ │ ├── repository
│ │ │ │ │ └── TransactionChangeLogRepository.java
│ │ │ │ ├── saga
│ │ │ │ │ ├── CompensationHandler.java
│ │ │ │ │ ├── SagaCompensationService.java
│ │ │ │ │ ├── SagaTransactionContext.java
│ │ │ │ │ └── SagaTransactionManager.java
│ │ │ │ ├── service
│ │ │ │ │ └── LogCleanupService.java
│ │ │ │ └── util
│ │ │ │ ├── CodeGenerator.java
│ │ │ │ ├── DateRangeCalculator.java
│ │ │ │ └── UuidV7Generator.java
│ │ │ ├── company
│ │ │ │ ├── dao
│ │ │ │ │ ├── CustomerCompanyDAO.java
│ │ │ │ │ └── impl
│ │ │ │ │ └── CustomerCompanyDAOImpl.java
│ │ │ │ ├── dto
│ │ │ │ │ └── CustomerCreationResult.java
│ │ │ │ ├── entity
│ │ │ │ │ └── CustomerCompany.java
│ │ │ │ └── repository
│ │ │ │ ├── CustomerCompanyRepository.java
│ │ │ │ ├── CustomerCompanyRepositoryCustom.java
│ │ │ │ └── impl
│ │ │ │ └── CustomerCompanyRepositoryImpl.java
│ │ │ ├── config
│ │ │ │ ├── CustomerUserInitializer.java
│ │ │ │ ├── DataPreloader.java
│ │ │ │ ├── InternalUserInitializer.java
│ │ │ │ ├── PayrollInitializer.java
│ │ │ │ ├── SchedulerConfig.java
│ │ │ │ ├── application
│ │ │ │ │ ├── AppConfig.java
│ │ │ │ │ └── SchedulingConfig.java
│ │ │ │ ├── database
│ │ │ │ │ └── DatabaseConfig.java
│ │ │ │ └── swagger
│ │ │ │ └── SwaggerConfig.java
│ │ │ ├── dashboard
│ │ │ │ ├── controller
│ │ │ │ │ └── DashboardController.java
│ │ │ │ ├── dto
│ │ │ │ │ └── response
│ │ │ │ │ ├── DashboardPeriodStatisticsDto.java
│ │ │ │ │ ├── DashboardStatisticsResponseDto.java
│ │ │ │ │ └── DashboardValueDto.java
│ │ │ │ └── service
│ │ │ │ ├── DashboardService.java
│ │ │ │ └── impl
│ │ │ │ └── DashboardServiceImpl.java
│ │ │ ├── fcm
│ │ │ │ ├── controller
│ │ │ │ │ ├── FcmController.java
│ │ │ │ │ └── FcmDashboardController.java
│ │ │ │ ├── dao
│ │ │ │ │ ├── FcmStatisticsDAO.java
│ │ │ │ │ ├── PurchaseStatementDAO.java
│ │ │ │ │ ├── SalesStatementDAO.java
│ │ │ │ │ └── impl
│ │ │ │ │ ├── FcmStatisticsDAOImpl.java
│ │ │ │ │ ├── PurchaseStatementDAOImpl.java
│ │ │ │ │ └── SalesStatementDAOImpl.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── internal
│ │ │ │ │ │ ├── PurchaseStatementInfoDto.java
│ │ │ │ │ │ └── PurchaseStatementListItemInfoDto.java
│ │ │ │ │ ├── request
│ │ │ │ │ │ ├── APInvoiceSearchConditionDto.java
│ │ │ │ │ │ ├── ARInvoiceSearchConditionDto.java
│ │ │ │ │ │ ├── SupplierPurchaseInvoiceRequestDto.java
│ │ │ │ │ │ ├── UpdateARInvoiceDto.java
│ │ │ │ │ │ ├── UpdateInvoiceIdsDto.java
│ │ │ │ │ │ └── UpdateVoucherStatusDto.java
│ │ │ │ │ └── response
│ │ │ │ │ ├── APInvoiceDetailDto.java
│ │ │ │ │ ├── APInvoiceItemDto.java
│ │ │ │ │ ├── APInvoiceListItemDto.java
│ │ │ │ │ ├── ARInvoiceDetailDto.java
│ │ │ │ │ ├── ARInvoiceItemDto.java
│ │ │ │ │ ├── ARInvoiceListItemDto.java
│ │ │ │ │ ├── FcmPeriodStatisticsDto.java
│ │ │ │ │ ├── FcmStatisticsDto.java
│ │ │ │ │ ├── FcmStatisticsValueDto.java
│ │ │ │ │ ├── PeriodTotalAmountDto.java
│ │ │ │ │ ├── PurchaseInvoiceListDto.java
│ │ │ │ │ ├── PurchaseStatementConnectionDto.java
│ │ │ │ │ ├── PurchaseStatementDetailDto.java
│ │ │ │ │ ├── PurchaseStatementItemDto.java
│ │ │ │ │ ├── PurchaseStatementReferenceDto.java
│ │ │ │ │ ├── ReferenceDto.java
│ │ │ │ │ ├── SalesStatementConnectionDto.java
│ │ │ │ │ ├── SalesStatementDetailDto.java
│ │ │ │ │ ├── SalesStatementItemDto.java
│ │ │ │ │ ├── SalesStatementListItemDto.java
│ │ │ │ │ ├── SupplierDto.java
│ │ │ │ │ ├── SupplierPurchaseInvoiceListItemDto.java
│ │ │ │ │ ├── SupplyDto.java
│ │ │ │ │ └── TotalAmountDto.java
│ │ │ │ ├── integration
│ │ │ │ │ ├── adapter
│ │ │ │ │ │ ├── MockProductOrderServiceAdapter.java
│ │ │ │ │ │ ├── MockProductServiceAdapter.java
│ │ │ │ │ │ ├── MockSupplierCompanyServiceAdapter.java
│ │ │ │ │ │ ├── ScmProductOrderServiceAdapter.java
│ │ │ │ │ │ ├── ScmProductsServiceAdapter.java
│ │ │ │ │ │ └── ScmSupplierCompanyServiceAdapter.java
│ │ │ │ │ ├── dto
│ │ │ │ │ │ ├── OrderItemsResponseDto.java
│ │ │ │ │ │ ├── ProductMultipleResponseDto.java
│ │ │ │ │ │ ├── ProductOrderInfoResponseDto.java
│ │ │ │ │ │ ├── ProductOrderInfosResponseDto.java
│ │ │ │ │ │ ├── SupplierCompaniesResponseDto.java
│ │ │ │ │ │ └── SupplierCompanyResponseDto.java
│ │ │ │ │ └── port
│ │ │ │ │ ├── ProductOrderServicePort.java
│ │ │ │ │ ├── ProductsServicePort.java
│ │ │ │ │ └── SupplierCompanyServicePort.java
│ │ │ │ ├── kafka
│ │ │ │ │ └── SupplierCompanyResolveResultListener.java
│ │ │ │ ├── scheduler
│ │ │ │ │ └── VoucherStatusScheduler.java
│ │ │ │ └── service
│ │ │ │ ├── APInvoiceService.java
│ │ │ │ ├── ARInvoiceService.java
│ │ │ │ ├── CustomerDashboardInvoiceService.java
│ │ │ │ ├── FcmStatisticsService.java
│ │ │ │ ├── PurchaseStatementService.java
│ │ │ │ ├── SalesStatementService.java
│ │ │ │ ├── SupplierCompanyResolver.java
│ │ │ │ ├── SupplierDashboardInvoiceService.java
│ │ │ │ ├── SupplierPurchaseInvoiceService.java
│ │ │ │ ├── VoucherStatusService.java
│ │ │ │ └── impl
│ │ │ │ ├── APInvoiceServiceImpl.java
│ │ │ │ ├── ARInvoiceServiceImpl.java
│ │ │ │ ├── CustomerDashboardInvoiceServiceImpl.java
│ │ │ │ ├── FcmStatisticsServiceImpl.java
│ │ │ │ ├── PurchaseStatementServiceImpl.java
│ │ │ │ ├── SalesStatementServiceImpl.java
│ │ │ │ ├── SupplierCompanyResolverImpl.java
│ │ │ │ ├── SupplierDashboardInvoiceServiceImpl.java
│ │ │ │ ├── SupplierPurchaseInvoiceServiceImpl.java
│ │ │ │ └── VoucherStatusServiceImpl.java
│ │ │ ├── filter
│ │ │ │ ├── AsyncRequestLoggingListener.java
│ │ │ │ └── LoggingFilter.java
│ │ │ ├── hr
│ │ │ │ ├── controller
│ │ │ │ │ └── HrmController.java
│ │ │ │ ├── dao
│ │ │ │ │ ├── DepartmentDAO.java
│ │ │ │ │ ├── EmployeeDAO.java
│ │ │ │ │ ├── PayrollDAO.java
│ │ │ │ │ ├── PositionDAO.java
│ │ │ │ │ ├── TrainingDAO.java
│ │ │ │ │ └── impl
│ │ │ │ │ ├── DepartmentDAOImpl.java
│ │ │ │ │ ├── EmployeeDAOImpl.java
│ │ │ │ │ ├── PayrollDAOImpl.java
│ │ │ │ │ ├── PositionDAOImpl.java
│ │ │ │ │ └── TrainingDAOImpl.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── request
│ │ │ │ │ │ ├── CompletePayrollRequestDto.java
│ │ │ │ │ │ ├── CreateLeaveRequestDto.java
│ │ │ │ │ │ ├── CreateTrainingProgramDto.java
│ │ │ │ │ │ ├── EmployeeCreateRequestDto.java
│ │ │ │ │ │ ├── EmployeesMultipleRequestDto.java
│ │ │ │ │ │ ├── TrainingRequestDto.java
│ │ │ │ │ │ ├── UpdateDepartmentRequestDto.java
│ │ │ │ │ │ ├── UpdateEmployeeRequestDto.java
│ │ │ │ │ │ ├── UpdateProfileRequestDto.java
│ │ │ │ │ │ ├── UpdateTrainingProgramDto.java
│ │ │ │ │ │ └── UserInfoRequest.java
│ │ │ │ │ └── response
│ │ │ │ │ ├── CustomerInfoDto.java
│ │ │ │ │ ├── CustomerUserDetailDto.java
│ │ │ │ │ ├── DepartmentDetailDto.java
│ │ │ │ │ ├── DepartmentEmployeeDto.java
│ │ │ │ │ ├── DepartmentListItemDto.java
│ │ │ │ │ ├── DepartmentListResponseDto.java
│ │ │ │ │ ├── DepartmentMemberDto.java
│ │ │ │ │ ├── DepartmentSimpleDto.java
│ │ │ │ │ ├── DesignatedEmployee.java
│ │ │ │ │ ├── EmployeeAttendanceRecordDto.java
│ │ │ │ │ ├── EmployeeCreateResponseDto.java
│ │ │ │ │ ├── EmployeeDetailDto.java
│ │ │ │ │ ├── EmployeeListItemDto.java
│ │ │ │ │ ├── EmployeeListResponseDto.java
│ │ │ │ │ ├── EmployeeProfileDto.java
│ │ │ │ │ ├── EmployeeTrainingHistoryDto.java
│ │ │ │ │ ├── EmployeeTrainingItemDto.java
│ │ │ │ │ ├── EmployeeTrainingListItemDto.java
│ │ │ │ │ ├── EmployeeTrainingListResponseDto.java
│ │ │ │ │ ├── EmployeeTrainingSummaryDto.java
│ │ │ │ │ ├── EmployeeWithTrainingDto.java
│ │ │ │ │ ├── HRStatisticsResponseDto.java
│ │ │ │ │ ├── HrmEmployeeBasicInfoDto.java
│ │ │ │ │ ├── InventoryDepartmentEmployeeDto.java
│ │ │ │ │ ├── LeaveItemDto.java
│ │ │ │ │ ├── LeaveRequestEmployeeDto.java
│ │ │ │ │ ├── LeaveRequestListItemDto.java
│ │ │ │ │ ├── LeaveRequestListResponseDto.java
│ │ │ │ │ ├── PageInfoDto.java
│ │ │ │ │ ├── PageResponseDto.java
│ │ │ │ │ ├── PayItemDto.java
│ │ │ │ │ ├── PayrollListEmployeeDto.java
│ │ │ │ │ ├── PayrollListItemDto.java
│ │ │ │ │ ├── PayrollListPayDto.java
│ │ │ │ │ ├── PayrollListResponseDto.java
│ │ │ │ │ ├── PayrollStatusDto.java
│ │ │ │ │ ├── PaystubDetailDto.java
│ │ │ │ │ ├── PaystubEmployeeDto.java
│ │ │ │ │ ├── PaystubPayDto.java
│ │ │ │ │ ├── PeriodStatisticsDto.java
│ │ │ │ │ ├── PositionDetailDto.java
│ │ │ │ │ ├── PositionEmployeeDto.java
│ │ │ │ │ ├── PositionListItemDto.java
│ │ │ │ │ ├── PositionSimpleDto.java
│ │ │ │ │ ├── ProgramHistoryItemDto.java
│ │ │ │ │ ├── RemainingLeaveDaysDto.java
│ │ │ │ │ ├── StatisticValueDto.java
│ │ │ │ │ ├── TodayAttendanceDto.java
│ │ │ │ │ ├── TrainingCategoryDto.java
│ │ │ │ │ ├── TrainingCompletionStatusDto.java
│ │ │ │ │ ├── TrainingItemDto.java
│ │ │ │ │ ├── TrainingListItemDto.java
│ │ │ │ │ ├── TrainingListResponseDto.java
│ │ │ │ │ ├── TrainingProgramSimpleDto.java
│ │ │ │ │ ├── TrainingResponseDto.java
│ │ │ │ │ ├── TrainingStatusItemDto.java
│ │ │ │ │ ├── TrainingStatusResponseDto.java
│ │ │ │ │ ├── UserInfoResponse.java
│ │ │ │ │ └── UserNameResponse.java
│ │ │ │ ├── entity
│ │ │ │ │ ├── CustomerUser.java
│ │ │ │ │ ├── Deducation.java
│ │ │ │ │ ├── Department.java
│ │ │ │ │ ├── Employee.java
│ │ │ │ │ ├── EmployeeTraining.java
│ │ │ │ │ ├── InternelUser.java
│ │ │ │ │ ├── LeaveRequest.java
│ │ │ │ │ ├── Payroll.java
│ │ │ │ │ ├── PayrollDeducation.java
│ │ │ │ │ ├── Position.java
│ │ │ │ │ ├── Training.java
│ │ │ │ │ ├── Vacation.java
│ │ │ │ │ └── VacationRequestApproval.java
│ │ │ │ ├── enums
│ │ │ │ │ ├── Gender.java
│ │ │ │ │ ├── LeaveRequestStatus.java
│ │ │ │ │ ├── LeaveType.java
│ │ │ │ │ ├── PayrollStatus.java
│ │ │ │ │ ├── TrainingCategory.java
│ │ │ │ │ ├── TrainingCompletionStatus.java
│ │ │ │ │ ├── TrainingStatus.java
│ │ │ │ │ ├── UserStatus.java
│ │ │ │ │ ├── VacationStatus.java
│ │ │ │ │ └── VacationType.java
│ │ │ │ ├── integration
│ │ │ │ │ ├── adapter
│ │ │ │ │ │ └── KafkaUserServiceAdapter.java
│ │ │ │ │ └── port
│ │ │ │ │ └── UserServicePort.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── CustomerUserRepository.java
│ │ │ │ │ ├── DeducationRepository.java
│ │ │ │ │ ├── DepartmentRepository.java
│ │ │ │ │ ├── EmployeeRepository.java
│ │ │ │ │ ├── EmployeeRepositoryCustom.java
│ │ │ │ │ ├── EmployeeTrainingRepository.java
│ │ │ │ │ ├── EmployeeTrainingRepositoryCustom.java
│ │ │ │ │ ├── EmployeeTrainingRepositoryImpl.java
│ │ │ │ │ ├── InternelUserRepository.java
│ │ │ │ │ ├── LeaveRequestRepository.java
│ │ │ │ │ ├── LeaveRequestRepositoryCustom.java
│ │ │ │ │ ├── PayrollDeducationRepository.java
│ │ │ │ │ ├── PayrollRepository.java
│ │ │ │ │ ├── PositionRepository.java
│ │ │ │ │ ├── PositionRepositoryCustom.java
│ │ │ │ │ ├── PositionRepositoryImpl.java
│ │ │ │ │ ├── TrainingRepository.java
│ │ │ │ │ ├── TrainingRepositoryCustom.java
│ │ │ │ │ ├── TrainingRepositoryImpl.java
│ │ │ │ │ └── impl
│ │ │ │ │ ├── EmployeeRepositoryImpl.java
│ │ │ │ │ └── LeaveRequestRepositoryImpl.java
│ │ │ │ ├── scheduler
│ │ │ │ │ └── PayrollScheduler.java
│ │ │ │ ├── service
│ │ │ │ │ ├── CustomerUserService.java
│ │ │ │ │ ├── DepartmentService.java
│ │ │ │ │ ├── EmployeeService.java
│ │ │ │ │ ├── LeaveRequestService.java
│ │ │ │ │ ├── PayrollService.java
│ │ │ │ │ ├── PositionService.java
│ │ │ │ │ ├── StatisticsService.java
│ │ │ │ │ ├── TamService.java
│ │ │ │ │ ├── TrainingService.java
│ │ │ │ │ └── impl
│ │ │ │ │ ├── CustomerUserServiceImpl.java
│ │ │ │ │ ├── DepartmentServiceImpl.java
│ │ │ │ │ ├── EmployeeServiceImpl.java
│ │ │ │ │ ├── LeaveRequestServiceImpl.java
│ │ │ │ │ ├── PayrollServiceImpl.java
│ │ │ │ │ ├── PositionServiceImpl.java
│ │ │ │ │ ├── StatisticsServiceImpl.java
│ │ │ │ │ ├── TamServiceImpl.java
│ │ │ │ │ └── TrainingServiceImpl.java
│ │ │ │ └── vo
│ │ │ │ ├── EmployeeListSearchConditionVo.java
│ │ │ │ ├── EmployeeTrainingHistoryVo.java
│ │ │ │ ├── EmployeeTrainingSearchConditionVo.java
│ │ │ │ ├── LeaveRequestSearchConditionVo.java
│ │ │ │ ├── PayrollSearchConditionVo.java
│ │ │ │ ├── TrainingDetailVo.java
│ │ │ │ ├── TrainingSearchConditionVo.java
│ │ │ │ └── TrainingStatusSearchConditionVo.java
│ │ │ ├── infrastructure
│ │ │ │ ├── kafka
│ │ │ │ │ ├── config
│ │ │ │ │ │ ├── KafkaConfig.java
│ │ │ │ │ │ ├── KafkaFilterConfig.java
│ │ │ │ │ │ └── KafkaTopicConfig.java
│ │ │ │ │ ├── consumer
│ │ │ │ │ │ ├── AlarmStatusEventListener.java
│ │ │ │ │ │ ├── CreateAuthUserResultListener.java
│ │ │ │ │ │ ├── CustomerEventListener.java
│ │ │ │ │ │ ├── MesCompleteListener.java
│ │ │ │ │ │ ├── MesStartListener.java
│ │ │ │ │ │ ├── MultiTopicEventListener.java
│ │ │ │ │ │ ├── PaymentEventListener.java
│ │ │ │ │ │ ├── PurchaseOrderApprovalListener.java
│ │ │ │ │ │ ├── QuotationUpdateListener.java
│ │ │ │ │ │ ├── SalesOrderStatusChangeListener.java
│ │ │ │ │ │ ├── UserCreationFailListener.java
│ │ │ │ │ │ └── handler
│ │ │ │ │ │ ├── MultiTopicEventHandler.java
│ │ │ │ │ │ ├── PaymentEventHandler.java
│ │ │ │ │ │ └── impl
│ │ │ │ │ │ ├── MultiTopicEventHandlerImpl.java
│ │ │ │ │ │ └── PaymentEventHandlerImpl.java
│ │ │ │ │ ├── handler
│ │ │ │ │ │ ├── DeadLetterQueueHandler.java
│ │ │ │ │ │ ├── KafkaErrorHandler.java
│ │ │ │ │ │ └── impl
│ │ │ │ │ │ └── DeadLetterQueueHandlerImpl.java
│ │ │ │ │ └── producer
│ │ │ │ │ ├── KafkaProducerService.java
│ │ │ │ │ └── impl
│ │ │ │ │ └── KafkaProducerServiceImpl.java
│ │ │ │ └── redis
│ │ │ │ ├── config
│ │ │ │ │ ├── RedisConfig.java
│ │ │ │ │ └── RedissonConfig.java
│ │ │ │ ├── dto
│ │ │ │ │ └── OrderDeliveryCompletionTask.java
│ │ │ │ └── service
│ │ │ │ ├── OrderDeliverySchedulerService.java
│ │ │ │ ├── RedisService.java
│ │ │ │ └── impl
│ │ │ │ ├── OrderDeliverySchedulerServiceImpl.java
│ │ │ │ └── RedisServiceImpl.java
│ │ │ ├── iv
│ │ │ │ ├── controller
│ │ │ │ │ └── IvController.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── request
│ │ │ │ │ │ └── IvOrderRequestDto.java
│ │ │ │ │ └── response
│ │ │ │ │ └── IvOrderResponseDto.java
│ │ │ │ └── service
│ │ │ │ ├── IvOrderService.java
│ │ │ │ └── impl
│ │ │ │ └── IvOrderServiceImpl.java
│ │ │ ├── order
│ │ │ │ ├── dao
│ │ │ │ │ ├── OrderDAO.java
│ │ │ │ │ ├── QuotationDAO.java
│ │ │ │ │ └── impl
│ │ │ │ │ ├── OrderDAOImpl.java
│ │ │ │ │ └── QuotationDAOImpl.java
│ │ │ │ ├── entity
│ │ │ │ │ ├── Order.java
│ │ │ │ │ ├── OrderItem.java
│ │ │ │ │ ├── OrderShipment.java
│ │ │ │ │ ├── OrderStatus.java
│ │ │ │ │ ├── Quotation.java
│ │ │ │ │ ├── QuotationApproval.java
│ │ │ │ │ └── QuotationItem.java
│ │ │ │ ├── enums
│ │ │ │ │ ├── ApprovalStatus.java
│ │ │ │ │ ├── ShipmentStatus.java
│ │ │ │ │ └── Unit.java
│ │ │ │ └── repository
│ │ │ │ ├── OrderItemRepository.java
│ │ │ │ ├── OrderRepository.java
│ │ │ │ ├── OrderRepositoryCustom.java
│ │ │ │ ├── QuotationApprovalRepository.java
│ │ │ │ ├── QuotationItemRepository.java
│ │ │ │ ├── QuotationRepository.java
│ │ │ │ ├── QuotationRepositoryCustom.java
│ │ │ │ └── impl
│ │ │ │ ├── OrderRepositoryImpl.java
│ │ │ │ └── QuotationRepositoryImpl.java
│ │ │ ├── pp
│ │ │ │ ├── controller
│ │ │ │ │ └── PpController.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── request
│ │ │ │ │ │ └── PpQuotationRequestDto.java
│ │ │ │ │ └── response
│ │ │ │ │ └── PpQuotationResponseDto.java
│ │ │ │ └── service
│ │ │ │ ├── PpQuotationService.java
│ │ │ │ └── impl
│ │ │ │ └── PpQuotationServiceImpl.java
│ │ │ ├── sd
│ │ │ │ ├── controller
│ │ │ │ │ └── SdController.java
│ │ │ │ ├── dao
│ │ │ │ │ ├── DashboardStatisticsDAO.java
│ │ │ │ │ ├── SalesAnalyticsDAO.java
│ │ │ │ │ ├── SalesStatisticsDAO.java
│ │ │ │ │ └── impl
│ │ │ │ │ ├── DashboardStatisticsDAOImpl.java
│ │ │ │ │ ├── SalesAnalyticsDAOImpl.java
│ │ │ │ │ └── SalesStatisticsDAOImpl.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── request
│ │ │ │ │ │ ├── ApproveOrderRequestDto.java
│ │ │ │ │ │ ├── ConfirmQuotationRequestDto.java
│ │ │ │ │ │ ├── CreateCustomerRequestDto.java
│ │ │ │ │ │ ├── CreateQuotationRequestDto.java
│ │ │ │ │ │ ├── CustomerManagerRequestDto.java
│ │ │ │ │ │ ├── InventoryCheckItemDto.java
│ │ │ │ │ │ ├── InventoryCheckRequestDto.java
│ │ │ │ │ │ ├── QuotationItemRequestDto.java
│ │ │ │ │ │ ├── RejectQuotationRequestDto.java
│ │ │ │ │ │ ├── SupplierQuotationRequestDto.java
│ │ │ │ │ │ └── UpdateCustomerRequestDto.java
│ │ │ │ │ └── response
│ │ │ │ │ ├── CustomerContactDto.java
│ │ │ │ │ ├── CustomerDetailDto.java
│ │ │ │ │ ├── CustomerListItemDto.java
│ │ │ │ │ ├── CustomerListResponseDto.java
│ │ │ │ │ ├── CustomerManagerDto.java
│ │ │ │ │ ├── DashboardStatisticsDto.java
│ │ │ │ │ ├── DashboardWorkflowItemDto.java
│ │ │ │ │ ├── InventoryCheckResponseDto.java
│ │ │ │ │ ├── InventoryCheckResultItemDto.java
│ │ │ │ │ ├── OrderCustomerDto.java
│ │ │ │ │ ├── OrderDetailDto.java
│ │ │ │ │ ├── OrderItemDto.java
│ │ │ │ │ ├── PageInfo.java
│ │ │ │ │ ├── PeriodInfoDto.java
│ │ │ │ │ ├── PeriodQuotationCountDto.java
│ │ │ │ │ ├── PeriodStatisticsDto.java
│ │ │ │ │ ├── ProductShareDto.java
│ │ │ │ │ ├── QuotationCodeMapDto.java
│ │ │ │ │ ├── QuotationCountDto.java
│ │ │ │ │ ├── QuotationDetailDto.java
│ │ │ │ │ ├── QuotationItemDto.java
│ │ │ │ │ ├── QuotationListItemDto.java
│ │ │ │ │ ├── QuotationListResponseDto.java
│ │ │ │ │ ├── SalesAnalyticsDto.java
│ │ │ │ │ ├── SalesOrderDetailResponseDto.java
│ │ │ │ │ ├── SalesOrderListItemDto.java
│ │ │ │ │ ├── SalesOrderListResponseDto.java
│ │ │ │ │ ├── SalesStatisticsDto.java
│ │ │ │ │ ├── ScmQuotationItemDto.java
│ │ │ │ │ ├── ScmQuotationListItemDto.java
│ │ │ │ │ ├── StatisticsValueDto.java
│ │ │ │ │ ├── SupplierOrderWorkflowItemDto.java
│ │ │ │ │ ├── SupplierQuotationWorkflowItemDto.java
│ │ │ │ │ ├── TopCustomerDto.java
│ │ │ │ │ ├── TrendDto.java
│ │ │ │ │ └── TrendScaleDto.java
│ │ │ │ ├── integration
│ │ │ │ │ ├── adapter
│ │ │ │ │ │ ├── KafkaCustomerUserServiceAdapter.java
│ │ │ │ │ │ ├── MockInventoryServiceAdapter.java
│ │ │ │ │ │ ├── MockProductServiceAdapter.java
│ │ │ │ │ │ ├── MockSupplierQuotationServiceAdapter.java
│ │ │ │ │ │ ├── ScmInventoryServiceAdapter.java
│ │ │ │ │ │ └── ScmProductServiceAdapter.java
│ │ │ │ │ ├── dto
│ │ │ │ │ │ ├── ProductInfoRequestDto.java
│ │ │ │ │ │ └── ProductInfoResponseDto.java
│ │ │ │ │ └── port
│ │ │ │ │ ├── CustomerUserServicePort.java
│ │ │ │ │ ├── InventoryServicePort.java
│ │ │ │ │ ├── ProductServicePort.java
│ │ │ │ │ └── SupplierQuotationServicePort.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── DashboardStatisticsRepository.java
│ │ │ │ │ ├── DashboardStatisticsRepositoryCustom.java
│ │ │ │ │ ├── SalesAnalyticsRepository.java
│ │ │ │ │ ├── SalesAnalyticsRepositoryCustom.java
│ │ │ │ │ ├── SalesStatisticsRepository.java
│ │ │ │ │ ├── SalesStatisticsRepositoryCustom.java
│ │ │ │ │ └── impl
│ │ │ │ │ ├── DashboardStatisticsRepositoryImpl.java
│ │ │ │ │ ├── SalesAnalyticsRepositoryImpl.java
│ │ │ │ │ └── SalesStatisticsRepositoryImpl.java
│ │ │ │ ├── service
│ │ │ │ │ ├── DashboardCustomerQuotationService.java
│ │ │ │ │ ├── DashboardOrderService.java
│ │ │ │ │ ├── DashboardStatisticsService.java
│ │ │ │ │ ├── DashboardSupplierQuotationService.java
│ │ │ │ │ ├── QuotationService.java
│ │ │ │ │ ├── SalesAnalyticsService.java
│ │ │ │ │ ├── SalesStatisticsService.java
│ │ │ │ │ ├── SdCustomerService.java
│ │ │ │ │ ├── SdOrderService.java
│ │ │ │ │ ├── SdSupplierOrderService.java
│ │ │ │ │ └── impl
│ │ │ │ │ ├── DashboardCustomerQuotationServiceImpl.java
│ │ │ │ │ ├── DashboardOrderServiceImpl.java
│ │ │ │ │ ├── DashboardStatisticsServiceImpl.java
│ │ │ │ │ ├── DashboardSupplierQuotationServiceImpl.java
│ │ │ │ │ ├── QuotationServiceImpl.java
│ │ │ │ │ ├── SalesAnalyticsServiceImpl.java
│ │ │ │ │ ├── SalesStatisticsServiceImpl.java
│ │ │ │ │ ├── SdCustomerServiceImpl.java
│ │ │ │ │ ├── SdOrderServiceImpl.java
│ │ │ │ │ └── SdSupplierOrderServiceImpl.java
│ │ │ │ └── vo
│ │ │ │ ├── CustomerDetailVo.java
│ │ │ │ ├── CustomerSearchConditionVo.java
│ │ │ │ ├── OrderSearchConditionVo.java
│ │ │ │ ├── QuotationDetailVo.java
│ │ │ │ ├── QuotationSearchConditionVo.java
│ │ │ │ ├── ScmQuotationSearchConditionVo.java
│ │ │ │ └── StatisticsSearchConditionVo.java
│ │ │ ├── tam
│ │ │ │ ├── dao
│ │ │ │ │ ├── AttendanceDAO.java
│ │ │ │ │ ├── LeaveRequestDAO.java
│ │ │ │ │ ├── TimeRecordDAO.java
│ │ │ │ │ └── impl
│ │ │ │ │ ├── AttendanceDAOImpl.java
│ │ │ │ │ ├── LeaveRequestDAOImpl.java
│ │ │ │ │ └── TimeRecordDAOImpl.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── request
│ │ │ │ │ │ ├── CheckInRequestDto.java
│ │ │ │ │ │ ├── CheckOutRequestDto.java
│ │ │ │ │ │ └── UpdateTimeRecordDto.java
│ │ │ │ │ └── response
│ │ │ │ │ ├── AttendanceListItemDto.java
│ │ │ │ │ ├── AttendanceListResponseDto.java
│ │ │ │ │ ├── AttendanceRecordDto.java
│ │ │ │ │ ├── AttendanceStatusDto.java
│ │ │ │ │ ├── EmployeeBasicInfoDto.java
│ │ │ │ │ ├── EmployeeInfoDto.java
│ │ │ │ │ ├── LeaveRequestEmployeeDto.java
│ │ │ │ │ ├── LeaveRequestListItemDto.java
│ │ │ │ │ ├── TimeRecordDetailDto.java
│ │ │ │ │ ├── TimeRecordListItemDto.java
│ │ │ │ │ └── TimeRecordListResponseDto.java
│ │ │ │ ├── entity
│ │ │ │ │ ├── Attendance.java
│ │ │ │ │ └── VacationRequest.java
│ │ │ │ ├── enums
│ │ │ │ │ └── AttendanceStatus.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── AttendanceRepository.java
│ │ │ │ │ ├── AttendanceRepositoryCustom.java
│ │ │ │ │ ├── VacationRequestRepository.java
│ │ │ │ │ ├── VacationRequestRepositoryCustom.java
│ │ │ │ │ └── impl
│ │ │ │ │ ├── AttendanceRepositoryImpl.java
│ │ │ │ │ └── VacationRequestRepositoryImpl.java
│ │ │ │ ├── service
│ │ │ │ │ ├── AttendanceService.java
│ │ │ │ │ ├── LeaveRequestService.java
│ │ │ │ │ ├── TimeRecordService.java
│ │ │ │ │ └── impl
│ │ │ │ │ ├── AttendanceServiceImpl.java
│ │ │ │ │ ├── LeaveRequestServiceImpl.java
│ │ │ │ │ └── TimeRecordServiceImpl.java
│ │ │ │ └── vo
│ │ │ │ ├── AttendanceListSearchConditionVo.java
│ │ │ │ ├── AttendanceSearchConditionVo.java
│ │ │ │ ├── LeaveRequestSearchConditionVo.java
│ │ │ │ └── TimeRecordDetailVo.java
│ │ │ └── voucher
│ │ │ ├── entity
│ │ │ │ ├── PurchaseVoucher.java
│ │ │ │ └── SalesVoucher.java
│ │ │ ├── enums
│ │ │ │ ├── PurchaseVoucherStatus.java
│ │ │ │ └── SalesVoucherStatus.java
│ │ │ └── repository
│ │ │ ├── PurchaseVoucherRepository.java
│ │ │ ├── PurchaseVoucherRepositoryCustom.java
│ │ │ ├── SalesVoucherRepository.java
│ │ │ ├── SalesVoucherRepositoryCustom.java
│ │ │ └── impl
│ │ │ ├── PurchaseVoucherRepositoryImpl.java
│ │ │ └── SalesVoucherRepositoryImpl.java
│ │ ├── config
│ │ │ └── HttpClientConfig.java
│ │ └── event
│ │ ├── AlarmEvent.java
│ │ ├── AlarmSentEvent.java
│ │ ├── BaseEvent.java
│ │ ├── BusinessEvent.java
│ │ ├── CreateAuthUserEvent.java
│ │ ├── CreateAuthUserResultEvent.java
│ │ ├── CreateCustomerUserEvent.java
│ │ ├── CreateUserEvent.java
│ │ ├── MesCompleteCompletionEvent.java
│ │ ├── MesCompleteEvent.java
│ │ ├── MesStartCompletionEvent.java
│ │ ├── MesStartEvent.java
│ │ ├── PaymentEvent.java
│ │ ├── ProcessCompletedEvent.java
│ │ ├── PurchaseOrderApprovalCompletionEvent.java
│ │ ├── PurchaseOrderApprovalEvent.java
│ │ ├── QuotationUpdateCompletionEvent.java
│ │ ├── QuotationUpdateEvent.java
│ │ ├── SalesOrderStatusChangeCompletionEvent.java
│ │ ├── SalesOrderStatusChangeEvent.java
│ │ ├── ScmEvent.java
│ │ ├── ServiceCompletionEvent.java
│ │ ├── StatusEvent.java
│ │ ├── SupplierCompanyResolveRequestEvent.java
│ │ ├── SupplierCompanyResolveResultEvent.java
│ │ ├── UserEvent.java
│ │ └── alarm
│ │ ├── AlarmType.java
│ │ ├── LinkType.java
│ │ ├── SourceType.java
│ │ └── TargetType.java
│ └── resources
│ └── application.yml
└── test
└── java
└── org
└── ever
├── _4ever_be_business
│ ├── ApplicationTests.java
│ └── common
│ └── util
│ ├── CodeGeneratorDemo.java
│ └── CodeGeneratorTest.java
└── sd
└── TestApplication.java
src
└── main
├── java
│ └── org
│ └── ever
│ ├── _4ever_be_gw
│ │ ├── Application.java
│ │ ├── alarm
│ │ │ ├── constants
│ │ │ │ ├── NotificationLinkType.java
│ │ │ │ ├── NotificationSeverity.java
│ │ │ │ ├── NotificationSource.java
│ │ │ │ └── NotificationStatus.java
│ │ │ ├── controller
│ │ │ │ ├── AlarmController.java
│ │ │ │ └── FcmTokenController.java
│ │ │ ├── dto
│ │ │ │ ├── request
│ │ │ │ │ ├── AlarmServerRequestDto.java
│ │ │ │ │ ├── NotificationFcmTokenRequestDto.java
│ │ │ │ │ └── NotificationMarkReadRequestDto.java
│ │ │ │ └── response
│ │ │ │ ├── AlarmServerResponseDto.java
│ │ │ │ ├── NotificationCountResponseDto.java
│ │ │ │ ├── NotificationListResponseDto.java
│ │ │ │ └── NotificationReadResponseDto.java
│ │ │ ├── service
│ │ │ │ ├── AlarmHttpService.java
│ │ │ │ ├── AlarmSendService.java
│ │ │ │ └── impl
│ │ │ │ ├── AlarmHttpServiceImpl.java
│ │ │ │ └── AlarmSendServiceImpl.java
│ │ │ └── util
│ │ │ └── AlarmDtoConverter.java
│ │ ├── business
│ │ │ ├── constants
│ │ │ │ └── QuotationStatus.java
│ │ │ ├── controller
│ │ │ │ ├── FcmController.java
│ │ │ │ ├── HrmController.java
│ │ │ │ ├── ProfileController.java
│ │ │ │ └── SdController.java
│ │ │ ├── dto
│ │ │ │ ├── InvoiceIdsRequestDto.java
│ │ │ │ ├── InvoiceUpdateRequestDto.java
│ │ │ │ ├── LeaveRequestDto.java
│ │ │ │ ├── PayrollCompleteRequestDto.java
│ │ │ │ ├── ProgramAssignRequestDto.java
│ │ │ │ ├── ProgramCreateRequestDto.java
│ │ │ │ ├── ProgramModifyRequestDto.java
│ │ │ │ ├── StatementUpdateRequestDto.java
│ │ │ │ ├── TimeRecordUpdateRequestDto.java
│ │ │ │ ├── TrainingRequestDto.java
│ │ │ │ ├── analytics
│ │ │ │ │ ├── PeriodDto.java
│ │ │ │ │ ├── ProductShareDto.java
│ │ │ │ │ ├── SalesAnalyticsResponseDto.java
│ │ │ │ │ ├── ScaleDto.java
│ │ │ │ │ ├── TopCustomerDto.java
│ │ │ │ │ ├── TrendPointDto.java
│ │ │ │ │ └── TrendScaleDto.java
│ │ │ │ ├── common
│ │ │ │ ├── customer
│ │ │ │ │ ├── CustomerCreateRequestDto.java
│ │ │ │ │ ├── CustomerCreateResponseDto.java
│ │ │ │ │ ├── CustomerDeleteResponseDto.java
│ │ │ │ │ ├── CustomerDetailDto.java
│ │ │ │ │ ├── CustomerListItemDto.java
│ │ │ │ │ ├── CustomerListResponseDto.java
│ │ │ │ │ ├── CustomerManagerDto.java
│ │ │ │ │ ├── CustomerUpdateRequestDto.java
│ │ │ │ │ └── CustomerUpdateResponseDto.java
│ │ │ │ ├── employee
│ │ │ │ │ ├── EmployeeCreateRequestDto.java
│ │ │ │ │ └── EmployeeUpdateRequestDto.java
│ │ │ │ ├── fcm
│ │ │ │ │ ├── request
│ │ │ │ │ │ ├── UpdateARInvoiceDto.java
│ │ │ │ │ │ └── UpdateVoucherStatusDto.java
│ │ │ │ │ └── response
│ │ │ │ │ ├── APInvoiceDetailDto.java
│ │ │ │ │ ├── APInvoiceItemDto.java
│ │ │ │ │ ├── ARInvoiceDetailDto.java
│ │ │ │ │ ├── ARInvoiceItemDto.java
│ │ │ │ │ ├── ARInvoiceListItemDto.java
│ │ │ │ │ ├── ARInvoiceListResponseDto.java
│ │ │ │ │ ├── FcmPeriodStatisticsDto.java
│ │ │ │ │ ├── FcmStatisticsDto.java
│ │ │ │ │ ├── FcmStatisticsValueDto.java
│ │ │ │ │ ├── PurchaseStatementConnectionDto.java
│ │ │ │ │ ├── PurchaseStatementDetailDto.java
│ │ │ │ │ ├── PurchaseStatementItemDto.java
│ │ │ │ │ ├── PurchaseStatementListItemDto.java
│ │ │ │ │ ├── PurchaseStatementListResponseDto.java
│ │ │ │ │ ├── PurchaseStatementReferenceDto.java
│ │ │ │ │ ├── ReferenceDto.java
│ │ │ │ │ ├── SalesStatementConnectionDto.java
│ │ │ │ │ ├── SalesStatementDetailDto.java
│ │ │ │ │ ├── SalesStatementItemDto.java
│ │ │ │ │ ├── SalesStatementListItemDto.java
│ │ │ │ │ └── SupplyDto.java
│ │ │ │ ├── hrm
│ │ │ │ │ ├── CreateAuthUserResultDto.java
│ │ │ │ │ ├── UpdateDepartmentRequestDto.java
│ │ │ │ │ └── UpdateProfileRequestDto.java
│ │ │ │ ├── invoice
│ │ │ │ │ ├── InvoiceDetailDto.java
│ │ │ │ │ ├── PurchaseInvoiceItemDto.java
│ │ │ │ │ └── SalesInvoiceItemDto.java
│ │ │ │ ├── order
│ │ │ │ │ ├── CustomerSummaryDto.java
│ │ │ │ │ ├── ManagerDto.java
│ │ │ │ │ ├── OrderItemDto.java
│ │ │ │ │ ├── OrderSummaryDto.java
│ │ │ │ │ ├── SalesOrderDetailDto.java
│ │ │ │ │ ├── SalesOrderListItemDto.java
│ │ │ │ │ └── SalesOrderListResponseDto.java
│ │ │ │ ├── quotation
│ │ │ │ │ ├── ApproveQuotationResponseDto.java
│ │ │ │ │ ├── QuotationConfirmRequestDto.java
│ │ │ │ │ ├── QuotationConfirmResponseDto.java
│ │ │ │ │ ├── QuotationCreateResponseDto.java
│ │ │ │ │ ├── QuotationDetailDto.java
│ │ │ │ │ ├── QuotationItemDto.java
│ │ │ │ │ ├── QuotationItemRequestDto.java
│ │ │ │ │ ├── QuotationListItemDto.java
│ │ │ │ │ ├── QuotationListResponseDto.java
│ │ │ │ │ └── QuotationRequestDto.java
│ │ │ │ ├── response
│ │ │ │ │ ├── AttendanceListItemDto.java
│ │ │ │ │ ├── AttendanceListResponseDto.java
│ │ │ │ │ ├── AttendanceRecordDto.java
│ │ │ │ │ ├── AttendanceStatusDto.java
│ │ │ │ │ ├── CustomerUserDetailDto.java
│ │ │ │ │ ├── DepartmentDetailDto.java
│ │ │ │ │ ├── DepartmentEmployeeDto.java
│ │ │ │ │ ├── DepartmentListItemDto.java
│ │ │ │ │ ├── DepartmentListResponseDto.java
│ │ │ │ │ ├── DepartmentMemberDto.java
│ │ │ │ │ ├── DepartmentSimpleDto.java
│ │ │ │ │ ├── DesignatedEmployee.java
│ │ │ │ │ ├── EmployeeBasicInfoDto.java
│ │ │ │ │ ├── EmployeeCreateResponseDto.java
│ │ │ │ │ ├── EmployeeDetailDto.java
│ │ │ │ │ ├── EmployeeInfoDto.java
│ │ │ │ │ ├── EmployeeListItemDto.java
│ │ │ │ │ ├── EmployeeListResponseDto.java
│ │ │ │ │ ├── EmployeeTrainingHistoryDto.java
│ │ │ │ │ ├── EmployeeTrainingItemDto.java
│ │ │ │ │ ├── EmployeeTrainingListItemDto.java
│ │ │ │ │ ├── EmployeeTrainingListResponseDto.java
│ │ │ │ │ ├── EmployeeTrainingSummaryDto.java
│ │ │ │ │ ├── EmployeeWithTrainingDto.java
│ │ │ │ │ ├── HRStatisticsResponseDto.java
│ │ │ │ │ ├── HrmEmployeeBasicInfoDto.java
│ │ │ │ │ ├── LeaveRequestEmployeeDto.java
│ │ │ │ │ ├── LeaveRequestListItemDto.java
│ │ │ │ │ ├── LeaveRequestListResponseDto.java
│ │ │ │ │ ├── PageInfo.java
│ │ │ │ │ ├── PageInfoDto.java
│ │ │ │ │ ├── PayItemDto.java
│ │ │ │ │ ├── PayrollListEmployeeDto.java
│ │ │ │ │ ├── PayrollListItemDto.java
│ │ │ │ │ ├── PayrollListPayDto.java
│ │ │ │ │ ├── PayrollListResponseDto.java
│ │ │ │ │ ├── PayrollStatusDto.java
│ │ │ │ │ ├── PaystubDetailDto.java
│ │ │ │ │ ├── PaystubEmployeeDto.java
│ │ │ │ │ ├── PaystubPayDto.java
│ │ │ │ │ ├── PeriodStatisticsDto.java
│ │ │ │ │ ├── PositionDetailDto.java
│ │ │ │ │ ├── PositionEmployeeDto.java
│ │ │ │ │ ├── PositionListItemDto.java
│ │ │ │ │ ├── PositionSimpleDto.java
│ │ │ │ │ ├── ProgramHistoryItemDto.java
│ │ │ │ │ ├── RemainingLeaveDaysDto.java
│ │ │ │ │ ├── StatisticValueDto.java
│ │ │ │ │ ├── TimeRecordDetailDto.java
│ │ │ │ │ ├── TimeRecordListItemDto.java
│ │ │ │ │ ├── TimeRecordListResponseDto.java
│ │ │ │ │ ├── TrainingCategoryDto.java
│ │ │ │ │ ├── TrainingCompletionStatusDto.java
│ │ │ │ │ ├── TrainingListItemDto.java
│ │ │ │ │ ├── TrainingListResponseDto.java
│ │ │ │ │ ├── TrainingProgramSimpleDto.java
│ │ │ │ │ ├── TrainingResponseDto.java
│ │ │ │ │ ├── TrainingStatusItemDto.java
│ │ │ │ │ ├── TrainingStatusResponseDto.java
│ │ │ │ │ ├── UserInfoResponse.java
│ │ │ │ │ └── UserNameResponse.java
│ │ │ │ └── sd
│ │ │ │ ├── InventoryCheckItemDto.java
│ │ │ │ ├── InventoryCheckItemRequestDto.java
│ │ │ │ ├── InventoryCheckRequestDto.java
│ │ │ │ ├── InventoryCheckResponseDto.java
│ │ │ │ ├── ItemPriceDto.java
│ │ │ │ ├── request
│ │ │ │ │ ├── ApproveOrderRequestDto.java
│ │ │ │ │ ├── ConfirmQuotationRequestDto.java
│ │ │ │ │ ├── CreateCustomerRequestDto.java
│ │ │ │ │ ├── CreateQuotationRequestDto.java
│ │ │ │ │ ├── CustomerManagerRequestDto.java
│ │ │ │ │ ├── InventoryCheckItemDto.java
│ │ │ │ │ ├── InventoryCheckRequestDto.java
│ │ │ │ │ ├── QuotationItemRequestDto.java
│ │ │ │ │ ├── RejectQuotationRequestDto.java
│ │ │ │ │ └── UpdateCustomerRequestDto.java
│ │ │ │ └── response
│ │ │ │ ├── CustomerContactDto.java
│ │ │ │ ├── CustomerDetailDto.java
│ │ │ │ ├── CustomerListItemDto.java
│ │ │ │ ├── CustomerListResponseDto.java
│ │ │ │ ├── CustomerManagerDto.java
│ │ │ │ ├── DashboardStatisticsDto.java
│ │ │ │ ├── InventoryCheckResponseDto.java
│ │ │ │ ├── InventoryCheckResultItemDto.java
│ │ │ │ ├── OrderCustomerDto.java
│ │ │ │ ├── OrderDetailDto.java
│ │ │ │ ├── OrderItemDto.java
│ │ │ │ ├── PageInfo.java
│ │ │ │ ├── PagedQuotationResponse.java
│ │ │ │ ├── PeriodInfoDto.java
│ │ │ │ ├── PeriodStatisticsDto.java
│ │ │ │ ├── ProductShareDto.java
│ │ │ │ ├── QuotationDetailDto.java
│ │ │ │ ├── QuotationItemDto.java
│ │ │ │ ├── QuotationListItemDto.java
│ │ │ │ ├── QuotationListResponseDto.java
│ │ │ │ ├── SalesAnalyticsDto.java
│ │ │ │ ├── SalesOrderDetailResponseDto.java
│ │ │ │ ├── SalesOrderListItemDto.java
│ │ │ │ ├── SalesOrderListResponseDto.java
│ │ │ │ ├── SalesStatisticsDto.java
│ │ │ │ ├── StatisticsValueDto.java
│ │ │ │ ├── TopCustomerDto.java
│ │ │ │ ├── TrendDto.java
│ │ │ │ └── TrendScaleDto.java
│ │ │ ├── enums
│ │ │ │ ├── AttendanceStatus.java
│ │ │ │ ├── Gender.java
│ │ │ │ ├── LeaveRequestStatus.java
│ │ │ │ ├── LeaveType.java
│ │ │ │ ├── PayrollStatus.java
│ │ │ │ ├── TrainingCategory.java
│ │ │ │ ├── TrainingCompletionStatus.java
│ │ │ │ ├── TrainingStatus.java
│ │ │ │ ├── UserStatus.java
│ │ │ │ ├── VacationStatus.java
│ │ │ │ └── VacationType.java
│ │ │ ├── impl
│ │ │ │ ├── BusinessServiceImpl.java
│ │ │ │ ├── HrmServiceImpl.java
│ │ │ │ └── SdServiceImpl.java
│ │ │ └── service
│ │ │ ├── FcmHttpService.java
│ │ │ ├── HrmHttpService.java
│ │ │ ├── HrmService.java
│ │ │ ├── SdHttpService.java
│ │ │ ├── SdService.java
│ │ │ └── impl
│ │ │ ├── FcmHttpServiceImpl.java
│ │ │ ├── HrmHttpServiceImpl.java
│ │ │ └── SdHttpServiceImpl.java
│ │ ├── common
│ │ │ ├── dto
│ │ │ │ ├── ManagerDto.java
│ │ │ │ ├── PageDto.java
│ │ │ │ ├── RemoteApiResponse.java
│ │ │ │ ├── pagable
│ │ │ │ │ └── PageResponseDto.java
│ │ │ │ ├── stats
│ │ │ │ │ ├── StatsMetricsDto.java
│ │ │ │ │ └── StatsResponseDto.java
│ │ │ │ └── validation
│ │ │ │ ├── AllowedValues.java
│ │ │ │ ├── AllowedValuesValidator.java
│ │ │ │ ├── UuidV7Validator.java
│ │ │ │ └── ValidUuidV7.java
│ │ │ ├── exception
│ │ │ │ ├── BusinessException.java
│ │ │ │ ├── DatabaseException.java
│ │ │ │ ├── ErrorCode.java
│ │ │ │ ├── RemoteApiException.java
│ │ │ │ ├── ValidationException.java
│ │ │ │ └── handler
│ │ │ │ └── GlobalExceptionHandler.java
│ │ │ ├── response
│ │ │ │ └── ApiResponse.java
│ │ │ └── util
│ │ │ ├── PageResponseUtils.java
│ │ │ └── UuidV7.java
│ │ ├── config
│ │ │ ├── application
│ │ │ │ ├── AppConfig.java
│ │ │ │ ├── SchedulingConfig.java
│ │ │ │ ├── ServiceMapConfig.java
│ │ │ │ └── ServiceProperties.java
│ │ │ ├── security
│ │ │ │ ├── SecurityConfig.java
│ │ │ │ ├── converter
│ │ │ │ │ └── EverJwtAuthenticationConverter.java
│ │ │ │ └── principal
│ │ │ │ ├── EverJwtAuthenticationToken.java
│ │ │ │ └── EverUserPrincipal.java
│ │ │ ├── swagger
│ │ │ │ └── SwaggerConfig.java
│ │ │ └── webclient
│ │ │ ├── ApiClientKey.java
│ │ │ ├── ApiProperties.java
│ │ │ ├── WebClientConfig.java
│ │ │ └── WebClientProvider.java
│ │ ├── dashboard
│ │ │ ├── dto
│ │ │ │ └── response
│ │ │ │ ├── DashboardPeriodStatisticsDto.java
│ │ │ │ ├── DashboardStatisticsResponseDto.java
│ │ │ │ └── DashboardValueDto.java
│ │ │ └── service
│ │ │ ├── DashboardHttpService.java
│ │ │ ├── DashboardService.java
│ │ │ └── impl
│ │ │ ├── DashboardHttpServiceImpl.java
│ │ │ └── DashboardServiceImpl.java
│ │ ├── facade
│ │ │ ├── DashboardController.java
│ │ │ └── dto
│ │ │ ├── DashboardWorkflowItemDto.java
│ │ │ ├── DashboardWorkflowResponseDto.java
│ │ │ └── DashboardWorkflowTabDto.java
│ │ ├── filter
│ │ │ ├── LoggingFilter.java
│ │ │ └── SseHttpHeaderFilter.java
│ │ ├── infrastructure
│ │ │ ├── kafka
│ │ │ │ ├── config
│ │ │ │ │ ├── KafkaConfig.java
│ │ │ │ │ ├── KafkaFilterConfig.java
│ │ │ │ │ └── KafkaTopicConfig.java
│ │ │ │ ├── consumer
│ │ │ │ │ ├── AlarmTopicEventListener.java
│ │ │ │ │ ├── MultiTopicEventListener.java
│ │ │ │ │ └── handler
│ │ │ │ │ ├── MultiTopicEventHandler.java
│ │ │ │ │ └── impl
│ │ │ │ │ └── MultiTopicEventHandlerImpl.java
│ │ │ │ ├── handler
│ │ │ │ │ ├── DeadLetterQueueHandler.java
│ │ │ │ │ ├── KafkaErrorHandler.java
│ │ │ │ │ └── impl
│ │ │ │ │ └── DeadLetterQueueHandlerImpl.java
│ │ │ │ └── producer
│ │ │ │ ├── KafkaProducerService.java
│ │ │ │ └── impl
│ │ │ │ └── KafkaProducerServiceImpl.java
│ │ │ └── redis
│ │ │ ├── config
│ │ │ │ └── RedisConfig.java
│ │ │ └── service
│ │ │ ├── RedisService.java
│ │ │ └── impl
│ │ │ └── RedisServiceImpl.java
│ │ ├── mockdata
│ │ │ └── scmpp
│ │ │ ├── controller
│ │ │ │ ├── ImController.java
│ │ │ │ ├── MmController.java
│ │ │ │ └── PpController.java
│ │ │ ├── dto
│ │ │ │ ├── DueDatePreviewDto.java
│ │ │ │ ├── ItemDetailDto.java
│ │ │ │ ├── PendingPurchaseOrderDto.java
│ │ │ │ ├── PlannedOrderDetailDto.java
│ │ │ │ ├── PlannedOrderListItemDto.java
│ │ │ │ ├── ProductionOrderDto.java
│ │ │ │ ├── ProductionSalesOrderDto.java
│ │ │ │ ├── QuotationSimulationDto.java
│ │ │ │ ├── ReadyToShipDetailDto.java
│ │ │ │ ├── ReadyToShipOrderDto.java
│ │ │ │ ├── ReadyToShipSalesOrderDto.java
│ │ │ │ ├── ReceivedPurchaseOrderDto.java
│ │ │ │ ├── SalesOrderStatusDto.java
│ │ │ │ ├── bom
│ │ │ │ │ ├── BomCreateRequestDto.java
│ │ │ │ │ ├── BomDetailDto.java
│ │ │ │ │ └── BomListItemDto.java
│ │ │ │ ├── inventory
│ │ │ │ │ ├── AddInventoryItemRequestDto.java
│ │ │ │ │ ├── CreateStockTransferDto.java
│ │ │ │ │ ├── CreateWarehouseDto.java
│ │ │ │ │ ├── InventoryItemDto.java
│ │ │ │ │ ├── ProductMultipleResponseDto.java
│ │ │ │ │ ├── ShortageItemDetailDto.java
│ │ │ │ │ ├── ShortageItemPreviewDto.java
│ │ │ │ │ ├── StockTransferDetailDto.java
│ │ │ │ │ └── StockTransferDto.java
│ │ │ │ ├── mes
│ │ │ │ │ ├── MesWorkOrderDetailDto.java
│ │ │ │ │ ├── MesWorkOrderDto.java
│ │ │ │ │ └── MesWorkOrderSummaryDto.java
│ │ │ │ ├── mps
│ │ │ │ │ └── MpsProductPlanDto.java
│ │ │ │ ├── mrp
│ │ │ │ │ ├── MrpOrderDto.java
│ │ │ │ │ ├── MrpRequestBodyDto.java
│ │ │ │ │ └── MrpRequestSummaryDto.java
│ │ │ │ ├── po
│ │ │ │ │ ├── MmPurchaseOrderRejectRequestDto.java
│ │ │ │ │ ├── PoDetailDto.java
│ │ │ │ │ └── PoItemDto.java
│ │ │ │ ├── pr
│ │ │ │ │ ├── MmPurchaseRequisitionCreateRequestDto.java
│ │ │ │ │ ├── MmPurchaseRequisitionRejectRequestDto.java
│ │ │ │ │ └── MmPurchaseRequisitionUpdateRequestDto.java
│ │ │ │ └── warehouse
│ │ │ │ ├── UpdateWarehouseRequestDto.java
│ │ │ │ ├── WarehouseDetailDto.java
│ │ │ │ ├── WarehouseDto.java
│ │ │ │ └── WarehouseStatisticDto.java
│ │ │ ├── impl
│ │ │ │ └── MmServiceImpl.java
│ │ │ └── service
│ │ │ ├── MmService.java
│ │ │ ├── MmStatisticsService.java
│ │ │ └── MmStatisticsServiceImpl.java
│ │ ├── scm
│ │ │ ├── PeriodStatDto.java
│ │ │ ├── im
│ │ │ │ ├── controller
│ │ │ │ │ ├── ImController.java
│ │ │ │ │ └── OrderController.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── AddInventoryItemRequest.java
│ │ │ │ │ ├── SalesOrderStatusChangeRequestDto.java
│ │ │ │ │ ├── StockTransferRequestDto.java
│ │ │ │ │ ├── WarehouseCreateRequestDto.java
│ │ │ │ │ └── WarehouseUpdateRequestDto.java
│ │ │ │ └── service
│ │ │ │ ├── ImHttpService.java
│ │ │ │ └── impl
│ │ │ │ └── ImHttpServiceImpl.java
│ │ │ ├── mm
│ │ │ │ ├── controller
│ │ │ │ │ └── MmController.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── ItemInfoRequest.java
│ │ │ │ │ ├── MaterialItemsDto.java
│ │ │ │ │ ├── MmSupplierDetailResponseDto.java
│ │ │ │ │ ├── MmSupplierListResponseDto.java
│ │ │ │ │ ├── MmSupplierUpdateRequestDto.java
│ │ │ │ │ ├── PurchaseOrderRejectRequestDto.java
│ │ │ │ │ ├── PurchaseRequisitionCreateRequestDto.java
│ │ │ │ │ ├── PurchaseRequisitionRejectRequestDto.java
│ │ │ │ │ ├── StockPurchaseRequestDto.java
│ │ │ │ │ ├── SupplierCreateRequestDto.java
│ │ │ │ │ ├── SupplierInfoDto.java
│ │ │ │ │ └── SupplierUpdateRequestDto.java
│ │ │ │ ├── impl
│ │ │ │ │ └── MmServiceImpl.java
│ │ │ │ └── service
│ │ │ │ ├── MmHttpService.java
│ │ │ │ ├── MmService.java
│ │ │ │ └── impl
│ │ │ │ └── MmHttpServiceImpl.java
│ │ │ └── pp
│ │ │ ├── PpHttpService.java
│ │ │ ├── controller
│ │ │ │ └── PpController.java
│ │ │ ├── dto
│ │ │ │ ├── BomCreateRequestDto.java
│ │ │ │ ├── MrpRunConvertRequestDto.java
│ │ │ │ ├── QuotationConfirmRequestDto.java
│ │ │ │ └── QuotationSimulateRequestDto.java
│ │ │ └── service
│ │ │ └── impl
│ │ │ └── PpHttpServiceImpl.java
│ │ └── user
│ │ ├── client
│ │ │ └── UserProfileRemoteClient.java
│ │ ├── controller
│ │ │ └── UserInfoController.java
│ │ ├── dto
│ │ │ ├── CustomerUserProfileResponse.java
│ │ │ ├── InternalUserProfileResponse.java
│ │ │ ├── SupplierUserProfileResponse.java
│ │ │ └── UserInfoResponse.java
│ │ └── service
│ │ └── UserInfoService.java
│ └── event
│ ├── AlarmEvent.java
│ ├── AlarmSentEvent.java
│ ├── BaseEvent.java
│ ├── BusinessEvent.java
│ ├── ScmEvent.java
│ ├── StatusEvent.java
│ ├── UserEvent.java
│ └── alarm
│ ├── AlarmType.java
│ ├── LinkType.java
│ └── TargetType.java
└── resources
├── application-prod.yml
└── application.yml
src
├── main
│ ├── java
│ │ └── org
│ │ └── ever
│ │ ├── _4ever_be_scm
│ │ │ ├── Application.java
│ │ │ ├── common
│ │ │ │ ├── async
│ │ │ │ │ ├── AsyncResultManager.java
│ │ │ │ │ └── GenericAsyncResultManager.java
│ │ │ │ ├── audit
│ │ │ │ │ ├── Auditable.java
│ │ │ │ │ ├── ChangeType.java
│ │ │ │ │ ├── EntityAuditListener.java
│ │ │ │ │ ├── EntityChange.java
│ │ │ │ │ ├── TransactionChanges.java
│ │ │ │ │ └── TransactionEntityChangeCollector.java
│ │ │ │ ├── entity
│ │ │ │ │ ├── TimeStamp.java
│ │ │ │ │ └── TransactionChangeLog.java
│ │ │ │ ├── exception
│ │ │ │ │ ├── BusinessException.java
│ │ │ │ │ ├── DatabaseException.java
│ │ │ │ │ ├── ErrorCode.java
│ │ │ │ │ ├── ScmException.java
│ │ │ │ │ └── handler
│ │ │ │ │ └── GlobalExceptionHandler.java
│ │ │ │ ├── jpa
│ │ │ │ │ └── converter
│ │ │ │ │ └── DurationToSecondsConverter.java
│ │ │ │ ├── repository
│ │ │ │ │ └── TransactionChangeLogRepository.java
│ │ │ │ ├── response
│ │ │ │ │ └── ApiResponse.java
│ │ │ │ ├── saga
│ │ │ │ │ ├── CompensationHandler.java
│ │ │ │ │ ├── SagaCompensationService.java
│ │ │ │ │ ├── SagaTransactionContext.java
│ │ │ │ │ └── SagaTransactionManager.java
│ │ │ │ └── service
│ │ │ │ ├── DateRangeCalculator.java
│ │ │ │ └── LogCleanupService.java
│ │ │ ├── config
│ │ │ │ ├── ProductInitializer.java
│ │ │ │ ├── RestClientConfig.java
│ │ │ │ ├── SupplierUserInitializer.java
│ │ │ │ ├── application
│ │ │ │ │ ├── AppConfig.java
│ │ │ │ │ └── SchedulingConfig.java
│ │ │ │ ├── database
│ │ │ │ │ └── DatabaseConfig.java
│ │ │ │ └── swagger
│ │ │ │ └── SwaggerConfig.java
│ │ │ ├── filter
│ │ │ │ ├── AsyncRequestLoggingListener.java
│ │ │ │ └── LoggingFilter.java
│ │ │ ├── infrastructure
│ │ │ │ ├── kafka
│ │ │ │ │ ├── config
│ │ │ │ │ │ ├── KafkaConfig.java
│ │ │ │ │ │ ├── KafkaFilterConfig.java
│ │ │ │ │ │ └── KafkaTopicConfig.java
│ │ │ │ │ ├── consumer
│ │ │ │ │ │ ├── MesCompleteCompletionListener.java
│ │ │ │ │ │ ├── MesStartCompletionListener.java
│ │ │ │ │ │ ├── MultiTopicEventListener.java
│ │ │ │ │ │ ├── PurchaseOrderApprovalCompletionListener.java
│ │ │ │ │ │ ├── QuotationUpdateCompletionListener.java
│ │ │ │ │ │ ├── SalesOrderStatusChangeCompletionListener.java
│ │ │ │ │ │ ├── SupplierUserResultListener.java
│ │ │ │ │ │ └── handler
│ │ │ │ │ │ ├── MultiTopicEventHandler.java
│ │ │ │ │ │ └── impl
│ │ │ │ │ │ └── MultiTopicEventHandlerImpl.java
│ │ │ │ │ ├── event
│ │ │ │ │ │ ├── AlarmEvent.java
│ │ │ │ │ │ ├── BaseEvent.java
│ │ │ │ │ │ ├── BusinessEvent.java
│ │ │ │ │ │ ├── ScmEvent.java
│ │ │ │ │ │ └── UserEvent.java
│ │ │ │ │ ├── handler
│ │ │ │ │ │ ├── DeadLetterQueueHandler.java
│ │ │ │ │ │ ├── KafkaErrorHandler.java
│ │ │ │ │ │ └── impl
│ │ │ │ │ │ └── DeadLetterQueueHandlerImpl.java
│ │ │ │ │ └── producer
│ │ │ │ │ ├── KafkaProducerService.java
│ │ │ │ │ └── impl
│ │ │ │ │ └── KafkaProducerServiceImpl.java
│ │ │ │ └── redis
│ │ │ │ ├── config
│ │ │ │ │ ├── RedisConfig.java
│ │ │ │ │ └── RedissonConfig.java
│ │ │ │ ├── dto
│ │ │ │ │ └── DeliveryCompletionTask.java
│ │ │ │ └── service
│ │ │ │ ├── DeliverySchedulerService.java
│ │ │ │ ├── RedisService.java
│ │ │ │ └── impl
│ │ │ │ ├── DeliverySchedulerServiceImpl.java
│ │ │ │ └── RedisServiceImpl.java
│ │ │ └── scm
│ │ │ ├── external
│ │ │ │ ├── controller
│ │ │ │ │ └── ExternalApiController.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── ProductMultipleRequestDto.java
│ │ │ │ │ ├── ProductMultipleResponseDto.java
│ │ │ │ │ ├── ProductOrderIdsRequestDto.java
│ │ │ │ │ ├── ProductOrderInfoDto.java
│ │ │ │ │ ├── ProductOrderItemResponseDto.java
│ │ │ │ │ ├── ProductOrderRequestDto.java
│ │ │ │ │ ├── StockCheckRequestDto.java
│ │ │ │ │ ├── StockCheckResponseDto.java
│ │ │ │ │ ├── SupplierCompanyIdDto.java
│ │ │ │ │ ├── SupplierCompanyMultipleRequestDto.java
│ │ │ │ │ ├── SupplierCompanyMultipleResponseDto.java
│ │ │ │ │ ├── SupplierCompanySingleRequestDto.java
│ │ │ │ │ ├── SupplierCompanySingleResponseDto.java
│ │ │ │ │ └── SupplierUserIdDto.java
│ │ │ │ └── service
│ │ │ │ ├── ExternalApiService.java
│ │ │ │ └── impl
│ │ │ │ └── ExternalApiServiceImpl.java
│ │ │ ├── iv
│ │ │ │ ├── controller
│ │ │ │ │ ├── InventoryController.java
│ │ │ │ │ ├── IvStaticController.java
│ │ │ │ │ ├── PurchaseOrdersController.java
│ │ │ │ │ ├── SalesOrderController.java
│ │ │ │ │ ├── StockTransferController.java
│ │ │ │ │ └── WarehouseController.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── InventoryItemDetailDto.java
│ │ │ │ │ ├── InventoryItemDto.java
│ │ │ │ │ ├── PageResponseDto.java
│ │ │ │ │ ├── PagedResponseDto.java
│ │ │ │ │ ├── PurchaseOrderDto.java
│ │ │ │ │ ├── SalesOrderDetailDto.java
│ │ │ │ │ ├── SalesOrderDto.java
│ │ │ │ │ ├── SalesOrderStatusChangeRequestDto.java
│ │ │ │ │ ├── ShortageItemDto.java
│ │ │ │ │ ├── ShortageItemPreviewDto.java
│ │ │ │ │ ├── StockDeliveryRequestDto.java
│ │ │ │ │ ├── StockMovementDto.java
│ │ │ │ │ ├── StockTransferDto.java
│ │ │ │ │ ├── StockTransferRequestDto.java
│ │ │ │ │ ├── WarehouseCreateRequestDto.java
│ │ │ │ │ ├── WarehouseDetailDto.java
│ │ │ │ │ ├── WarehouseDropdownResponseDto.java
│ │ │ │ │ ├── WarehouseDto.java
│ │ │ │ │ ├── WarehouseUpdateRequestDto.java
│ │ │ │ │ ├── request
│ │ │ │ │ │ ├── AddInventoryItemRequest.java
│ │ │ │ │ │ └── ItemInfoRequest.java
│ │ │ │ │ └── response
│ │ │ │ │ ├── ImStatisticPeriodDto.java
│ │ │ │ │ ├── ImStatisticResponseDto.java
│ │ │ │ │ ├── ItemInfoResponseDto.java
│ │ │ │ │ ├── ItemToggleResponseDto.java
│ │ │ │ │ ├── ShortageStatisticPeriodDto.java
│ │ │ │ │ ├── ShortageStatisticResponseDto.java
│ │ │ │ │ ├── StatisticValueDto.java
│ │ │ │ │ ├── WarehouseStatisticPeriodDto.java
│ │ │ │ │ └── WarehouseStatisticResponseDto.java
│ │ │ │ ├── entity
│ │ │ │ │ ├── Product.java
│ │ │ │ │ ├── ProductStock.java
│ │ │ │ │ ├── ProductStockLog.java
│ │ │ │ │ ├── SupplierCompany.java
│ │ │ │ │ ├── SupplierUser.java
│ │ │ │ │ └── Warehouse.java
│ │ │ │ ├── integration
│ │ │ │ │ ├── adapter
│ │ │ │ │ │ └── SdOrderServiceAdapter.java
│ │ │ │ │ ├── dto
│ │ │ │ │ │ ├── SdApiResponse.java
│ │ │ │ │ │ ├── SdOrderDetailResponseDto.java
│ │ │ │ │ │ ├── SdOrderDto.java
│ │ │ │ │ │ └── SdOrderListResponseDto.java
│ │ │ │ │ └── port
│ │ │ │ │ └── SdOrderServicePort.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── ProductRepository.java
│ │ │ │ │ ├── ProductStockLogRepository.java
│ │ │ │ │ ├── ProductStockRepository.java
│ │ │ │ │ ├── SupplierCompanyRepository.java
│ │ │ │ │ ├── SupplierUserRepository.java
│ │ │ │ │ └── WarehouseRepository.java
│ │ │ │ ├── service
│ │ │ │ │ ├── InventoryService.java
│ │ │ │ │ ├── IvStatisticService.java
│ │ │ │ │ ├── PurchaseOrdersService.java
│ │ │ │ │ ├── SalesOrderService.java
│ │ │ │ │ ├── StockReservationService.java
│ │ │ │ │ ├── StockTransferService.java
│ │ │ │ │ ├── WarehouseService.java
│ │ │ │ │ └── impl
│ │ │ │ │ ├── InventoryServiceImpl.java
│ │ │ │ │ ├── IvStatisticServiceImpl.java
│ │ │ │ │ ├── PurchaseOrdersServiceImpl.java
│ │ │ │ │ ├── SalesOrderServiceImpl.java
│ │ │ │ │ ├── StockReservationServiceImpl.java
│ │ │ │ │ ├── StockTransferServiceImpl.java
│ │ │ │ │ └── WarehouseServiceImpl.java
│ │ │ │ └── vo
│ │ │ │ ├── InventoryFilterVo.java
│ │ │ │ └── StockMovementVo.java
│ │ │ ├── mm
│ │ │ │ ├── controller
│ │ │ │ │ ├── MMStatisticsController.java
│ │ │ │ │ ├── PurchaseOrderController.java
│ │ │ │ │ ├── PurchaseRequisitionController.java
│ │ │ │ │ ├── StockPurchaseController.java
│ │ │ │ │ ├── SupplierController.java
│ │ │ │ │ └── SupplierUserController.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── MMStatisticsResponseDto.java
│ │ │ │ │ ├── PurchaseOrderDetailResponseDto.java
│ │ │ │ │ ├── PurchaseOrderListResponseDto.java
│ │ │ │ │ ├── PurchaseOrderRejectRequestDto.java
│ │ │ │ │ ├── PurchaseRequisitionCreateRequestDto.java
│ │ │ │ │ ├── PurchaseRequisitionDetailResponseDto.java
│ │ │ │ │ ├── PurchaseRequisitionListResponseDto.java
│ │ │ │ │ ├── PurchaseRequisitionRejectRequestDto.java
│ │ │ │ │ ├── StockPurchaseRequestDto.java
│ │ │ │ │ ├── SupplierDetailResponseDto.java
│ │ │ │ │ ├── SupplierListResponseDto.java
│ │ │ │ │ ├── SupplierOrderStatisticsResponseDto.java
│ │ │ │ │ ├── SupplierProfileResponseDto.java
│ │ │ │ │ ├── ToggleCodeLabelDto.java
│ │ │ │ │ ├── UserNameResponseDto.java
│ │ │ │ │ └── supplier
│ │ │ │ │ ├── SupplierCreateRequestDto.java
│ │ │ │ │ └── SupplierUpdateRequestDto.java
│ │ │ │ ├── entity
│ │ │ │ │ ├── ProductOrder.java
│ │ │ │ │ ├── ProductOrderApproval.java
│ │ │ │ │ ├── ProductOrderItem.java
│ │ │ │ │ ├── ProductOrderShipment.java
│ │ │ │ │ ├── ProductRequest.java
│ │ │ │ │ ├── ProductRequestApproval.java
│ │ │ │ │ └── ProductRequestItem.java
│ │ │ │ ├── integration
│ │ │ │ │ ├── SupplierCompanyKafkaAdapter.java
│ │ │ │ │ ├── adapter
│ │ │ │ │ │ ├── InternalUserServiceAdapter.java
│ │ │ │ │ │ └── KafkaSupplierUserServiceAdapter.java
│ │ │ │ │ ├── dto
│ │ │ │ │ │ └── InternalUserResponseDto.java
│ │ │ │ │ └── port
│ │ │ │ │ ├── InternalUserServicePort.java
│ │ │ │ │ └── SupplierUserServicePort.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── ProductOrderApprovalRepository.java
│ │ │ │ │ ├── ProductOrderItemRepository.java
│ │ │ │ │ ├── ProductOrderRepository.java
│ │ │ │ │ ├── ProductOrderShipmentRepository.java
│ │ │ │ │ ├── ProductRequestApprovalRepository.java
│ │ │ │ │ ├── ProductRequestItemRepository.java
│ │ │ │ │ └── ProductRequestRepository.java
│ │ │ │ ├── service
│ │ │ │ │ ├── MMStatisticsService.java
│ │ │ │ │ ├── PurchaseOrderService.java
│ │ │ │ │ ├── PurchaseRequisitionService.java
│ │ │ │ │ ├── StockPurchaseService.java
│ │ │ │ │ ├── SupplierService.java
│ │ │ │ │ ├── impl
│ │ │ │ │ │ ├── MMStatisticsServiceImpl.java
│ │ │ │ │ │ ├── PurchaseOrderServiceImpl.java
│ │ │ │ │ │ ├── PurchaseRequisitionServiceImpl.java
│ │ │ │ │ │ ├── StockPurchaseServiceImpl.java
│ │ │ │ │ │ └── SupplierServiceImpl.java
│ │ │ │ │ └── model
│ │ │ │ │ └── SupplierCreationResult.java
│ │ │ │ └── vo
│ │ │ │ ├── PurchaseOrderSearchVo.java
│ │ │ │ ├── PurchaseRequisitionCreateVo.java
│ │ │ │ ├── PurchaseRequisitionSearchVo.java
│ │ │ │ └── SupplierSearchVo.java
│ │ │ └── pp
│ │ │ ├── config
│ │ │ │ └── OperationInitializer.java
│ │ │ ├── controller
│ │ │ │ ├── BomController.java
│ │ │ │ ├── DashboardController.java
│ │ │ │ ├── MesController.java
│ │ │ │ ├── MrpController.java
│ │ │ │ ├── PpStatisticsController.java
│ │ │ │ ├── ProductionDashboardController.java
│ │ │ │ └── QuotationController.java
│ │ │ ├── dto
│ │ │ │ ├── BomCreateRequestDto.java
│ │ │ │ ├── BomDetailResponseDto.java
│ │ │ │ ├── BomListResponseDto.java
│ │ │ │ ├── MesDetailResponseDto.java
│ │ │ │ ├── MesQueryResponseDto.java
│ │ │ │ ├── MpsPreviewResponseDto.java
│ │ │ │ ├── MpsQueryResponseDto.java
│ │ │ │ ├── MrpQueryResponseDto.java
│ │ │ │ ├── MrpRunConvertRequestDto.java
│ │ │ │ ├── MrpRunQueryResponseDto.java
│ │ │ │ ├── PpStatisticPeriodDto.java
│ │ │ │ ├── PpStatisticsResponseDto.java
│ │ │ │ ├── ProductDetailResponseDto.java
│ │ │ │ ├── ProductMapResponseDto.java
│ │ │ │ ├── QuotationConfirmRequestDto.java
│ │ │ │ ├── QuotationGroupListResponseDto.java
│ │ │ │ ├── QuotationSimulateRequestDto.java
│ │ │ │ └── QuotationSimulateResponseDto.java
│ │ │ ├── entity
│ │ │ │ ├── Bom.java
│ │ │ │ ├── BomExplosion.java
│ │ │ │ ├── BomItem.java
│ │ │ │ ├── Mes.java
│ │ │ │ ├── MesOperationLog.java
│ │ │ │ ├── Mps.java
│ │ │ │ ├── MpsDetail.java
│ │ │ │ ├── Mrp.java
│ │ │ │ ├── MrpRun.java
│ │ │ │ ├── Operation.java
│ │ │ │ └── Routing.java
│ │ │ ├── integration
│ │ │ │ ├── adapter
│ │ │ │ │ └── BusinessQuotationServiceAdapter.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── BusinessApiResponse.java
│ │ │ │ │ ├── BusinessQuotationDto.java
│ │ │ │ │ └── BusinessQuotationListResponseDto.java
│ │ │ │ └── port
│ │ │ │ └── BusinessQuotationServicePort.java
│ │ │ ├── repository
│ │ │ │ ├── BomExplosionRepository.java
│ │ │ │ ├── BomItemRepository.java
│ │ │ │ ├── BomRepository.java
│ │ │ │ ├── MesOperationLogRepository.java
│ │ │ │ ├── MesRepository.java
│ │ │ │ ├── MpsDetailRepository.java
│ │ │ │ ├── MpsRepository.java
│ │ │ │ ├── MrpRepository.java
│ │ │ │ ├── MrpRunRepository.java
│ │ │ │ ├── OperationRepository.java
│ │ │ │ └── RoutingRepository.java
│ │ │ ├── service
│ │ │ │ ├── BomService.java
│ │ │ │ ├── DashboardService.java
│ │ │ │ ├── MesService.java
│ │ │ │ ├── MrpService.java
│ │ │ │ ├── PpStatisticsService.java
│ │ │ │ ├── QuotationService.java
│ │ │ │ ├── dto
│ │ │ │ │ └── DashboardWorkflowItemDto.java
│ │ │ │ └── impl
│ │ │ │ ├── BomServiceImpl.java
│ │ │ │ ├── DashboardServiceImpl.java
│ │ │ │ ├── MesServiceImpl.java
│ │ │ │ ├── MrpServiceImpl.java
│ │ │ │ ├── PpStatisticsServiceImpl.java
│ │ │ │ └── QuotationServiceImpl.java
│ │ │ └── util
│ │ │ └── WeekCalculator.java
│ │ └── event
│ │ ├── CreateAuthUserResultEvent.java
│ │ ├── CreateSupplierUserEvent.java
│ │ ├── MesCompleteCompletionEvent.java
│ │ ├── MesCompleteEvent.java
│ │ ├── MesStartCompletionEvent.java
│ │ ├── MesStartEvent.java
│ │ ├── PurchaseOrderApprovalCompletionEvent.java
│ │ ├── PurchaseOrderApprovalEvent.java
│ │ ├── QuotationUpdateCompletionEvent.java
│ │ ├── QuotationUpdateEvent.java
│ │ ├── SalesOrderStatusChangeCompletionEvent.java
│ │ ├── SalesOrderStatusChangeEvent.java
│ │ ├── SupplierCompanyResolveRequestEvent.java
│ │ └── SupplierCompanyResolveResultEvent.java
│ └── resources
│ └── application.yml
└── test
└── java
└── org
└── ever
└── _4ever_be_scm
└── ApplicationTests.java
src
├── main
│ ├── java
│ │ └── org
│ │ └── ever
│ │ ├── _4ever_be_alarm
│ │ │ ├── Application.java
│ │ │ ├── alarm
│ │ │ │ ├── controller
│ │ │ │ │ └── AlarmController.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── request
│ │ │ │ │ │ └── AlarmRequestDto.java
│ │ │ │ │ └── response
│ │ │ │ │ └── AlarmResponseDto.java
│ │ │ │ ├── service
│ │ │ │ │ ├── AlarmService.java
│ │ │ │ │ └── impl
│ │ │ │ │ └── AlarmServiceImpl.java
│ │ │ │ └── vo
│ │ │ │ └── AlarmRequestVo.java
│ │ │ ├── common
│ │ │ │ ├── async
│ │ │ │ │ ├── AsyncResultManager.java
│ │ │ │ │ └── GenericAsyncResultManager.java
│ │ │ │ ├── audit
│ │ │ │ │ ├── Auditable.java
│ │ │ │ │ ├── ChangeType.java
│ │ │ │ │ ├── EntityAuditListener.java
│ │ │ │ │ ├── EntityChange.java
│ │ │ │ │ ├── TransactionChanges.java
│ │ │ │ │ └── TransactionEntityChangeCollector.java
│ │ │ │ ├── entity
│ │ │ │ │ ├── TimeStamp.java
│ │ │ │ │ └── TransactionChangeLog.java
│ │ │ │ ├── exception
│ │ │ │ │ ├── AlarmException.java
│ │ │ │ │ ├── BusinessException.java
│ │ │ │ │ ├── DatabaseException.java
│ │ │ │ │ ├── ErrorCode.java
│ │ │ │ │ └── handler
│ │ │ │ │ └── GlobalExceptionHandler.java
│ │ │ │ ├── repository
│ │ │ │ │ └── TransactionChangeLogRepository.java
│ │ │ │ ├── response
│ │ │ │ │ ├── ApiResponse.java
│ │ │ │ │ ├── PageDto.java
│ │ │ │ │ └── PageResponseDto.java
│ │ │ │ ├── saga
│ │ │ │ │ ├── CompensationHandler.java
│ │ │ │ │ ├── SagaCompensationService.java
│ │ │ │ │ ├── SagaTransactionContext.java
│ │ │ │ │ └── SagaTransactionManager.java
│ │ │ │ ├── service
│ │ │ │ │ └── LogCleanupService.java
│ │ │ │ ├── util
│ │ │ │ │ ├── PageResponseUtils.java
│ │ │ │ │ └── UuidGenerator.java
│ │ │ │ └── validation
│ │ │ │ ├── AllowedValues.java
│ │ │ │ ├── AllowedValuesValidator.java
│ │ │ │ ├── UuidV7Validator.java
│ │ │ │ └── ValidUuidV7.java
│ │ │ ├── config
│ │ │ │ ├── application
│ │ │ │ │ ├── AppConfig.java
│ │ │ │ │ ├── DataInitializer.java
│ │ │ │ │ └── SchedulingConfig.java
│ │ │ │ ├── database
│ │ │ │ │ └── DatabaseConfig.java
│ │ │ │ └── swagger
│ │ │ │ └── SwaggerConfig.java
│ │ │ ├── filter
│ │ │ │ └── LoggingFilter.java
│ │ │ ├── infrastructure
│ │ │ │ ├── firebase
│ │ │ │ │ └── FirebaseConfig.java
│ │ │ │ ├── kafka
│ │ │ │ │ ├── config
│ │ │ │ │ │ ├── KafkaConfig.java
│ │ │ │ │ │ ├── KafkaFilterConfig.java
│ │ │ │ │ │ └── KafkaTopicConfig.java
│ │ │ │ │ ├── consumer
│ │ │ │ │ │ ├── AlarmEventListener.java
│ │ │ │ │ │ ├── MultiTopicEventListener.java
│ │ │ │ │ │ └── handler
│ │ │ │ │ │ ├── AlarmEventHandler.java
│ │ │ │ │ │ ├── MultiTopicEventHandler.java
│ │ │ │ │ │ └── impl
│ │ │ │ │ │ ├── AlarmEventHandlerImpl.java
│ │ │ │ │ │ └── MultiTopicEventHandlerImpl.java
│ │ │ │ │ ├── handler
│ │ │ │ │ │ ├── DeadLetterQueueHandler.java
│ │ │ │ │ │ ├── KafkaErrorHandler.java
│ │ │ │ │ │ └── impl
│ │ │ │ │ │ └── DeadLetterQueueHandlerImpl.java
│ │ │ │ │ └── producer
│ │ │ │ │ ├── KafkaProducerService.java
│ │ │ │ │ └── impl
│ │ │ │ │ └── KafkaProducerServiceImpl.java
│ │ │ │ └── redis
│ │ │ │ ├── config
│ │ │ │ │ └── RedisConfig.java
│ │ │ │ └── service
│ │ │ │ ├── RedisService.java
│ │ │ │ └── impl
│ │ │ │ └── RedisServiceImpl.java
│ │ │ └── notification
│ │ │ ├── adapter
│ │ │ │ ├── firebase
│ │ │ │ │ ├── in
│ │ │ │ │ └── out
│ │ │ │ │ └── NotificationPushAdapter.java
│ │ │ │ ├── jpa
│ │ │ │ │ ├── NotificationJpaAdapter.java
│ │ │ │ │ ├── UserDeviceTokenJpaAdapter.java
│ │ │ │ │ ├── entity
│ │ │ │ │ │ ├── Channel.java
│ │ │ │ │ │ ├── Notification.java
│ │ │ │ │ │ ├── NotificationChannel.java
│ │ │ │ │ │ ├── NotificationErrorCode.java
│ │ │ │ │ │ ├── NotificationLog.java
│ │ │ │ │ │ ├── NotificationStatus.java
│ │ │ │ │ │ ├── NotificationTarget.java
│ │ │ │ │ │ ├── NotificationTemplate.java
│ │ │ │ │ │ ├── Source.java
│ │ │ │ │ │ └── UserDeviceToken.java
│ │ │ │ │ └── repository
│ │ │ │ │ ├── ChannelRepository.java
│ │ │ │ │ ├── NotificationChannelRepository.java
│ │ │ │ │ ├── NotificationErrorCodeRepository.java
│ │ │ │ │ ├── NotificationLogRepository.java
│ │ │ │ │ ├── NotificationRepository.java
│ │ │ │ │ ├── NotificationStatusRepository.java
│ │ │ │ │ ├── NotificationTargetRepository.java
│ │ │ │ │ ├── NotificationTemplateRepository.java
│ │ │ │ │ ├── SourceRepository.java
│ │ │ │ │ └── UserDeviceTokenRepository.java
│ │ │ │ ├── kafka
│ │ │ │ │ ├── in
│ │ │ │ │ │ └── NotificationKafkaListener.java
│ │ │ │ │ └── out
│ │ │ │ │ └── NotificationEventProducerAdapter.java
│ │ │ │ └── web
│ │ │ │ ├── dto
│ │ │ │ │ ├── request
│ │ │ │ │ │ ├── DeviceTokenDeleteRequestDto.java
│ │ │ │ │ │ ├── DeviceTokenRegisterRequestDto.java
│ │ │ │ │ │ ├── DeviceTokenUpdateRequestDto.java
│ │ │ │ │ │ ├── NotificationMarkReadAllAndOneRequestDto.java
│ │ │ │ │ │ └── NotificationMarkReadRequestDto.java
│ │ │ │ │ └── response
│ │ │ │ │ ├── DeviceTokenListResponseDto.java
│ │ │ │ │ ├── DeviceTokenResponseDto.java
│ │ │ │ │ ├── NotificationCountResponseDto.java
│ │ │ │ │ ├── NotificationListResponseDto.java
│ │ │ │ │ └── NotificationReadResponseDto.java
│ │ │ │ ├── in
│ │ │ │ │ ├── DeviceTokenController.java
│ │ │ │ │ └── NotificationController.java
│ │ │ │ └── out
│ │ │ ├── domain
│ │ │ │ ├── model
│ │ │ │ │ ├── Noti.java
│ │ │ │ │ ├── NotiTarget.java
│ │ │ │ │ ├── UserDeviceInfo.java
│ │ │ │ │ └── constants
│ │ │ │ │ ├── ChannelNameEnum.java
│ │ │ │ │ ├── DeviceTypeEnum.java
│ │ │ │ │ ├── NotificationStatusEnum.java
│ │ │ │ │ ├── ReferenceTypeEnum.java
│ │ │ │ │ └── SourceTypeEnum.java
│ │ │ │ ├── port
│ │ │ │ │ ├── config
│ │ │ │ │ │ └── NotificationDispatchConfig.java
│ │ │ │ │ ├── in
│ │ │ │ │ │ ├── NotificationQueryUseCase.java
│ │ │ │ │ │ ├── NotificationSendUseCase.java
│ │ │ │ │ │ └── UserDeviceTokenUseCase.java
│ │ │ │ │ └── out
│ │ │ │ │ ├── NotificationDispatchPort.java
│ │ │ │ │ ├── NotificationRepositoryPort.java
│ │ │ │ │ ├── UserDeviceTokenRepositoryPort.java
│ │ │ │ │ └── strategy
│ │ │ │ │ └── DispatchStrategy.java
│ │ │ │ └── service
│ │ │ │ ├── NotificationServiceImpl.java
│ │ │ │ └── UserDeviceTokenService.java
│ │ │ └── service
│ │ │ ├── SseEmitterService.java
│ │ │ └── impl
│ │ │ └── SseEmitterServiceImpl.java
│ │ └── event
│ │ ├── AlarmEvent.java
│ │ ├── AlarmSentEvent.java
│ │ ├── BaseEvent.java
│ │ ├── BusinessEvent.java
│ │ ├── ScmEvent.java
│ │ ├── StatusEvent.java
│ │ ├── UserEvent.java
│ │ └── alarm
│ │ ├── AlarmType.java
│ │ ├── LinkType.java
│ │ ├── SourceType.java
│ │ └── TargetType.java
│ └── resources
│ ├── application.yml
│ └── key
│ └── everp-5085c-firebase-adminsdk-fbsvc-09af249929.json
└── test
└── java
└── org
└── ever
└── _4ever_be_alarm
└── ApplicationTests.java
app
├── build.gradle.kts
├── proguard-rules.pro
└── src
├── androidTest
│ └── java
│ └── com
│ └── autoever
│ └── everp
│ └── ExampleInstrumentedTest.kt
├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ └── autoever
│ │ └── everp
│ │ ├── EverpApplication.kt
│ │ ├── MainActivity.kt
│ │ ├── auth
│ │ │ ├── api
│ │ │ │ ├── AuthApi.kt
│ │ │ │ ├── HttpAuthApi.kt
│ │ │ │ ├── HttpUserApi.kt
│ │ │ │ └── UserApi.kt
│ │ │ ├── config
│ │ │ │ └── AuthConfig.kt
│ │ │ ├── endpoint
│ │ │ │ └── AuthEndpoint.kt
│ │ │ ├── flow
│ │ │ │ ├── AuthCct.kt
│ │ │ │ └── AuthFlowMemory.kt
│ │ │ ├── model
│ │ │ │ ├── TokenResponse.kt
│ │ │ │ └── UserInfo.kt
│ │ │ ├── pkce
│ │ │ │ ├── PKCEGenerator.kt
│ │ │ │ └── StateGenerator.kt
│ │ │ ├── repository
│ │ │ │ ├── AuthRepository.kt
│ │ │ │ ├── DefaultAuthRepository.kt
│ │ │ │ ├── DefaultUserRepository.kt
│ │ │ │ └── UserRepository.kt
│ │ │ └── session
│ │ │ ├── AuthState.kt
│ │ │ ├── SessionManager.kt
│ │ │ ├── TokenStore.kt
│ │ │ └── TokenStoreImpl.kt
│ │ ├── common
│ │ │ ├── annotation
│ │ │ │ ├── CoroutineScopeAnnotation.kt
│ │ │ │ └── RetrofitAnnotation.kt
│ │ │ ├── error
│ │ │ │ └── AppExceptions.kt
│ │ │ └── exception
│ │ │ └── GlobalExceptionHandler.kt
│ │ ├── data
│ │ │ ├── datasource
│ │ │ │ ├── local
│ │ │ │ │ ├── AlarmLocalDataSource.kt
│ │ │ │ │ ├── AuthLocalDataSource.kt
│ │ │ │ │ ├── DashboardLocalDataSource.kt
│ │ │ │ │ ├── DeviceLocalDataSource.kt
│ │ │ │ │ ├── FcmLocalDataSource.kt
│ │ │ │ │ ├── ImLocalDataSource.kt
│ │ │ │ │ ├── MmLocalDataSource.kt
│ │ │ │ │ ├── ProfileLocalDataSource.kt
│ │ │ │ │ ├── SdLocalDataSource.kt
│ │ │ │ │ ├── TokenLocalDataSource.kt
│ │ │ │ │ ├── UserLocalDataSource.kt
│ │ │ │ │ ├── datastore
│ │ │ │ │ │ ├── AuthDataStoreLocalDataSourceImpl.kt
│ │ │ │ │ │ └── TokenDataStoreLocalDataSourceImpl.kt
│ │ │ │ │ ├── impl
│ │ │ │ │ │ ├── AlarmLocalDataSourceImpl.kt
│ │ │ │ │ │ ├── DashboardLocalDataSourceImpl.kt
│ │ │ │ │ │ ├── FcmLocalDataSourceImpl.kt
│ │ │ │ │ │ ├── ImLocalDataSourceImpl.kt
│ │ │ │ │ │ ├── MmLocalDataSourceImpl.kt
│ │ │ │ │ │ ├── ProfileLocalDataSourceImpl.kt
│ │ │ │ │ │ ├── SdLocalDataSourceImpl.kt
│ │ │ │ │ │ └── UserLocalDataSourceImpl.kt
│ │ │ │ │ ├── pref
│ │ │ │ │ │ └── TokenPrefLocalDataSourceImpl.kt
│ │ │ │ │ └── room
│ │ │ │ └── remote
│ │ │ │ ├── AlarmRemoteDataSource.kt
│ │ │ │ ├── AuthRemoteDataSource.kt
│ │ │ │ ├── DashboardRemoteDataSource.kt
│ │ │ │ ├── FcmRemoteDataSource.kt
│ │ │ │ ├── ImRemoteDataSource.kt
│ │ │ │ ├── MmRemoteDataSource.kt
│ │ │ │ ├── ProfileRemoteDataSource.kt
│ │ │ │ ├── SdRemoteDataSource.kt
│ │ │ │ ├── UserRemoteDataSource.kt
│ │ │ │ ├── dto
│ │ │ │ │ └── common
│ │ │ │ │ ├── ApiResponse.kt
│ │ │ │ │ ├── PageResponse.kt
│ │ │ │ │ └── ToggleResponseDto.kt
│ │ │ │ ├── firebase
│ │ │ │ │ ├── FirebaseAnalyticsDataSource.kt
│ │ │ │ │ ├── FirebaseCrashlyticsDataSource.kt
│ │ │ │ │ └── FirebaseDataSource.kt
│ │ │ │ ├── http
│ │ │ │ │ ├── impl
│ │ │ │ │ │ ├── AlarmHttpRemoteDataSourceImpl.kt
│ │ │ │ │ │ ├── AuthHttpRemoteDataSourceImpl.kt
│ │ │ │ │ │ ├── DashboardHttpRemoteDataSourceImpl.kt
│ │ │ │ │ │ ├── FcmHttpRemoteDataSourceImpl.kt
│ │ │ │ │ │ ├── ImHttpRemoteDataSourceImpl.kt
│ │ │ │ │ │ ├── MmHttpRemoteDataSourceImpl.kt
│ │ │ │ │ │ ├── ProfileHttpRemoteDataSourceImpl.kt
│ │ │ │ │ │ ├── SdHttpRemoteDataSourceImpl.kt
│ │ │ │ │ │ └── UserHttpRemoteDataSourceImpl.kt
│ │ │ │ │ └── service
│ │ │ │ │ ├── AlarmApi.kt
│ │ │ │ │ ├── AlarmTokenApi.kt
│ │ │ │ │ ├── AuthApi.kt
│ │ │ │ │ ├── DashboardApi.kt
│ │ │ │ │ ├── FcmApi.kt
│ │ │ │ │ ├── HrmApi.kt
│ │ │ │ │ ├── ImApi.kt
│ │ │ │ │ ├── MmApi.kt
│ │ │ │ │ ├── ProfileApi.kt
│ │ │ │ │ ├── SdApi.kt
│ │ │ │ │ └── UserApi.kt
│ │ │ │ ├── interceptor
│ │ │ │ │ └── AuthInterceptor.kt
│ │ │ │ └── mapper
│ │ │ │ ├── DashboardMapper.kt
│ │ │ │ ├── ImMapper.kt
│ │ │ │ ├── InvoiceMapper.kt
│ │ │ │ ├── NotificationMapper.kt
│ │ │ │ ├── ProfileMapper.kt
│ │ │ │ ├── PurchaseOrderMapper.kt
│ │ │ │ ├── SdMapper.kt
│ │ │ │ ├── SupplierMapper.kt
│ │ │ │ └── UserMapper.kt
│ │ │ └── repository
│ │ │ ├── AlarmRepositoryImpl.kt
│ │ │ ├── AuthRepositoryImpl.kt
│ │ │ ├── DashboardRepositoryImpl.kt
│ │ │ ├── DeviceInfoRepositoryImpl.kt
│ │ │ ├── FcmRepositoryImpl.kt
│ │ │ ├── ImRepositoryImpl.kt
│ │ │ ├── MmRepositoryImpl.kt
│ │ │ ├── ProfileRepositoryImpl.kt
│ │ │ ├── PushNotificationRepositoryImpl.kt
│ │ │ ├── SdRepositoryImpl.kt
│ │ │ └── UserRepositoryImpl.kt
│ │ ├── di
│ │ │ ├── AppModule.kt
│ │ │ ├── AuthDataModule.kt
│ │ │ ├── DataSourceModule.kt
│ │ │ ├── FirebaseModule.kt
│ │ │ ├── NetworkModule.kt
│ │ │ └── RepositoryModule.kt
│ │ ├── domain
│ │ │ ├── exception
│ │ │ │ ├── EverpException.kt
│ │ │ │ ├── ExceptionHandler.kt
│ │ │ │ ├── ExceptionMapper.kt
│ │ │ │ └── README.md
│ │ │ ├── model
│ │ │ │ ├── auth
│ │ │ │ │ └── AccessToken.kt
│ │ │ │ ├── common
│ │ │ │ │ ├── PagingData.kt
│ │ │ │ │ └── PagingDataMapper.kt
│ │ │ │ ├── customer
│ │ │ │ │ ├── CustomerDetail.kt
│ │ │ │ │ └── CustomerStatusEnum.kt
│ │ │ │ ├── dashboard
│ │ │ │ │ ├── Dashboard.kt
│ │ │ │ │ └── DashboardTapEnum.kt
│ │ │ │ ├── device
│ │ │ │ │ └── DeviceInfo.kt
│ │ │ │ ├── inventory
│ │ │ │ │ └── InventoryItemToggle.kt
│ │ │ │ ├── invoice
│ │ │ │ │ ├── InvoiceDetail.kt
│ │ │ │ │ ├── InvoiceListItem.kt
│ │ │ │ │ ├── InvoiceListParams.kt
│ │ │ │ │ ├── InvoiceStatusEnum.kt
│ │ │ │ │ └── InvoiceTypeEnum.kt
│ │ │ │ ├── notification
│ │ │ │ │ ├── Notification.kt
│ │ │ │ │ ├── NotificationLinkEnum.kt
│ │ │ │ │ ├── NotificationListParams.kt
│ │ │ │ │ ├── NotificationSourceEnum.kt
│ │ │ │ │ └── NotificationStatusEnum.kt
│ │ │ │ ├── profile
│ │ │ │ │ └── Profile.kt
│ │ │ │ ├── purchase
│ │ │ │ │ ├── PurchaseOrderDetail.kt
│ │ │ │ │ ├── PurchaseOrderListItem.kt
│ │ │ │ │ ├── PurchaseOrderListParams.kt
│ │ │ │ │ ├── PurchaseOrderSearchTypeEnum.kt
│ │ │ │ │ └── PurchaseOrderStatusEnum.kt
│ │ │ │ ├── quotation
│ │ │ │ │ ├── QuotationCreateRequest.kt
│ │ │ │ │ ├── QuotationDetail.kt
│ │ │ │ │ ├── QuotationItem.kt
│ │ │ │ │ ├── QuotationListItem.kt
│ │ │ │ │ ├── QuotationListParams.kt
│ │ │ │ │ ├── QuotationMapper.kt
│ │ │ │ │ ├── QuotationSearchTypeEnum.kt
│ │ │ │ │ └── QuotationStatusEnum.kt
│ │ │ │ ├── sale
│ │ │ │ │ ├── SalesOrder.kt
│ │ │ │ │ ├── SalesOrderListParams.kt
│ │ │ │ │ ├── SalesOrderSearchTypeEnum.kt
│ │ │ │ │ └── SalesOrderStatusEnum.kt
│ │ │ │ ├── supplier
│ │ │ │ │ ├── SupplierCategoryEnum.kt
│ │ │ │ │ ├── SupplierDetail.kt
│ │ │ │ │ └── SupplierStatusEnum.kt
│ │ │ │ └── user
│ │ │ │ ├── UserInfo.kt
│ │ │ │ ├── UserRoleEnum.kt
│ │ │ │ └── UserTypeEnum.kt
│ │ │ └── repository
│ │ │ ├── AlarmRepository.kt
│ │ │ ├── AuthRepository.kt
│ │ │ ├── DashboardRepository.kt
│ │ │ ├── DeviceInfoRepository.kt
│ │ │ ├── FcmRepository.kt
│ │ │ ├── HrRepository.kt
│ │ │ ├── ImRepository.kt
│ │ │ ├── MmRepository.kt
│ │ │ ├── ProfileRepository.kt
│ │ │ ├── PushNotificationRepository.kt
│ │ │ ├── SdRepository.kt
│ │ │ └── UserRepository.kt
│ │ ├── provider
│ │ ├── receiver
│ │ ├── service
│ │ │ └── fcm
│ │ │ └── MyFirebaseMessagingService.kt
│ │ ├── ui
│ │ │ ├── MainScreen.kt
│ │ │ ├── MainViewModel.kt
│ │ │ ├── auth
│ │ │ │ └── AuthViewModel.kt
│ │ │ ├── common
│ │ │ │ ├── ErrorHandler.kt
│ │ │ │ ├── ErrorMessageHandler.kt
│ │ │ │ ├── RecentActivityCard.kt
│ │ │ │ └── components
│ │ │ │ ├── ListCard.kt
│ │ │ │ ├── QuickActionCard.kt
│ │ │ │ ├── SearchBar.kt
│ │ │ │ └── StatusBadge.kt
│ │ │ ├── customer
│ │ │ │ ├── CustomerApp.kt
│ │ │ │ ├── CustomerHomeScreen.kt
│ │ │ │ ├── CustomerHomeViewModel.kt
│ │ │ │ ├── CustomerNavigationItem.kt
│ │ │ │ ├── CustomerOrderScreen.kt
│ │ │ │ ├── CustomerOrderViewModel.kt
│ │ │ │ ├── CustomerProfileEditScreen.kt
│ │ │ │ ├── CustomerProfileEditViewModel.kt
│ │ │ │ ├── CustomerProfileScreen.kt
│ │ │ │ ├── CustomerProfileViewModel.kt
│ │ │ │ ├── CustomerQuotationScreen.kt
│ │ │ │ ├── CustomerQuotationViewModel.kt
│ │ │ │ ├── CustomerVoucherScreen.kt
│ │ │ │ ├── CustomerVoucherViewModel.kt
│ │ │ │ ├── InvoiceDetailScreen.kt
│ │ │ │ ├── InvoiceDetailViewModel.kt
│ │ │ │ ├── NotificationScreen.kt
│ │ │ │ ├── NotificationViewModel.kt
│ │ │ │ ├── QuotationCreateScreen.kt
│ │ │ │ ├── QuotationCreateViewModel.kt
│ │ │ │ ├── QuotationDetailScreen.kt
│ │ │ │ ├── QuotationDetailViewModel.kt
│ │ │ │ ├── SalesOrderDetailScreen.kt
│ │ │ │ └── SalesOrderDetailViewModel.kt
│ │ │ ├── error
│ │ │ │ └── ErrorActivity.kt
│ │ │ ├── home
│ │ │ │ ├── HomeScreen.kt
│ │ │ │ └── HomeViewModel.kt
│ │ │ ├── login
│ │ │ │ └── LoginScreen.kt
│ │ │ ├── main
│ │ │ │ └── MainScreen.kt
│ │ │ ├── navigation
│ │ │ │ ├── AppNavGraph.kt
│ │ │ │ ├── CustomBottomBar.kt
│ │ │ │ └── NavigationItem.kt
│ │ │ ├── profile
│ │ │ │ ├── ProfileScreen.kt
│ │ │ │ └── ProfileViewModel.kt
│ │ │ ├── redirect
│ │ │ │ └── RedirectReceiverActivity.kt
│ │ │ ├── supplier
│ │ │ │ ├── InvoiceDetailScreen.kt
│ │ │ │ ├── InvoiceDetailViewModel.kt
│ │ │ │ ├── NotificationScreen.kt
│ │ │ │ ├── NotificationViewModel.kt
│ │ │ │ ├── PurchaseOrderDetailScreen.kt
│ │ │ │ ├── PurchaseOrderDetailViewModel.kt
│ │ │ │ ├── SupplierApp.kt
│ │ │ │ ├── SupplierHomeScreen.kt
│ │ │ │ ├── SupplierHomeViewModel.kt
│ │ │ │ ├── SupplierNavigationItem.kt
│ │ │ │ ├── SupplierOrderScreen.kt
│ │ │ │ ├── SupplierOrderViewModel.kt
│ │ │ │ ├── SupplierProfileEditScreen.kt
│ │ │ │ ├── SupplierProfileEditViewModel.kt
│ │ │ │ ├── SupplierProfileScreen.kt
│ │ │ │ ├── SupplierProfileViewModel.kt
│ │ │ │ ├── SupplierVoucherScreen.kt
│ │ │ │ └── SupplierVoucherViewModel.kt
│ │ │ └── theme
│ │ │ ├── Color.kt
│ │ │ ├── Theme.kt
│ │ │ └── Type.kt
│ │ └── utils
│ │ ├── permission
│ │ │ └── PermissionStatus.kt
│ │ ├── serializer
│ │ │ ├── LocalDateAndTimeSerializer.kt
│ │ │ ├── NotificationLinkEnumSerializer.kt
│ │ │ └── NotificationSourceEnumSerializer.kt
│ │ └── state
│ │ └── UiResult.kt
│ └── res
│ ├── drawable
│ │ ├── ic_launcher_background.xml
│ │ └── ic_launcher_foreground.xml
│ ├── drawable-nodpi
│ │ └── everp_logo.png
│ ├── mipmap-anydpi
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ ├── mipmap-hdpi
│ │ ├── ic_launcher.webp
│ │ └── ic_launcher_round.webp
│ ├── mipmap-mdpi
│ │ ├── ic_launcher.webp
│ │ └── ic_launcher_round.webp
│ ├── mipmap-xhdpi
│ │ ├── ic_launcher.webp
│ │ └── ic_launcher_round.webp
│ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.webp
│ │ └── ic_launcher_round.webp
│ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.webp
│ │ └── ic_launcher_round.webp
│ ├── values
│ │ ├── colors.xml
│ │ ├── strings.xml
│ │ ├── styles.xml
│ │ └── themes.xml
│ └── xml
│ ├── backup_rules.xml
│ ├── data_extraction_rules.xml
│ └── network_security_config.xml
└── test
└── java
└── com
└── autoever
└── everp
└── ExampleUnitTest.kt
Erp4ever-iOS
├── Assets.xcassets
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ └── applogo.png
│ ├── Contents.json
│ └── Logo.imageset
│ ├── Contents.json
│ └── everp_logo.png
├── Components
│ ├── Common
│ │ ├── Card.swift
│ │ ├── CardTitle.swift
│ │ ├── EmptyStateCard.swift
│ │ ├── ErrorStateCard.swift
│ │ ├── InputField.swift
│ │ ├── KeyValueRow.swift
│ │ └── Section.swift
│ ├── Home
│ │ ├── ActivityRow.swift
│ │ ├── Header.swift
│ │ ├── StatusLabel.swift
│ │ ├── TypeLabel.swift
│ │ └── UserInfoBanner.swift
│ ├── Order
│ │ └── OrderCard.swift
│ ├── Profile
│ │ ├── CustomInput.swift
│ │ ├── InfoRow.swift
│ │ └── MenuRow.swift
│ ├── Purchase
│ │ └── PurchaseCard.swift
│ ├── Quote
│ │ ├── QuotationListItemCard.swift
│ │ └── QuoteCard.swift
│ ├── Search
│ │ └── SearchGlassBar.swift
│ └── WebView.swift
├── Config
│ └── APIEndpoints.swift
├── ContentView.swift
├── Docs
├── Erp4everiOSApp.swift
├── Info.plist
├── Models
│ ├── Auth
│ │ └── AuthConfig.swift
│ ├── Dashboard
│ │ ├── DashboardWorkflowModels.swift
│ │ └── DashboardWorkflowTab.swift
│ ├── HomeModel.swift
│ ├── Invoice
│ │ ├── PurchaseInvoiceModels.swift
│ │ ├── SalesInvoiceDetailModels.swift
│ │ └── SalesInvoiceListModels.swift
│ ├── Order
│ │ ├── OrderDetailModel.swift
│ │ └── OrderModel.swift
│ ├── PageInfo.swift
│ ├── PageResponse.swift
│ ├── Profile
│ │ ├── BusinessProfileModels.swift
│ │ └── EmployeeProfileModels.swift
│ ├── ProfileModel.swift
│ ├── PurchaseModel.swift
│ ├── PurchaseOrder
│ │ └── PurchaseOrderModels.swift
│ ├── Quote
│ │ ├── QuotationDetail.swift
│ │ ├── QuotationListItem.swift
│ │ ├── QuoteDetailModel.swift
│ │ ├── QuoteListModel.swift
│ │ └── QuoteListQuery.swift
│ └── Supplier
│ └── SupplierInvoiceModels.swift
├── Modifiers
│ └── GlassBackground.swift
├── Navigation
│ ├── MainAppView.swift
│ └── SearchCoordinator.swift
├── Services
│ ├── Auth
│ │ ├── AuthService.swift
│ │ ├── LogoutService.swift
│ │ └── TokenStore.swift
│ ├── Dashboard
│ │ └── DashboardService.swift
│ ├── Invoice
│ │ └── PurchaseInvoiceService.swift
│ ├── Profile
│ │ └── ProfileService.swift
│ ├── PurchaseOrder
│ │ └── PurchaseOrderService.swift
│ ├── Quote
│ │ └── QuoteService.swift
│ ├── Supplier
│ │ └── SupplierInvoiceService.swift
│ ├── User
│ │ └── UserService.swift
│ └── testServices.swift
├── Utils
│ ├── Anim.swift
│ ├── PKCEGenerator.swift
│ ├── StateGenerator.swift
│ └── StatusMapping.swift
├── ViewModels
│ ├── AuthViewModel.swift
│ ├── HomeViewModel.swift
│ ├── ProfileViewModel.swift
│ ├── PurchaseInvoiceDetailViewModel.swift
│ ├── PurchaseInvoiceListViewModel.swift
│ ├── PurchaseOrderDetailViewModel.swift
│ ├── PurchaseOrderListViewModel.swift
│ ├── QuoteDetailViewModel.swift
│ ├── QuoteListViewModel.swift
│ ├── SessionManager.swift
│ ├── SupplierInvoiceDetailViewModel.swift
│ └── SupplierInvoiceListViewModel.swift
└── Views
├── AuthView.swift
├── Common
│ └── DateRangeSheet.swift
├── Home
│ ├── QuickActionView.swift
│ └── RecentActivitesView.swift
├── HomeView.swift
├── Invoice
│ ├── PurchaseInvoiceDetailView.swift
│ └── PurchaseInvoiceListView.swift
├── LoginView.swift
├── Order
│ ├── OrderDetailView.swift
│ └── OrderListView.swift
├── ProfileView.swift
├── PurchaseOrder
│ ├── PurchaseOrderDetailView.swift
│ ├── PurchaseOrderListView.swift
│ └── components
├── PurchaseView.swift
├── Quote
│ ├── QuoteDetailView.swift
│ ├── QuoteListView.swift
│ └── components
│ ├── QuoteListSection.swift
│ └── QuoteTypePromptView.swift
├── SearchView.swift
└── Supplier
├── SupplierInvoiceDetailView.swift
└── SupplierInvoiceListView.swift
