mirror of
https://github.com/pawelorzech/Fuzzel.git
synced 2026-01-29 19:54:30 +00:00
Introduces plan.md outlining current implementation status, missing features, API requirements, UI parity tasks, technical details, key files for modification, and testing/verification steps for the Fuzzel Android client project.
9.5 KiB
9.5 KiB
Plan Projektu Fuzzel - Klient Android dla Fizzy
1. Aktualny Stan Projektu
Architektura
- Platforma: Android Native (Kotlin + Jetpack Compose)
- Wzorzec: Clean Architecture (Domain, Data, Presentation)
- DI: Hilt
- Networking: Retrofit 2.9.0 + Moshi + OkHttp 4.12.0
- UI: Material Design 3, Jetpack Compose
- Min SDK: 26, Target SDK: 34
Zaimplementowane Funkcjonalności
| Obszar | Status | Uwagi |
|---|---|---|
| Autentykacja Magic Link | ✅ Gotowe | Pełny flow email → kod → token |
| Personal Access Token | ✅ Gotowe | Bezpośrednie logowanie tokenem |
| Multi-account | ✅ Gotowe | Encrypted storage, przełączanie kont |
| Lista boardów | ✅ Gotowe | CRUD, wyszukiwanie |
| Widok Kanban | ✅ Gotowe | Kolumny, karty, drag&drop |
| Swimlanes (Triage/Not Now/Done) | ✅ Gotowe | Wirtualne kolumny |
| Karty CRUD | ✅ Gotowe | Tworzenie, edycja, usuwanie |
| Akcje na kartach | ✅ Gotowe | Close/reopen, priority, watch, triage, defer |
| Kolumny CRUD | ✅ Gotowe | Dodawanie, edycja, usuwanie |
| Steps | ✅ Gotowe | CRUD + toggle completion |
| Comments | ✅ Gotowe | CRUD |
| Reactions | ⚠️ Częściowe | Add działa, remove ma bug (emoji vs reactionId) |
| Tags | ⚠️ Częściowe | Wyświetlanie OK, add/remove wymaga poprawy |
| Assignees | ⚠️ Częściowe | Add działa, remove niekompletne |
| Notifications | ✅ Gotowe | Lista, mark read/unread, bulk |
| Settings | ✅ Gotowe | Theme mode |
2. Brakujące Funkcjonalności vs API
2.1 Nieimplementowane Endpointy API
| Endpoint | Opis | Priorytet |
|---|---|---|
GET /cards?tag_ids[]=... |
Filtrowanie kart po tagach | Wysoki |
GET /cards?assignee_ids[]=... |
Filtrowanie kart po assignees | Wysoki |
GET /cards?terms[]=... |
Wyszukiwanie kart tekstowe | Wysoki |
GET /cards?creation=... |
Filtrowanie po dacie utworzenia | Średni |
GET /cards?closure=... |
Filtrowanie po dacie zamknięcia | Średni |
DELETE /cards/{n}/image |
Usuwanie obrazka nagłówkowego karty | Niski |
GET /:account/users |
Lista użytkowników konta | Wysoki |
GET /:account/users/{id} |
Szczegóły użytkownika | Średni |
PUT /:account/users/{id} |
Aktualizacja profilu użytkownika | Niski |
Paginacja (Link header) |
Obsługa dużych zbiorów danych | Wysoki |
| ETag caching | Optymalizacja requestów (304 Not Modified) | Średni |
| File uploads (multipart) | Załączniki, avatary, obrazki | Wysoki |
| Rich text (HTML + ActionText) | Formatowany opis karty/komentarza | Średni |
2.2 Bugi i Niekompletne Implementacje
| Problem | Lokalizacja | Opis |
|---|---|---|
| Reakcje - usuwanie | CardDetailViewModel |
Używa emoji zamiast reactionId |
| Tagi - dodawanie | CardDetailViewModel |
Używa tagId zamiast prawidłowego lookup |
| Assignees - usuwanie | CardRepository |
Endpoint niejasny w dokumentacji, stub |
| Reakcje - GET | FizzyApiService |
Brak endpointu do pobierania listy reakcji |
3. Wymagania dla Parytetu z Wersją Webową (1:1)
3.1 UI - Widok Kanban
| Element | Status | Do zrobienia |
|---|---|---|
| Kolumny z kartami | ✅ | - |
| Drag & drop kart | ✅ | - |
| Triage swimlane | ✅ | - |
| Not Now swimlane | ✅ | - |
| Done swimlane | ✅ | - |
| Kolory kolumn (user-defined) | ⚠️ | Dodać obsługę color z API |
| Limity kart w kolumnie (WIP) | ❌ | API może to wspierać |
| Reordering kolumn | ❌ | Brak w API (sprawdzić) |
| Bulk card actions | ❌ | Zaznaczanie wielu kart |
3.2 UI - Szczegóły Karty
| Element | Status | Do zrobienia |
|---|---|---|
| Tytuł + opis | ✅ | - |
| Status badge | ✅ | - |
| Priority (golden) | ✅ | - |
| Watch | ✅ | - |
| Tags | ⚠️ | Poprawić add/remove |
| Assignees + avatary | ⚠️ | Poprawić remove, dodać prawdziwe avatary |
| Steps z progress | ✅ | - |
| Comments | ✅ | - |
| Reactions na comments | ⚠️ | Naprawić usuwanie |
| Activity log | ❌ | Placeholder w UI |
| Obrazek nagłówkowy | ❌ | Brak obsługi |
| Załączniki | ❌ | Brak obsługi |
| Rich text rendering | ❌ | Tylko plain text |
| Due date | ❌ | Sprawdzić czy API wspiera |
| Triage date display | ⚠️ | API bierze column_id, nie date |
3.3 UI - Board List
| Element | Status | Do zrobienia |
|---|---|---|
| Lista boardów | ✅ | - |
| Wyszukiwanie | ✅ | - |
| Tworzenie/edycja/usuwanie | ✅ | - |
| Board stats | ⚠️ | Pokazuje tylko podstawowe info |
| Board members | ❌ | Nie wyświetla użytkowników |
| Sortowanie | ❌ | Brak opcji sortowania |
3.4 UI - Notifications
| Element | Status | Do zrobienia |
|---|---|---|
| Lista powiadomień | ✅ | - |
| Mark read/unread | ✅ | - |
| Mark all read | ✅ | - |
| Notification grouping | ❌ | Brak grupowania |
| Deep link do karty | ⚠️ | Podstawowa nawigacja |
4. Plan Implementacji - Priorytety
Faza 1: Naprawy Krytyczne (Wysoki Priorytet)
-
Naprawa reakcji
- Dodać
GET /comments/{id}/reactionsdo pobierania listy z ID - Użyć
reaction.idzamiastemojiprzy usuwaniu - Pliki:
FizzyApiService.kt,CommentDto.kt,CardDetailViewModel.kt
- Dodać
-
Naprawa tagów
- Poprawić flow add/remove tag
- Użyć prawidłowego
tagging_idprzy usuwaniu - Pliki:
CardRepository.kt,CardDetailViewModel.kt
-
Naprawa assignees
- Zbadać API dla remove assignment (toggle?)
- Implementować prawidłowe usuwanie
- Pliki:
FizzyApiService.kt,CardRepository.kt
Faza 2: Filtrowanie i Wyszukiwanie
-
Zaawansowane filtrowanie kart
- Dodać parametry query:
tag_ids[],assignee_ids[],terms[] - UI: FilterChips w Kanban toolbar
- Pliki:
FizzyApiService.kt,CardRepository.kt,KanbanViewModel.kt
- Dodać parametry query:
-
Wyszukiwanie globalne
- Wyszukiwanie po wszystkich boardach
- UI: SearchBar w głównym ekranie
- Nowy feature:
feature/search/
Faza 3: Paginacja i Caching
-
Paginacja
- Parser dla
Linkheader zrel="next" - Infinite scroll w listach
- Pliki:
NetworkModule.kt, wszystkie repozytoria
- Parser dla
-
ETag Caching
- OkHttp interceptor dla
If-None-Match - Cache storage
- Pliki:
NetworkModule.kt,AuthInterceptor.kt
- OkHttp interceptor dla
Faza 4: Rich Content
-
File Uploads
- Multipart request handling
- Avatary użytkowników (zamiast inicjałów)
- Obrazki nagłówkowe kart
- Pliki:
FizzyApiService.kt, nowyFileUploadRepository.kt
-
Rich Text
- HTML rendering w opisach i komentarzach
- Compose HTML renderer lub WebView
- Pliki:
CardDetailScreen.kt, nowyRichTextContent.kt
Faza 5: Parytet UI
-
Activity Log
- Nowy endpoint (jeśli dostępny w API)
- Timeline UI w CardDetailScreen
- Pliki:
CardDetailScreen.kt,CardDetailViewModel.kt
-
Board Members
- Wyświetlanie użytkowników boarda
- Zarządzanie dostępem
- Pliki:
BoardDetailScreen.kt(nowy),UserRepository.kt
-
Offline Support
- Room database dla cache
- Sync queue dla operacji offline
- Nowy moduł:
data/local/database/
5. Szczegóły Techniczne API
Struktura URL
{base_url}/{account_slug}/{resource}.json
Autentykacja
- Header:
Authorization: Bearer {token} - Session token lub Personal Access Token
Parametry Listowania Kart
GET /cards.json?
board_ids[]=uuid1&board_ids[]=uuid2 # filtr boardów
tag_ids[]=uuid1&tag_ids[]=uuid2 # filtr tagów
assignee_ids[]=uuid1 # filtr assignees
indexed_by=all|closed|not_now # status kart
creation=today|this_week|last_week # data utworzenia
closure=today|this_week|last_week # data zamknięcia
terms[]=word1&terms[]=word2 # wyszukiwanie tekstowe
Paginacja
- Response header:
Link: <url>; rel="next" - Parsować URL i fetchować następną stronę
Caching
- Response header:
ETag: "abc123" - Request header:
If-None-Match: "abc123" - Response 304 = dane niezmienione
Wrapping Request/Response
// Create request
{ "card": { "title": "...", "description": "..." } }
// Response
{ "card": { "id": "...", "number": 123, ... } }
6. Pliki Kluczowe do Modyfikacji
| Plik | Zmiany |
|---|---|
FizzyApiService.kt |
Nowe endpointy, parametry query |
CardDto.kt |
Pola dla attachments, obrazki |
CardRepository.kt |
Filtrowanie, paginacja |
KanbanViewModel.kt |
Filtry UI, bulk actions |
CardDetailViewModel.kt |
Naprawy reakcji/tagów |
NetworkModule.kt |
ETag interceptor, cache |
BoardListScreen.kt |
Sortowanie, search |
7. Weryfikacja Zmian
Testy Manualne
- Zaloguj się przez Magic Link
- Utwórz board, dodaj kolumny i karty
- Przetestuj drag & drop między kolumnami
- Otwórz szczegóły karty - dodaj/usuń tagi, assignees
- Dodaj komentarz, dodaj/usuń reakcję
- Zamknij i otwórz ponownie kartę
- Sprawdź powiadomienia
Testy API
- Porównaj response API z DTO mapping
- Zweryfikuj error handling (401, 403, 404, 422)
- Sprawdź paginację na dużych zbiorach
Porównanie z Web
- Otwórz tę samą tablicę w web i w aplikacji
- Porównaj wyświetlanie kart 1:1
- Sprawdź wszystkie akcje dostępne w web
8. Podsumowanie Priorytetów
| Priorytet | Zadanie | Effort |
|---|---|---|
| 🔴 Krytyczny | Naprawa reakcji, tagów, assignees | Mały |
| 🟠 Wysoki | Filtrowanie kart, paginacja | Średni |
| 🟡 Średni | ETag caching, rich text | Średni |
| 🟢 Niski | File uploads, activity log, offline | Duży |
Plan utworzony: 2026-01-19 Wersja: 1.0