Yo,
dzisiaj oddałem do Review T763 - Reverse Single Reference. Diff tutaj:
(btw, jest to dwusetny diff na naszym phabricatorze )
Reverse Single Reference w skrócie to typ pola, który jest read-only - nie możemy do niego pisać bezpośrednio, możemy tylko czytać. Jego wartość jest automatycznie ustalana przez Sealiousa tak, aby zawierała **listę wszystkich zasobów z danej kolekcji, które za pomocą single_reference
wskazują na dany zasób.
Przykładowo: mamy kolekcje Users
i Roles
. Kolekcja Roles
ma następującą strukturę:
fields: [
{ name: "user", type: "single-reference", params: { collection: "users" } },
{
name: "role",
type: "enum",
params: { allowed_values: ["admin", "moderator", "dostawca"] },
},
];
W ten sposób pozwalamy, aby użytkownik miał więcej niż jedną rolę. Ale filtrowanie użytkowników po posiadanych rolach może być kłopotliwe (aczkolwiek nie niemożliwe).
reverse-single-reference
jest lustrzanym odbiciem przypisanego gdzieś indziej single-reference
. Dzięki temu możemy utworzyć w kolekcji Users
pole
{name: "roles", type: "reverse-single-reference", params: {collection: Roles, field_name: "user"}}
które dla każdego usera będzie zwracało tablicę wszystkich dokumentów z Roles
, które na niego wskazują. Można wtedy nawet filtrować użytkowników po polach kolekcji Roles:
HTTP /api/v1/collections/users?filter[roles][role]=admin
^ zwróci tych użytkowników, dla których jedna z przypisanych ról to admin