90 lines
4.4 KiB
Markdown
90 lines
4.4 KiB
Markdown
# Kifi Project Handoff Document
|
|
|
|
This document provides an overview of the Kifi project, detailing the architecture, recent implementations, current state, and instructions for running the application.
|
|
|
|
## 1. Project Overview & Architecture
|
|
|
|
Kifi is an enterprise-grade project management and CRM application consisting of a mobile frontend and a reactive backend.
|
|
|
|
### **Backend (`kifi-api`)**
|
|
- **Framework:** Spring Boot 3 with WebFlux (Reactive Stack)
|
|
- **Language:** Java 21
|
|
- **Database:** PostgreSQL accessed via Spring Data R2DBC
|
|
- **Caching & Sessions:** Redis (Reactive)
|
|
- **Security:** Spring Security with JJWT for token-based authentication
|
|
- **Storage:** Minio for S3-compatible object storage
|
|
- **Architecture Pattern:** Standard N-Tier (Controller → Service → Repository → Entity/DTO)
|
|
|
|
### **Frontend (`kifi-app`)**
|
|
- **Framework:** Flutter
|
|
- **State Management:** Riverpod
|
|
- **Networking:** Dio for HTTP requests
|
|
- **Key Dependencies:** `file_picker`, `image_picker`, `path_provider`, `share_plus`, `fl_chart`
|
|
- **Architecture Pattern:** Feature-first modular structure (`auth`, `projects`, `transactions`, `business`, etc.) with separation of `data`, `domain`, `presentation`, and `providers`.
|
|
|
|
---
|
|
|
|
## 2. Recent Major Implementations
|
|
|
|
### **UI Standardization & Enterprise Polish**
|
|
- **Objective:** Strictly adhere to a uniform, enterprise-grade design system across all list screens (Projects, Invoices, Vendors, Task Board), using the `CustomersScreen` as the source of truth.
|
|
- **Changes made:**
|
|
- Standardized background colors to `Colors.grey[100]` across the app.
|
|
- Implemented uniform search fields: white container, `grey[100]` fill, rounded corners, no borders.
|
|
- Redesigned the `TaskCard` and task columns in the `ProjectBoardScreen` to look modern and functional.
|
|
|
|
### **Task Comments & File Attachments**
|
|
- **Initial State:** Task comments only supported base64 encoded images stored directly in the PostgreSQL `TEXT` column.
|
|
- **New Feature:** Implemented file attachments (PDFs, Docs, Images) for task comments with native downloading and sharing.
|
|
- **Backend Refactor:**
|
|
- Integrated `MinioServiceClient` into `ProjectService`.
|
|
- Modified `addComment` to intercept incoming base64 payloads, upload them to Minio in parallel using reactive streams (`Flux`), and save a JSON metadata string (`[{"fileName": "...", "contentType": "...", "filePath": "..."}]`) into the database.
|
|
- Added a generic file download endpoint: `GET /projects/tasks/attachments/download`.
|
|
- **Frontend Refactor:**
|
|
- Added `file_picker` dependency to support non-image documents.
|
|
- Rebuilt the attachment picking UI in `TaskDetailsSheet` to support both images and generic files.
|
|
- Implemented a secure download mechanism using `dio`, `path_provider`, and `share_plus` to save and open documents natively.
|
|
- Added an interactive image gallery (`AttachmentGalleryScreen`) for previewing image attachments (both legacy base64 and new Minio-backed URLs).
|
|
|
|
---
|
|
|
|
## 3. Current State & Known Behaviors
|
|
|
|
- **Backward Compatibility:** The backend and frontend correctly handle "legacy" task comments that were saved purely as Base64 strings, alongside the new Minio-backed JSON structure.
|
|
- **Application Configuration:**
|
|
- Max in-memory size for Spring WebFlux was increased to `10MB` in `application.yml` to allow for large base64-encoded file uploads before they are dispatched to Minio.
|
|
- **Outstanding Items:**
|
|
- Since background services were interrupted, you may need to ensure your Minio container and Redis instance are up and running before testing the new upload flow.
|
|
|
|
---
|
|
|
|
## 4. Setup & Running Instructions
|
|
|
|
### **Backend**
|
|
1. Navigate to the backend directory:
|
|
```bash
|
|
cd kifi-api
|
|
```
|
|
2. Ensure your local PostgreSQL, Redis, and Minio instances are running.
|
|
3. Clean and run the Spring Boot application:
|
|
```bash
|
|
./mvnw clean spring-boot:run
|
|
```
|
|
|
|
### **Frontend**
|
|
1. Navigate to the app directory:
|
|
```bash
|
|
cd kifi-app
|
|
```
|
|
2. Fetch new dependencies (especially the newly added `file_picker`):
|
|
```bash
|
|
flutter pub get
|
|
```
|
|
3. Run the app on your emulator or connected device:
|
|
```bash
|
|
flutter run
|
|
```
|
|
|
|
> [!WARNING]
|
|
> Because new native dependencies (`file_picker`, `share_plus`) were added during the last session, hot-reloading will not work for these changes. **You must stop the Flutter application completely and perform a full `flutter run`** to compile the native platform channels.
|