124 lines
3.9 KiB
PHP
124 lines
3.9 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Web\Mypage;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Services\Mypage\UsageService;
|
|
use Illuminate\Http\Request;
|
|
|
|
final class UsageController extends Controller
|
|
{
|
|
public function __construct(
|
|
private readonly UsageService $service,
|
|
) {}
|
|
|
|
/**
|
|
* GET /mypage/usage
|
|
* - 리스트 + 검색 + 페이징
|
|
* - 호환: /mypage/usage?attempt_id=123 -> show로 redirect
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
if ((bool)session('_sess._login_') !== true) {
|
|
return redirect()->route('web.auth.login');
|
|
}
|
|
|
|
$memNo = (int)session('_sess._mno', 0);
|
|
if ($memNo <= 0) abort(403);
|
|
|
|
$attemptId = $request->query('attempt_id');
|
|
$attemptId = is_numeric($attemptId) ? (int)$attemptId : null;
|
|
|
|
if ($attemptId !== null && $attemptId >= 1) {
|
|
return redirect()->route('web.mypage.usage.show', ['attemptId' => $attemptId]);
|
|
}
|
|
|
|
$filters = [
|
|
'q' => trim((string)$request->query('q', '')),
|
|
'method' => trim((string)$request->query('method', '')),
|
|
'status' => trim((string)$request->query('status', '')),
|
|
'from' => trim((string)$request->query('from', '')),
|
|
'to' => trim((string)$request->query('to', '')),
|
|
];
|
|
|
|
$data = $this->service->buildListPageData($memNo, $filters);
|
|
|
|
return view('web.mypage.usage.index', $data);
|
|
}
|
|
|
|
/**
|
|
* GET /mypage/usage/{attemptId}
|
|
*/
|
|
public function show(Request $request, int $attemptId)
|
|
{
|
|
if ((bool)session('_sess._login_') !== true) {
|
|
return redirect()->route('web.auth.login');
|
|
}
|
|
|
|
$memNo = (int)session('_sess._mno', 0);
|
|
if ($memNo <= 0) abort(403);
|
|
|
|
$data = $this->service->buildDetailPageData($attemptId, $memNo);
|
|
|
|
return view('web.mypage.usage.show', $data);
|
|
}
|
|
|
|
/**
|
|
* POST /mypage/usage/{attemptId}/open
|
|
* - 핀 "오픈(확인)" 처리: ret_data에 pin_opened_at 기록
|
|
*/
|
|
public function openPins(Request $request, int $attemptId)
|
|
{
|
|
if ((bool)session('_sess._login_') !== true) {
|
|
return redirect()->route('web.auth.login');
|
|
}
|
|
|
|
$memNo = (int)session('_sess._mno', 0);
|
|
if ($memNo <= 0) abort(403);
|
|
|
|
$out = $this->service->openPins($attemptId, $memNo);
|
|
|
|
if (!($out['ok'] ?? false)) {
|
|
return redirect()->back()->with('error', (string)($out['message'] ?? '처리 실패'));
|
|
}
|
|
|
|
return redirect()->route('web.mypage.usage.show', ['attemptId' => $attemptId])
|
|
->with('success', '핀 확인이 완료되었습니다.');
|
|
}
|
|
|
|
/**
|
|
* POST /mypage/usage/{attemptId}/cancel
|
|
* - 결제완료 후 취소(핀 오픈 전만)
|
|
*/
|
|
public function cancel(Request $request, int $attemptId)
|
|
{
|
|
if ((bool)session('_sess._login_') !== true) {
|
|
return redirect()->route('web.auth.login');
|
|
}
|
|
|
|
$memNo = (int)session('_sess._mno', 0);
|
|
if ($memNo <= 0) abort(403);
|
|
|
|
$data = $request->validate([
|
|
'reason' => ['nullable','string','max:255'],
|
|
]);
|
|
|
|
$out = $this->service->cancelPaidAttempt($attemptId, $memNo, (string)($data['reason'] ?? '사용자 요청'));
|
|
|
|
if (!($out['ok'] ?? false)) {
|
|
return redirect()->back()->with('error', (string)($out['message'] ?? '취소 실패'));
|
|
}
|
|
|
|
return redirect()->route('web.mypage.usage.show', array_filter([
|
|
'attemptId' => $attemptId,
|
|
'q' => $request->input('q'),
|
|
'method' => $request->input('method'),
|
|
'status' => $request->input('status'),
|
|
'from' => $request->input('from'),
|
|
'to' => $request->input('to'),
|
|
'page' => $request->input('page'),
|
|
], fn ($v) => $v !== null && $v !== ''))
|
|
->with('success', '결제가 취소되었습니다.');
|
|
}
|
|
}
|