auth tests

This commit is contained in:
Giuseppe Naponiello
2026-06-22 14:31:44 +02:00
parent 34a8ebc6fb
commit cc4e174880
75 changed files with 4679 additions and 168 deletions

View File

@@ -0,0 +1,130 @@
<?php
namespace App\Http\Traits;
use Illuminate\Http\JsonResponse;
use Illuminate\Pagination\LengthAwarePaginator;
/**
* Risposte JSON standardizzate per i controller API.
*
* I messaggi sono presi da config/messages.php. Passando un $prefix si possono
* usare messaggi specifici per risorsa (es. "user_roles.created"); senza prefix
* si usano le chiavi generiche di primo livello.
*/
trait ApiResponse
{
/**
* 200 Lista paginata: { message, data, meta }.
*/
protected function paginatedCollectionResponse(LengthAwarePaginator $paginator, ?string $prefix = null): JsonResponse
{
return response()->json([
'message' => config($prefix ? "messages.{$prefix}.index" : 'messages.index'),
'data' => $paginator->items(),
'meta' => [
'current_page' => $paginator->currentPage(),
'last_page' => $paginator->lastPage(),
'per_page' => $paginator->perPage(),
'total' => $paginator->total(),
],
], 200);
}
/**
* 200 Collezione di risorse.
*/
protected function collectionResponse(mixed $collection, ?string $prefix = null): JsonResponse
{
return response()->json([
'message' => config($prefix ? "messages.{$prefix}.index" : 'messages.index'),
'data' => $collection,
], 200);
}
/**
* 200 Singola risorsa.
*/
protected function okResponse(mixed $data, ?string $prefix = null): JsonResponse
{
return response()->json([
'message' => config($prefix ? "messages.{$prefix}.show" : 'messages.show'),
'data' => $data,
], 200);
}
/**
* 201 Risorsa creata.
*/
protected function createdResponse(mixed $model, ?string $prefix = null): JsonResponse
{
return response()->json([
'message' => config($prefix ? "messages.{$prefix}.created" : 'messages.created'),
'data' => $model,
], 201);
}
/**
* 200 Risorsa aggiornata.
*/
protected function updatedResponse(mixed $model, ?string $prefix = null): JsonResponse
{
return response()->json([
'message' => config($prefix ? "messages.{$prefix}.updated" : 'messages.updated'),
'data' => $model,
], 200);
}
/**
* 200 Risorsa eliminata.
*/
protected function deletedResponse(?string $prefix = null): JsonResponse
{
return response()->json([
'message' => config($prefix ? "messages.{$prefix}.deleted" : 'messages.deleted'),
], 200);
}
/**
* 200 Risorsa ripristinata (soft delete restore).
*/
protected function restoredResponse(mixed $model, ?string $prefix = null): JsonResponse
{
return response()->json([
'message' => config($prefix ? "messages.{$prefix}.restored" : 'messages.restored'),
'data' => $model,
], 200);
}
/**
* 409 Conflitto: operazione bloccata (es. risorsa in uso).
*/
protected function conflictResponse(string $message): JsonResponse
{
return response()->json([
'message' => $message,
'in_use' => true,
], 409);
}
/**
* Risposta con solo messaggio chiave config es. "auth.login_success".
*/
protected function messageResponse(string $configKey, int $status = 200): JsonResponse
{
return response()->json([
'message' => config("messages.{$configKey}"),
], $status);
}
/**
* Risposta con messaggio e dati chiave config es. "auth.login_success".
*/
protected function dataResponse(mixed $data, string $configKey, int $status = 200): JsonResponse
{
return response()->json([
'message' => config("messages.{$configKey}"),
'data' => $data,
], $status);
}
}