fix(core): harden settlement and wallet integration
This commit is contained in:
@@ -2,8 +2,9 @@
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Admin\Reports;
|
||||
|
||||
use App\Models\AdminUser;
|
||||
use App\Models\ReportJob;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Support\AdminReportJobPolicy;
|
||||
use App\Services\Admin\AdminReportJobService;
|
||||
use App\Services\Admin\AdminReportQueryService;
|
||||
use App\Services\Admin\AdminReportSpreadsheetExporter;
|
||||
@@ -13,11 +14,20 @@ use Symfony\Component\HttpFoundation\StreamedResponse;
|
||||
final class ReportJobDownloadController
|
||||
{
|
||||
public function __invoke(
|
||||
Request $request,
|
||||
ReportJob $report_job,
|
||||
AdminReportJobService $service,
|
||||
AdminReportQueryService $queryService,
|
||||
AdminReportSpreadsheetExporter $spreadsheetExporter,
|
||||
): StreamedResponse {
|
||||
$admin = $request->lotteryAdmin();
|
||||
abort_if($admin === null, 401);
|
||||
abort_unless(AdminReportJobPolicy::jobAccessible($admin, $report_job), 403);
|
||||
abort_unless(
|
||||
AdminReportJobPolicy::canExportReportType($admin, (string) $report_job->report_type),
|
||||
403,
|
||||
);
|
||||
|
||||
$filterJson = is_array($report_job->filter_json) ? $report_job->filter_json : null;
|
||||
$range = $queryService->resolveDateRange($filterJson);
|
||||
$dateFrom = $range['date_from'];
|
||||
@@ -30,8 +40,7 @@ final class ReportJobDownloadController
|
||||
$dateTo,
|
||||
);
|
||||
$filename = $label.'_'.$pathSuffix.'.'.$report_job->export_format;
|
||||
$scopedAdmin = AdminUser::query()->find((int) $report_job->admin_user_id);
|
||||
$rows = $service->reportRows((string) $report_job->report_type, $filterJson, $scopedAdmin);
|
||||
$rows = $service->reportRows((string) $report_job->report_type, $filterJson, $admin);
|
||||
|
||||
if ((string) $report_job->export_format === 'xlsx') {
|
||||
return $spreadsheetExporter->streamDownload($rows, $filename);
|
||||
|
||||
@@ -2,17 +2,21 @@
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Admin\Reports;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ReportJob;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Support\AdminApiList;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Support\AdminReportJobPolicy;
|
||||
|
||||
/** GET /api/v1/admin/report-jobs */
|
||||
final class ReportJobIndexController extends Controller
|
||||
{
|
||||
public function __invoke(Request $request): JsonResponse
|
||||
{
|
||||
$admin = $request->lotteryAdmin();
|
||||
abort_if($admin === null, 401);
|
||||
|
||||
$p = AdminApiList::readPaging($request);
|
||||
$reportType = trim((string) $request->query('report_type', ''));
|
||||
|
||||
@@ -23,6 +27,8 @@ final class ReportJobIndexController extends Controller
|
||||
$query->where('report_type', $reportType);
|
||||
}
|
||||
|
||||
AdminReportJobPolicy::applyToJobsQuery($query, $admin);
|
||||
|
||||
$paginator = $query->paginate($p['perPage'], ['*'], 'page', $p['page']);
|
||||
|
||||
return AdminApiList::json($paginator, fn (ReportJob $j) => $this->row($j));
|
||||
|
||||
@@ -2,16 +2,22 @@
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Admin\Reports;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ReportJob;
|
||||
use App\Support\ApiResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Support\AdminReportJobPolicy;
|
||||
|
||||
/** GET /api/v1/admin/report-jobs/{report_job} */
|
||||
final class ReportJobShowController extends Controller
|
||||
{
|
||||
public function __invoke(ReportJob $report_job): JsonResponse
|
||||
public function __invoke(Request $request, ReportJob $report_job): JsonResponse
|
||||
{
|
||||
$admin = $request->lotteryAdmin();
|
||||
abort_if($admin === null, 401);
|
||||
abort_unless(AdminReportJobPolicy::jobAccessible($admin, $report_job), 403);
|
||||
|
||||
return ApiResponse::success([
|
||||
'id' => (int) $report_job->id,
|
||||
'job_no' => $report_job->job_no,
|
||||
|
||||
@@ -2,12 +2,13 @@
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Admin\Reports;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Admin\ReportJobStoreRequest;
|
||||
use App\Models\AdminUser;
|
||||
use App\Services\Admin\AdminReportJobService;
|
||||
use App\Support\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Support\AdminReportJobPolicy;
|
||||
use App\Services\Admin\AdminReportJobService;
|
||||
use App\Http\Requests\Admin\ReportJobStoreRequest;
|
||||
|
||||
/** POST /api/v1/admin/report-jobs */
|
||||
final class ReportJobStoreController extends Controller
|
||||
@@ -18,6 +19,10 @@ final class ReportJobStoreController extends Controller
|
||||
$admin = $request->lotteryAdmin();
|
||||
|
||||
$data = $request->validated();
|
||||
abort_unless(
|
||||
AdminReportJobPolicy::canExportReportType($admin, (string) $data['report_type']),
|
||||
403,
|
||||
);
|
||||
|
||||
$job = $service->enqueue(
|
||||
$admin,
|
||||
@@ -35,4 +40,4 @@ final class ReportJobStoreController extends Controller
|
||||
'status' => $job->status,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user