36 lines
1.6 KiB
PHP
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.');
|
|
}
|
|
}
|