Fuzzel/plan.md
Paweł Orzech 37c2061457
Add project plan document for Fuzzel Android client
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.
2026-01-23 02:32:15 +01:00

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)

  1. Naprawa reakcji

    • Dodać GET /comments/{id}/reactions do pobierania listy z ID
    • Użyć reaction.id zamiast emoji przy usuwaniu
    • Pliki: FizzyApiService.kt, CommentDto.kt, CardDetailViewModel.kt
  2. Naprawa tagów

    • Poprawić flow add/remove tag
    • Użyć prawidłowego tagging_id przy usuwaniu
    • Pliki: CardRepository.kt, CardDetailViewModel.kt
  3. Naprawa assignees

    • Zbadać API dla remove assignment (toggle?)
    • Implementować prawidłowe usuwanie
    • Pliki: FizzyApiService.kt, CardRepository.kt

Faza 2: Filtrowanie i Wyszukiwanie

  1. Zaawansowane filtrowanie kart

    • Dodać parametry query: tag_ids[], assignee_ids[], terms[]
    • UI: FilterChips w Kanban toolbar
    • Pliki: FizzyApiService.kt, CardRepository.kt, KanbanViewModel.kt
  2. Wyszukiwanie globalne

    • Wyszukiwanie po wszystkich boardach
    • UI: SearchBar w głównym ekranie
    • Nowy feature: feature/search/

Faza 3: Paginacja i Caching

  1. Paginacja

    • Parser dla Link header z rel="next"
    • Infinite scroll w listach
    • Pliki: NetworkModule.kt, wszystkie repozytoria
  2. ETag Caching

    • OkHttp interceptor dla If-None-Match
    • Cache storage
    • Pliki: NetworkModule.kt, AuthInterceptor.kt

Faza 4: Rich Content

  1. File Uploads

    • Multipart request handling
    • Avatary użytkowników (zamiast inicjałów)
    • Obrazki nagłówkowe kart
    • Pliki: FizzyApiService.kt, nowy FileUploadRepository.kt
  2. Rich Text

    • HTML rendering w opisach i komentarzach
    • Compose HTML renderer lub WebView
    • Pliki: CardDetailScreen.kt, nowy RichTextContent.kt

Faza 5: Parytet UI

  1. Activity Log

    • Nowy endpoint (jeśli dostępny w API)
    • Timeline UI w CardDetailScreen
    • Pliki: CardDetailScreen.kt, CardDetailViewModel.kt
  2. Board Members

    • Wyświetlanie użytkowników boarda
    • Zarządzanie dostępem
    • Pliki: BoardDetailScreen.kt (nowy), UserRepository.kt
  3. 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

  1. Zaloguj się przez Magic Link
  2. Utwórz board, dodaj kolumny i karty
  3. Przetestuj drag & drop między kolumnami
  4. Otwórz szczegóły karty - dodaj/usuń tagi, assignees
  5. Dodaj komentarz, dodaj/usuń reakcję
  6. Zamknij i otwórz ponownie kartę
  7. Sprawdź powiadomienia

Testy API

  1. Porównaj response API z DTO mapping
  2. Zweryfikuj error handling (401, 403, 404, 422)
  3. Sprawdź paginację na dużych zbiorach

Porównanie z Web

  1. Otwórz tę samą tablicę w web i w aplikacji
  2. Porównaj wyświetlanie kart 1:1
  3. 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