Files
alrahma_sunday_school_api/app/Http/Controllers/Api/Badges/BadgeController.php
T
2026-03-08 16:33:24 -04:00

87 lines
2.8 KiB
PHP

<?php
namespace App\Http\Controllers\Api\Badges;
use App\Http\Controllers\Controller;
use App\Http\Requests\Badges\BadgePrintStatusRequest;
use App\Http\Requests\Badges\GenerateBadgePdfRequest;
use App\Http\Requests\Badges\LogBadgePrintRequest;
use App\Services\Badges\BadgeFormDataService;
use App\Services\Badges\BadgePdfService;
use App\Services\Badges\BadgePrintLogService;
use Illuminate\Http\JsonResponse;
use Throwable;
class BadgeController extends Controller
{
public function __construct(
protected BadgePdfService $badgePdfService,
protected BadgePrintLogService $badgePrintLogService,
protected BadgeFormDataService $badgeFormDataService
) {
}
public function generatePdf(GenerateBadgePdfRequest $request)
{
return $this->badgePdfService->generate(
userIds: $request->input('user_ids', []),
schoolYear: $request->input('school_year'),
rolesMap: $request->input('roles', []),
classesMap: $request->input('classes', []),
actorId: optional($request->user())->id
);
}
public function printStatus(BadgePrintStatusRequest $request): JsonResponse
{
try {
return response()->json([
'ok' => true,
'data' => $this->badgePrintLogService->getStatus(
$request->normalizedUserIds(),
$request->input('school_year')
),
]);
} catch (Throwable) {
return response()->json([
'ok' => false,
'error' => 'Failed to query status',
], 500);
}
}
public function logPrint(LogBadgePrintRequest $request): JsonResponse
{
try {
$inserted = $this->badgePrintLogService->log(
userIds: $request->input('user_ids', []),
actorId: optional($request->user())->id,
schoolYear: $request->input('school_year'),
rolesMap: $request->input('roles', []),
classesMap: $request->input('classes', [])
);
return response()->json([
'ok' => true,
'inserted' => $inserted,
]);
} catch (Throwable $e) {
return response()->json([
'ok' => false,
'error' => $e->getMessage(),
], 500);
}
}
public function formData(BadgePrintStatusRequest $request): JsonResponse
{
return response()->json([
'ok' => true,
'data' => $this->badgeFormDataService->build(
schoolYear: $request->input('school_year'),
selectedUserIds: $request->normalizedUserIds(),
activeRole: $request->input('active_role')
),
]);
}
}