Buzz-Groups
Package pensato per la gestione dei gruppi. E' pensato per l'organizzazione di qualsiasi tipo di entità, posto che essa sia rappresentata da un Model in Laravel.
Funzionamento
Gerarchia gruppi
I gruppi sono organizzati in gerarchia. Ogni gruppo mantiene un riferimento al padre tramite il campo parent_id che non può essere cambiato.
Endpoint:
- GET:
/api/gruppi/gerarchia - GET:
/api/gruppi/{id}/gerarchia
Relazioni
Pubblicare il file di configurazione usando il comando:
php artisan vendor:publish --provider="Nodopiano\Buzz\Groups\BuzzGroupsServiceProvider" --tag=config
Nel file config/buzzgroups.php, indicare i models da raggruppare e dare un nome alla relazione:
'relationships' => [
'utenti' => 'App\User',
]
Includere il trait Nodopiano\Buzz\Groups\Traits\Groupable nei Models inseriti nell'array di configurazione.
Questo trait richiede l'implementazione di due metodi: apiResource() e repository(). Il primo deve ritornare la classe relativa alla Resource che si vuole utilizzare per modellare le api; il secondo deve ritornare il Repository:
public static function apiResource()
{
return \App\Http\Resources\User::class;
}
public static function repository()
{
return \Nodopiano\Buzz\Users\Repositories\UserRepository::class;
}
In questo modo, buzz-groups sarà in grado di gestire le api relative alla relazione tra i gruppi e le entità da collezionare.
Sarà posibile interrogare le api in questo modo:
- GET
\api\gruppi\utenti - GET
\api\gruppi\utenti\list - GET
\api\utenti\gruppi - GET
\api\utenti\gruppi\list
E così via per tutte le relazioni indicate nel config.
Per aggiungere un elemento al gruppo, è necessario fare una POST su \api\gruppi\{id}, avente questo payload:
{
name: string,
parent_id: integer,
utenti: [1,2,3] //array contenente gli indici dei model nel gruppo
}
WIP: gestire aggiunta/rimozione elementi dal gruppo usando endpoint del tipo PUT/DELETE su \api\gruppi\{id}\utenti con {user_id: ID}.
Configurazione
Tramite il file config/buzzgroups.php è possibile configurare:
name: nome nelle routes (defualt: gruppi)repository: repository per gestire il model Grupporesults_per_page: numero di risultati per pagina nelle api (default: 15)gruppo_api_resource: classe per decorare le api del gruppogerarchia_api_resourceclasse per decorare le api della gerarchia