Files
sam-api/app/Http/Controllers/Api/V1/PaymentController.php
hskwon abaff1286e feat: Phase 8 SaaS 확장 - 구독관리/결제내역 API 추가
- 사용량 조회 API (GET /subscriptions/usage)
- 데이터 내보내기 API (POST/GET /subscriptions/export)
- 결제 명세서 API (GET /payments/{id}/statement)
- DataExport 모델 및 마이그레이션 추가
2025-12-19 16:53:49 +09:00

99 lines
2.6 KiB
PHP

<?php
namespace App\Http\Controllers\Api\V1;
use App\Http\Controllers\Controller;
use App\Http\Requests\V1\Payment\PaymentActionRequest;
use App\Http\Requests\V1\Payment\PaymentIndexRequest;
use App\Http\Requests\V1\Payment\PaymentStoreRequest;
use App\Http\Response\ApiResponse;
use App\Services\PaymentService;
use Illuminate\Http\JsonResponse;
class PaymentController extends Controller
{
public function __construct(
private readonly PaymentService $paymentService
) {}
/**
* 결제 목록
*/
public function index(PaymentIndexRequest $request): JsonResponse
{
$result = $this->paymentService->index($request->validated());
return ApiResponse::handle('message.fetched', $result);
}
/**
* 결제 요약 통계
*/
public function summary(PaymentIndexRequest $request): JsonResponse
{
$result = $this->paymentService->summary($request->validated());
return ApiResponse::handle('message.fetched', $result);
}
/**
* 결제 상세
*/
public function show(int $id): JsonResponse
{
$result = $this->paymentService->show($id);
return ApiResponse::handle('message.fetched', $result);
}
/**
* 결제 등록 (수동)
*/
public function store(PaymentStoreRequest $request): JsonResponse
{
$result = $this->paymentService->store($request->validated());
return ApiResponse::handle('message.created', $result, 201);
}
/**
* 결제 완료 처리
*/
public function complete(PaymentActionRequest $request, int $id): JsonResponse
{
$result = $this->paymentService->complete($id, $request->validated()['transaction_id'] ?? null);
return ApiResponse::handle('message.payment.completed', $result);
}
/**
* 결제 취소
*/
public function cancel(PaymentActionRequest $request, int $id): JsonResponse
{
$result = $this->paymentService->cancel($id, $request->validated()['reason'] ?? null);
return ApiResponse::handle('message.payment.cancelled', $result);
}
/**
* 환불 처리
*/
public function refund(PaymentActionRequest $request, int $id): JsonResponse
{
$result = $this->paymentService->refund($id, $request->validated()['reason'] ?? null);
return ApiResponse::handle('message.payment.refunded', $result);
}
/**
* 결제 명세서 조회
*/
public function statement(int $id): JsonResponse
{
$result = $this->paymentService->statement($id);
return ApiResponse::handle('message.fetched', $result);
}
}