How charan379/flierly-erp works
Purpose and topology
FLIERLY is a PERN ERP repository split into a React/Vite administrative SPA and an Express/Node API backed by PostgreSQL through TypeORM. Implemented areas center on IAM, product master data, branches, UOM, and inventory; purchase/account entities exist but are less fully routed. Entry points are flierly-admin-web/src/main.tsx, flierly-admin-web/src/App.tsx, flierly-backend/src/server.ts, and flierly-backend/src/app.ts.
Frontend composition and routing
The SPA bootstraps Redux-backed application state and route selection, with top-level feature routers composed in flierly-admin-web/src/router/AppRouter.tsx. Auth routes are isolated in flierly-admin-web/src/modules/auth/router/AuthRouter.tsx; authenticated screens use the dashboard shell at flierly-admin-web/src/modules/core/layouts/Dashboard/Dashboard.tsx. Domain routers define page exposure: flierly-admin-web/src/modules/iam/router/IamRoutes.tsx, flierly-admin-web/src/modules/product/router/ProductRouter.tsx, and flierly-admin-web/src/modules/inventory/router/InventoryRouter.tsx.
Identity, authorization, and client state
Authentication has dedicated forms, services, Redux state, and re-authentication flow: flierly-admin-web/src/modules/auth/service/auth.service.ts, flierly-admin-web/src/modules/auth/redux/auth.slice.ts, flierly-admin-web/src/modules/auth/features/ReAuthenticate/ReAuthenticate.tsx. flierly-admin-web/src/modules/core/features/ProtectedRoute/ProtectedRoute.tsx is the UI authorization boundary, while persistent/global state is configured by flierly-admin-web/src/redux/store.ts and flierly-admin-web/src/redux/state-persist.ts. Theme, locale, and selected branch are separate stateful cross-cutting concerns.
Metadata-driven administration UI
A reusable CRUD layer drives most master-data pages: flierly-admin-web/src/modules/core/features/CrudModule/CrudModule.tsx, flierly-admin-web/src/modules/core/features/CrudTable/CrudTable.tsx, and flierly-admin-web/src/modules/core/features/GenericAssociationManager/GenericAssociationManager.tsx. Domain pages supply form fields, table columns, and query definitions rather than duplicating mechanics; for example flierly-admin-web/src/modules/product/pages/ProductsPage/ProductsPage.tsx and flierly-admin-web/src/modules/iam/pages/UsersPage/UsersPage.tsx. Query builders and remote selects form the client/API query boundary.
API pipeline and generic persistence
Express application/router assembly is in flierly-backend/src/app.ts and flierly-backend/src/router/app.routes.ts. Requests pass logging, validation, authorization, controller error boundary, and centralized error handling, notably flierly-backend/src/middlewares/authorization.middleware.ts and flierly-backend/src/middlewares/error-handler.middleware.ts. Generic CRUD controllers/services implement paged reads, search, soft delete/restore, activation, and association updates via flierly-backend/src/modules/core/controllers/crud-controller/index.ts and flierly-backend/src/modules/core/services/crud-service/index.ts.
Domain services and security
IAM models roles, privileges, users, and passwords in flierly-backend/src/modules/iam/entities/User.entity.ts, with credential workflows in flierly-backend/src/modules/iam/services/user-service/UserServiceImpl.ts. JWT and bcrypt are abstracted behind IoC-configured services: flierly-backend/src/lib/jwt/jwt-service/JwtServiceImpl.ts and flierly-backend/src/lib/hashing/bcrypt-service/BcryptServiceImpl.ts. Product and stock operations have dedicated controllers/services beyond generic CRUD: flierly-backend/src/modules/product/service/product-service/ProductServiceImpl.ts and flierly-backend/src/modules/product/service/product-stock-service/ProductStockServiceImpl.ts.
Data and external infrastructure
PostgreSQL access is centralized through TypeORM datasource and a database-service abstraction: flierly-backend/src/lib/database/typeorm/app-datasource.ts and flierly-backend/src/lib/database/database-service/DatabaseServiceImpl.ts. Entities cover ERP relationships and read-model views; flierly-backend/migrations/1740305729750-createviews.ts creates views used for product availability/latest prices. File upload is mediated by flierly-backend/src/modules/storage/controllers/upload-controller/upload-file.controller.ts and pluggable storage adapters, including AWS S3, Azure Blob, GCP, Cloudflare, Backblaze, DigitalOcean, Tencent, or local storage.
Main entry points: app.routes.ts API route assembly · app.ts Express application · App.tsx App composition · AppRouter.tsx Application router
Components 21
Admin SPA
React/Vite administrative client.
- SPA bootstrap
flierly-admin-web/src/main.tsx - App composition
flierly-admin-web/src/App.tsx - Redux persisted state · Global state persists auth and cross-cutting preferences.
flierly-admin-web/src/redux/store.ts - Application router
flierly-admin-web/src/router/AppRouter.tsx - Auth flow · Includes login and re-authentication screens.
flierly-admin-web/src/modules/auth/router/AuthRouter.tsx - Protected route
flierly-admin-web/src/modules/core/features/ProtectedRoute/ProtectedRoute.tsx - Dashboard shell
flierly-admin-web/src/modules/core/layouts/Dashboard/Dashboard.tsx - Domain routes · IAM, product, and inventory page exposure.
flierly-admin-web/src/modules/product/router/ProductRouter.tsx - Metadata CRUD UI · Renders forms, tables, queries, and associations from domain metadata.
flierly-admin-web/src/modules/core/features/CrudModule/CrudModule.tsx - Auth client state
flierly-admin-web/src/modules/auth/service/auth.service.ts
API Service
Express ERP API and domain logic.
- API server
flierly-backend/src/server.ts - Express application · Applies logging, validation, authorization, and error handling.
flierly-backend/src/app.ts - API route assembly
flierly-backend/src/router/app.routes.ts - Authorization middleware
flierly-backend/src/middlewares/authorization.middleware.ts - Generic CRUD layer · Provides paging, search, lifecycle, and association operations.
flierly-backend/src/modules/core/controllers/crud-controller/index.ts - IAM credential service · Manages users, roles, privileges, and password workflows.
flierly-backend/src/modules/iam/services/user-service/UserServiceImpl.ts - JWT and bcrypt
flierly-backend/src/lib/jwt/jwt-service/JwtServiceImpl.ts - Product and stock services
flierly-backend/src/modules/product/service/product-service/ProductServiceImpl.ts
Data & Storage
Persistence and upload infrastructure.
- TypeORM database service
flierly-backend/src/lib/database/database-service/DatabaseServiceImpl.ts - PostgreSQL and ERP views · TypeORM entities and migrations provide transactional data and availability/price views.
flierly-backend/migrations/1740305729750-createviews.ts - Upload controller and adapters · Selects local or cloud object-storage adapters.
flierly-backend/src/modules/storage/controllers/upload-controller/upload-file.controller.ts
Connections 23
- SPA bootstrap → App composition: mounts
- App composition → Redux persisted state: provides state
- App composition → Application router: renders
- Application router → Auth flow: public routes
- Application router → Protected route: authenticated routes
- Protected route → Dashboard shell: authorizes shell
- Dashboard shell → Domain routes: hosts
- Domain routes → Metadata CRUD UI: renders master-data pages
- Auth flow → Auth client state: uses
- Auth client state → Redux persisted state: updates auth state
- Auth client state → Express application: auth API calls
- Metadata CRUD UI → Express application: CRUD and query calls
- API server → Express application: starts
- Express application → API route assembly: mounts
- API route assembly → Authorization middleware: protects routes
- Authorization middleware → Generic CRUD layer: permits requests
- Authorization middleware → IAM credential service: validates identity
- IAM credential service → JWT and bcrypt: issues JWTs and hashes passwords
- Generic CRUD layer → TypeORM database service: persists generic entities
- Product and stock services → TypeORM database service: persists products and stock
- API route assembly → Product and stock services: product endpoints
- TypeORM database service → PostgreSQL and ERP views: TypeORM access
- API route assembly → Upload controller and adapters: upload endpoints