Files
laravel_school_api/app/Http/Controllers/Api/V2/Finance/PaymentController.php
T
2026-05-30 01:11:35 -04:00

36 lines
1.6 KiB
PHP

<?php declare(strict_types=1);
namespace App\Http\Controllers\Api\V2\Finance;
use App\Domain\SchoolCore\Context\SchoolContextStore;
use App\Domain\SchoolCore\Finance\Contracts\PaymentServiceContract;
use App\Http\Requests\Finance\EditPaymentRequest;
use App\Http\Requests\Finance\RecordPaymentRequest;
use App\Http\Resources\V2\Finance\PaymentResource;
use App\Support\Api\ApiResponse;
use Illuminate\Http\JsonResponse;
use Illuminate\Routing\Controller;
final class PaymentController extends Controller
{
public function __construct(private readonly SchoolContextStore $context, private readonly PaymentServiceContract $payments) {}
public function store(RecordPaymentRequest $request): JsonResponse
{
$result = $this->payments->recordPayment($this->context->current(), $request->toDTO());
return ApiResponse::success((new PaymentResource($result))->resolve($request), 'Payment recorded.', [], 201);
}
public function update(EditPaymentRequest $request, int $payment): JsonResponse
{
$result = $this->payments->editPayment($this->context->current(), $payment, $request->toDTO());
return ApiResponse::success((new PaymentResource($result))->resolve($request), 'Payment updated.');
}
public function reverse(EditPaymentRequest $request, int $payment): JsonResponse
{
$result = $this->payments->reversePayment($this->context->current(), $payment, (string) $request->validated('edit_reason', 'Reversed through API'));
return ApiResponse::success((new PaymentResource($result))->resolve($request), 'Payment reversed.');
}
}