Files
alrahma_sunday_school_api/app/Services/Expenses/ExpenseReceiptService.php
T
2026-06-11 11:46:12 -04:00

47 lines
1.2 KiB
PHP

<?php
namespace App\Services\Expenses;
use App\Services\ApplicationUrlService;
use Illuminate\Http\UploadedFile;
class ExpenseReceiptService
{
public function __construct(
private ApplicationUrlService $urls
) {}
public function storeReceipt(UploadedFile $file): string
{
if (! $file->isValid()) {
throw new \InvalidArgumentException('Invalid receipt upload.');
}
$allowed = [
'image/jpeg' => 'jpg',
'image/png' => 'png',
'image/webp' => 'webp',
'application/pdf' => 'pdf',
];
$mime = strtolower((string) $file->getMimeType());
if (! isset($allowed[$mime])) {
throw new \InvalidArgumentException('Unsupported receipt file type.');
}
if ((int) $file->getSize() > 5 * 1024 * 1024) {
throw new \InvalidArgumentException('Receipt file too large. Max 5MB.');
}
$filename = bin2hex(random_bytes(16)).'.'.$allowed[$mime];
$file->storeAs('receipts', $filename);
return $filename;
}
public function receiptUrl(?string $filename): ?string
{
return $this->urls->forReceiptStorage($filename);
}
}