ðïļ System Architecture Design (āļāļēāļĢāļāļāļāđāļāļāļŠāļāļēāļāļąāļāļĒāļāļĢāļĢāļĄāļĢāļ°āļāļ)
ðđð āļ āļēāļĐāļēāđāļāļĒ (For User)
ð 1. āļŦāļĨāļąāļāļāļēāļĢāļŠāļāļēāļāļąāļāļĒāļāļĢāļĢāļĄāļŠāļ°āļāļēāļ (Clean Architecture Principles)
SplitDee āđāļāđāļŦāļĨāļąāļāļāļēāļĢ Clean Architecture āļāļąāđāļāđāļāļāļąāđāļāļĢāļ°āļāļāļŦāļĨāļąāļāļāđāļēāļ (FastAPI) āđāļĨāļ°āļĢāļ°āļāļāļŠāđāļ§āļāļŦāļāđāļē (Flutter) āđāļāļ·āđāļāđāļŦāđāđāļāđāđāļāļ§āđāļēāļāļĢāļĢāļāļ°āļāļēāļāļāļļāļĢāļāļīāļāļŦāļĨāļąāļ (Business Logic) āļāļ°āđāļĄāđāļāļķāđāļāļāļąāļāđāļĨāļāļĢāļēāļĢāļĩāļ āļēāļĒāļāļāļ āļāļēāļāļāđāļāļĄāļđāļĨ āļŦāļĢāļ·āļāđāļāļĢāļĄāđāļ§āļīāļĢāđāļāļāļāļāļŠāđāļ§āļāđāļŠāļāļāļāļĨ āļāļģāđāļŦāđāļāļēāļĢāļāļąāļāđāļāļĢāļāļĢāļ°āļāļ āļāļēāļĢāđāļāļĨāļĩāđāļĒāļāļāļēāļāļāđāļāļĄāļđāļĨ āđāļĨāļ°āļāļēāļĢāđāļāļĩāļĒāļāļāļļāļāļāļāļŠāļāļ (Unit Test) āļāļģāđāļāđāļāđāļēāļĒāđāļĨāļ°āđāļŠāļāļĩāļĒāļĢ
+-----------------------------------------------------------+
| Presentation / UI (FastAPI Routers / Flutter Widgets) |
| â |
| Use Cases / Application Rules (Business Logic Flows) |
| â |
| Domain / Core Business Entities (Entities & Interfaces) |
+-----------------------------------------------------------+
*āļāļīāļĻāļāļēāļāļāļēāļĢāđāļāļ·āđāļāļĄāļāđāļ (Dependency Arrow) āļāđāļāļāļāļĩāđāđāļāđāļēāļŠāļđāđāļĻāļđāļāļĒāđāļāļĨāļēāļ (Domain) āđāļŠāļĄāļ*
ð 2. āļŠāļāļēāļāļąāļāļĒāļāļĢāļĢāļĄāļŦāļĨāļąāļāļāđāļēāļ (Backend - FastAPI)
āļĢāļ°āļāļāļŦāļĨāļąāļāļāđāļēāļāđāļāđāļāļĢāļŦāļąāļŠāļāļāļāđāļāđāļ 4 āļāļąāđāļāļŦāļĨāļąāļ:
- Domain Layer (āļāļąāđāļāđāļāļāļāļĨāļēāļ): āļāļĢāļ°āļāļāļāļāđāļ§āļĒ Entities āļŦāļĨāļąāļ (āđāļāđāļ āļāļđāđāđāļāđ, āļāļīāļĨ, āļŠāļąāļāļ§āđāđāļĨāļĩāđāļĒāļ) āđāļĨāļ° Interfaces (āļĢāļ°āļāļļāļāļēāļĢāđāļāđāļēāļāļķāļāļāđāļāļĄāļđāļĨāđāļāđāļĒāļąāļāđāļĄāđāļĢāļ°āļāļļāļāļēāļĢāļāļģāļāļēāļāļāļĢāļīāļ) āļŦāđāļēāļĄāļāļģāđāļāđāļē (import) āđāļāđāļāđāļāļāļāļāļāļ āļēāļĒāļāļāļāđāļāļāļąāđāļāļāļĩāđ
- Use Cases Layer (āļāļąāđāļāļāļĢāļĢāļāļ°āļāļēāļāļāļļāļĢāļāļīāļ): āļāļ§āļāļāļļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāđāļāļĄāļđāļĨ āđāļāđāļ āļāļąāđāļāļāļāļāļāļēāļĢāđāļāđāļāļāļīāļĨāđāļāļīāļ, āļāļąāđāļāļāļāļāļāļēāļĢāļŠāļąāđāļāļāđāļēāļĒ, āļāļēāļĢāļāļģāļāļ§āļāļāļēāļĢāđāļāļīāļāđāļāļāļāļāļŠāļąāļāļ§āđāđāļĨāļĩāđāļĒāļ
- Infrastructure Layer (āļāļąāđāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļ): āļāļąāļāļāļēāļĢāļāļēāļĢāđāļāđāļēāļāļķāļāļāđāļāļĄāļđāļĨāļāļĢāļīāļ (PostgreSQL/SQLAlchemy Repository), āļāļēāļĢāđāļāđāļēāļĢāļŦāļąāļŠāļāđāļēāļ (JWT), āļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨ AI āļāļĢāļ§āļāļŠāļāļāļ āļēāļāļŠāļĨāļīāļ āđāļĨāļ°āļĢāļ°āļāļāļŠāđāļāđāļĄāļĨ/āđāļāđāļāđāļāļ·āļāļ
- Presentation Layer (āļāļąāđāļāļāļīāļāļāđāļāļāļđāđāđāļāđ): āļĢāļąāļāļāļģāļāļ HTTP āļāđāļēāļ FastAPI API Routers, āđāļāļĨāļāļāļĨāļēāļŠāļāđāļ§āļĒ Pydantic (Schemas) āđāļĨāļ°āļŠāđāļāļāļ·āļāļāļĨāļĨāļąāļāļāđāđāļāđāļ JSON
ðĶ 3. āļŠāļāļēāļāļąāļāļĒāļāļĢāļĢāļĄāļŦāļāđāļēāļāđāļēāļ (Frontend - Flutter)
āļĢāļ°āļāļāļŦāļāđāļēāļāđāļēāļāđāļāđāļāđāļāļĢāļāļŠāļĢāđāļēāļāđāļāđāļ 3 āļāļąāđāļ:
- Domain Layer: āļāļīāļĒāļēāļĄ Entity āļāļāļāļāđāļāļĄāļđāļĨāđāļāļ āđāļĨāļ° Usecases āđāļāļŦāļāđāļēāļāļ āļĢāļ§āļĄāļāļąāđāļ abstract repository
- Data Layer: āļāļąāļāļāļēāļĢāļāļēāļĢāļĢāđāļāļāļāļ API āļāđāļēāļ HTTP Client, āđāļāļĢāļāļŠāļĢāđāļēāļāļāđāļāļĄāļđāļĨ JSON (Models) āđāļĨāļ°āļāļēāļĢāļāļąāļāļāļķāļāļāđāļāļĄāļđāļĨāđāļāđāļāļĢāļ·āđāļāļ (Secure Storage)
- Presentation Layer: āļŠāđāļ§āļāļ§āļēāļāļŦāļāđāļēāļāļ (Pages/Widgets) āđāļĨāļ°āļāļēāļĢāļāļąāļāļāļēāļĢāļŠāļāļēāļāļ°āļŦāļāđāļēāļāļ (State Management) āđāļāļĒāđāļĨāļ·āļāļāđāļāđ Riverpod āđāļāļ·āđāļāļāļąāļāļāļēāļĢāļŠāļ āļēāļ§āļ°āļŦāļāđāļēāļāļāđāļĨāļ°āļāļēāļĢāđāļāđāļāđāļāļ·āļāļ
ð 4. āđāļāļāļāļąāļāļāļēāļĢāđāļŦāļĨāļāļāļāļāđāļāļĄāļđāļĨ (Data Flow Diagram)
āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāđāļŦāļĨāļāļāļāļāđāļāļĄāļđāļĨāđāļĄāļ·āđāļāļāļđāđāđāļāđāļāļģāļĢāļēāļĒāļāļēāļĢāļāļąāļāļāļķāļāļāļīāļĨāļāđāļēāđāļāđāļāđāļēāļĒ:
sequenceDiagram participant User as āļāļđāđāđāļāđ (Flutter UI) participant Controller as State Controller (Riverpod) participant Router as FastAPI Router participant UseCase as CreateBill UseCase participant DB as PostgreSQL DB participant AI as AI Service (OCR/Slip) User->>Controller: āļāļĢāļāļāļĢāļēāļĒāļĨāļ°āđāļāļĩāļĒāļāđāļĨāļ°āļĒāļ·āļāļĒāļąāļāļŠāļĢāđāļēāļāļāļīāļĨ Controller->>Router: HTTP POST /api/v1/groups/{id}/bills Router->>UseCase: āđāļĢāļĩāļĒāļāđāļāđāļāļąāļāļāđāļāļąāļāļāļļāļĢāļāļīāļ UseCase->>DB: āļāļąāļāļāļķāļāļāđāļāļĄāļđāļĨāļāļīāļĨāļĨāļāļāļēāļāļāđāļāļĄāļđāļĨ UseCase->>AI: (āļāđāļēāļĄāļĩāļāļēāļĢāđāļāļāđāļāđāļŠāļĢāđāļ) āļāļĢāļ°āļĄāļ§āļĨāļāļĨāļĢāļđāļāļ āļēāļāļāļīāļĨ AI-->>UseCase: āļŠāđāļāļāļĨāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāđāļāļāļ§āļēāļĄāļāļĨāļąāļāļĄāļē UseCase-->>Router: āļŠāđāļāļāļ·āļāļāđāļāļĄāļđāļĨāļāļīāļĨāļāļĩāđāļāļģāļāļ§āļāļŠāļąāļāļŠāđāļ§āļāđāļĨāđāļ§ Router-->>Controller: āļŠāđāļāļāđāļāļĄāļđāļĨ JSON āļāļĨāļĨāļąāļāļāđ Controller-->>User: āđāļŠāļāļāļāļĨāļāļīāļĨāļāļĩāđāļŠāļĢāđāļēāļāļŠāļģāđāļĢāđāļāļāļāđāļāļāļĄāļ·āļāļāļ·āļ
ðŽð§ English (For AI Agents)
ð 1. Clean Architecture Design
SplitDee applies Clean Architecture pattern for both backend (FastAPI) and frontend (Flutter) to achieve a decoupled, testable, and highly maintainable codebase.
- Dependency Rule: Source code dependencies must point inwards. Outer layers (UI, databases, frameworks) can depend on inner layers (Use Cases, Domain), but inner layers must never depend on outer layers.
ð 2. Backend Layer Breakdown (FastAPI)
app/domain: Contains core business model models (Entities) and repository interfaces. Clean from framework imports.app/use_cases: Application business rules. Coordinates the flow of data to and from the domain entities.app/infrastructure: Framework-specific implementations. Includes PostgreSQL database drivers, SQLAlchemy ORM mappings, external AI integration clients (OCR, slip scanner), JWT authorization providers, and Firebase messaging integration.app/presentation: FastAPI endpoints, routers, middleware, and request/response validation schemas (Pydantic models).
ðĶ 3. Frontend Layer Breakdown (Flutter)
lib/domain: Entities representing UI-agnostic models, abstract repositories, and business use cases.lib/data: API clients, data transfer models (DPOs with JSON serialization), local secure storage, and repository implementations.lib/presentation: Widgets, screens, layouts, and Riverpod State Management controllers.
ðĪ 4. External Integration Points
- AI Verification Service: Processes slip transaction IDs and amounts. Interfaces with bank validation APIs using an adapter pattern.
- Firebase Cloud Messaging: Delivers real-time notifications for system events (such as debt updates or Mochi pet actions).
- PromptPay QR Code Engine: Generates custom EMV Co-compliant QR payloads dynamically for swift in-app scanning.