This project represents the backend layer of a client–server system, designed to support a mobile Android application via REST APIs.
The backend is responsible for:
- request handling and validation
- business logic orchestration
- data persistence and reporting
- exposing a stable API contract for a mobile client
The project demonstrates a layered backend architecture commonly used in real-world business applications and internal systems.
The system provides functionality for:
- Product management and inventory tracking
- Inventory audits (stocktaking)
- Sales processing with discount support
- Sales reporting and analytics
- Product photo management
- Receipt generation and printing via Zebra printers (printing handled on the Android side)
- Sales tracking by sellers / agents
- User authentication and access control based on login/password
- Linking all sales and operations to specific users (agents)
The system supports flexible promotion and loyalty mechanisms, including:
- Discount cards and loyalty programs
- Permanent (fixed) discounts
- Progressive discounts based on purchase history
- Free items or free purchases after N purchases
- Configurable promotion rules with different conditions and thresholds
- Automatic promotion validation and application during sales processing
- Backend-centric architecture with all business rules enforced server-side
- Clear separation of concerns between backend services and Android client
- Centralized authentication and authorization
- Promotion and discount rules validated and applied on the backend
- Stateless API design for mobile clients
- Designed to support multiple sellers, devices, and concurrent sales operations
- Backend: C# / .NET
- Database: SQL-based relational database
- Mobile Client: Android (Kotlin)
- Printing: Zebra printers (handled on the Android client side)
- Authentication: Login/password based authentication
The solution is organized into logical layers, including:
- API layer for communication with mobile clients
- Business logic layer for sales, inventory, and promotions
- Data access layer
- Authentication and authorization components
Additional implementation details, data models, and workflows are documented directly in the source code.
The Android client application is written in Kotlin and is intended for use on Android devices.
It interacts with the backend via API and handles user-facing operations, including receipt formatting and printing using Zebra hardware.
This repository focuses on the backend implementation.
Some technical and architectural decisions are intentionally documented at a high level to keep the README concise and suitable for a public audience.