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 Gruppo
  • results_per_page: numero di risultati per pagina nelle api (default: 15)
  • gruppo_api_resource: classe per decorare le api del gruppo
  • gerarchia_api_resource classe per decorare le api della gerarchia