Hej
Front posiada stronę o nazwie "komunikacja" która ma widok zakładkowy. Składa się ona z 6 zakładek;
Nazwy zakładek: Wszystkie, Wiadomości, Wnioski, **Newsy **, Protokoły, Inne
Opis frontowy
- Zakładka **wszystkie ** scala wyniki z innych zakładek sortując je po dacie.
- Każda zakładka posiada licznik nieprzeczytanych
- Zakładka **wszystkie ** posiada filtry takie jak "search query", "zakres daty from - to", "pokaż nieprzeczytane"
- Inne zakładki dziedziczą filtry z zakładki wszystkie ale również mają dodatkowe swoje takie jak "filtrowanie po nazwie grupy","filtrowanie po typie", itp
Item listy ma takie właściwości:
- id
- externalId
- type (typ komunikatu np wniosek, news itp)
- date
- title (multilang)
- description (multilang)
- status (multilang)
- readStatus (per user)
- hasAttachment
Schemat architektury backend'u:
W facade-api mam interfejs który implementuje 5 serwisów (zakładek)
public interface TabService<T extends Filter> {
CommunicationPage getList(UserContext userContext, T requestFilter, PageRequest pageRequest);
int getUnreadCounter(UserContext userContext);
}
i interfejs który odpowiada za zakładke All
public interface AllTabService {
CommunicationPage getList(UserContext userContext, AllTabFilter requestFilter, PageRequest pageRequest);
Map<CommunicationType, Integer> getUnreadCounter(UserContext userContext);
}
Każde API posiada mechanizm paginacji "page", "size"
Z pojedynczą zakładką nie ma problemu bo strzelam bezpośrednio do API po wyniki
Sprawa trochę komplikuje się na zakładce "wszystkie" ;)
zrobiłem takie POC:
- Każde API wołam asynchronicznie za pomocą CompletableFuture
- Czekam na wyniki
- Merguje do jednej listy i sortuje po dacie
- Licze offset i limit aby przyciąć wyniki
Np.
Front wysyła request o:
0 - strona, wołam każde API page=0&size=10
1 - strona, wołam każde API page=0&size=20
2 - strona, wołam każde API page=0&size=30
dla page=2 robie stream.offset(20).limit(10)
Jako POC działa to dobrze ale szukam kierunku docelowego.Testowałem logike odpisywania do cache offsetu ile wykorzystałem "itemów" z danego API wydaje mi się ze to dobry kierunek.
Może ma ktoś pomysł na jeszcze inny mechanizm ?