Reverse Single Reference, dwusetny Diff 🎉

Yo,

dzisiaj oddałem do Review T763 - Reverse Single Reference. Diff tutaj:

https://hub.sealcode.org/D200

(btw, jest to dwusetny diff na naszym phabricatorze :confetti_ball: :fireworks: :smiley: )


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 :slight_smile:

2 Likes

Dzisiaj Bartek stworzył diffa o jeszcze bardziej okrągłym numerze - 256!

2 Likes