New-Thanasoft/thanasoft-back/app/Http/Controllers/Api/ClientGroupController.php
2026-03-05 17:00:32 +03:00

199 lines
6.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
declare(strict_types=1);
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Requests\AssignClientsToGroupRequest;
use App\Http\Requests\StoreClientGroupRequest;
use App\Http\Requests\UpdateClientGroupRequest;
use App\Http\Resources\Client\ClientGroupResource;
use App\Models\Client;
use App\Repositories\ClientGroupRepositoryInterface;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
use Illuminate\Support\Facades\Log;
class ClientGroupController extends Controller
{
public function __construct(
private readonly ClientGroupRepositoryInterface $clientGroupRepository
) {
}
/**
* Display a listing of client groups.
*/
public function index(): AnonymousResourceCollection|JsonResponse
{
try {
$clientGroups = $this->clientGroupRepository->all();
return ClientGroupResource::collection($clientGroups);
} catch (\Exception $e) {
Log::error('Error fetching client groups: ' . $e->getMessage(), [
'exception' => $e,
'trace' => $e->getTraceAsString(),
]);
return response()->json([
'message' => 'Une erreur est survenue lors de la récupération des groupes de clients.',
'error' => config('app.debug') ? $e->getMessage() : null,
], 500);
}
}
/**
* Store a newly created client group.
*/
public function store(StoreClientGroupRequest $request): ClientGroupResource|JsonResponse
{
try {
$clientGroup = $this->clientGroupRepository->create($request->validated());
return new ClientGroupResource($clientGroup);
} catch (\Exception $e) {
Log::error('Error creating client group: ' . $e->getMessage(), [
'exception' => $e,
'trace' => $e->getTraceAsString(),
'data' => $request->validated(),
]);
return response()->json([
'message' => 'Une erreur est survenue lors de la création du groupe de clients.',
'error' => config('app.debug') ? $e->getMessage() : null,
], 500);
}
}
/**
* Display the specified client group.
*/
public function show(string $id): ClientGroupResource|JsonResponse
{
try {
$clientGroup = $this->clientGroupRepository->find($id);
if (!$clientGroup) {
return response()->json([
'message' => 'Groupe de clients non trouvé.',
], 404);
}
return new ClientGroupResource($clientGroup);
} catch (\Exception $e) {
Log::error('Error fetching client group: ' . $e->getMessage(), [
'exception' => $e,
'trace' => $e->getTraceAsString(),
'client_group_id' => $id,
]);
return response()->json([
'message' => 'Une erreur est survenue lors de la récupération du groupe de clients.',
'error' => config('app.debug') ? $e->getMessage() : null,
], 500);
}
}
/**
* Update the specified client group.
*/
public function update(UpdateClientGroupRequest $request, string $id): ClientGroupResource|JsonResponse
{
try {
$updated = $this->clientGroupRepository->update($id, $request->validated());
if (!$updated) {
return response()->json([
'message' => 'Groupe de clients non trouvé ou échec de la mise à jour.',
], 404);
}
$clientGroup = $this->clientGroupRepository->find($id);
return new ClientGroupResource($clientGroup);
} catch (\Exception $e) {
Log::error('Error updating client group: ' . $e->getMessage(), [
'exception' => $e,
'trace' => $e->getTraceAsString(),
'client_group_id' => $id,
'data' => $request->validated(),
]);
return response()->json([
'message' => 'Une erreur est survenue lors de la mise à jour du groupe de clients.',
'error' => config('app.debug') ? $e->getMessage() : null,
], 500);
}
}
/**
* Remove the specified client group.
*/
public function destroy(string $id): JsonResponse
{
try {
$deleted = $this->clientGroupRepository->delete($id);
if (!$deleted) {
return response()->json([
'message' => 'Groupe de clients non trouvé ou échec de la suppression.',
], 404);
}
return response()->json([
'message' => 'Groupe de clients supprimé avec succès.',
], 200);
} catch (\Exception $e) {
Log::error('Error deleting client group: ' . $e->getMessage(), [
'exception' => $e,
'trace' => $e->getTraceAsString(),
'client_group_id' => $id,
]);
return response()->json([
'message' => 'Une erreur est survenue lors de la suppression du groupe de clients.',
'error' => config('app.debug') ? $e->getMessage() : null,
], 500);
}
}
/**
* Assign many clients to one client group.
*/
public function assignClients(AssignClientsToGroupRequest $request, string $id): JsonResponse
{
try {
$clientGroup = $this->clientGroupRepository->find($id);
if (!$clientGroup) {
return response()->json([
'message' => 'Groupe de clients non trouvé.',
], 404);
}
$clientIds = $request->validated('client_ids');
$updatedCount = Client::query()
->whereIn('id', $clientIds)
->update(['group_id' => $clientGroup->id]);
return response()->json([
'message' => 'Clients assignés au groupe avec succès.',
'assigned_count' => $updatedCount,
'group' => new ClientGroupResource($clientGroup),
]);
} catch (\Exception $e) {
Log::error('Error assigning clients to group: ' . $e->getMessage(), [
'exception' => $e,
'trace' => $e->getTraceAsString(),
'client_group_id' => $id,
'data' => $request->validated(),
]);
return response()->json([
'message' => 'Une erreur est survenue lors de lassignation des clients au groupe.',
'error' => config('app.debug') ? $e->getMessage() : null,
], 500);
}
}
}