Files
Gnuboard7/plugins/_bundled/sirsoft-message_bizppurio/src/Controllers/Admin/DispatchResultController.php
T
chym1217 11f1d79540 feat(message_bizppurio): 코어 알림 발송 이력 화면에 문자·알림톡 결과 주입
발송 결과(성공/실패·사유·잔액부족·SMS 대체발송)를 코어 "알림 발송 이력" 화면의 각 행에
표시한다. 코어 앱·코어 테이블 무수정 — 연결 표식은 bizppurio_dispatches.notification_log_id
에만 두고, 발송 사이클의 코어 after_log_sent/after_log_failed 훅으로 그 로그 id 를 연결한다.

- 결과 조회는 파라미터 없는 GET /dispatch-results/recent 로 최근 결과 맵을 받아 row.id 매칭
 (목록 로드 순서에 무관 — 빈 배열 전송·타이밍으로 결과가 비던 문제 해소).
- 코어 이력 datagrid 에 결과 컬럼을 layout_extensions 로 주입하고, 행 토글에도 상세 결과를
 얹는다. 메일·사이트내알림 탭에선 컬럼(헤더 포함)을 숨긴다. 다크모드 배지 색 보강.
- 브라우저 검수용 데모 시더(4상태·엣지 케이스 21건) + 전 계층 테스트(백엔드·Vitest 렌더)
 + 시나리오 매니페스트 + API 레퍼런스 동반.
2026-07-28 12:36:26 +09:00

62 lines
2.5 KiB
PHP

<?php
declare(strict_types=1);
namespace Plugins\Sirsoft\MessageBizppurio\Controllers\Admin;
use App\Helpers\ResponseHelper;
use App\Http\Controllers\Api\Base\AdminBaseController;
use Illuminate\Http\JsonResponse;
use Plugins\Sirsoft\MessageBizppurio\Http\Requests\DispatchResultLookupRequest;
use Plugins\Sirsoft\MessageBizppurio\Services\DispatchResultService;
/**
* 코어 알림 발송 이력 화면용 비즈뿌리오 발송 결과 조회 컨트롤러 (A-2 표시 주입).
*
* 코어 "알림 발송 이력" 화면(sirsoft-admin_basic)에 plugin overlay 로 얹은 결과 컬럼이, 현재
* 페이지의 코어 알림 로그 id 배열을 이 API 로 넘겨 비즈뿌리오 결과(상태·사유·잔액부족·대체발송)를
* 한 번에 조회한다. 코어 화면·코어 앱·코어 테이블은 전혀 건드리지 않는다(연결 표식은 우리 dispatch
* 쪽에만 있고, 이 API 가 그것을 읽어 로그 id 키 맵으로 돌려준다).
*
* 권한(라우트 미들웨어): 조회 = messaging.view.
*/
class DispatchResultController extends AdminBaseController
{
/**
* @param DispatchResultService $service 결과 조회 서비스
*/
public function __construct(
private readonly DispatchResultService $service,
) {
parent::__construct();
}
/**
* 코어 알림 로그 id 배열에 대한 비즈뿌리오 결과 맵을 반환합니다.
*
* @param DispatchResultLookupRequest $request 검증된 로그 id 목록
* @return JsonResponse data.results 에 notification_log_id → 결과 맵
*/
public function lookup(DispatchResultLookupRequest $request): JsonResponse
{
return ResponseHelper::success('messages.success', [
'results' => $this->service->resultsForLogIds($request->logIds()),
]);
}
/**
* 최근 연결된 비즈뿌리오 결과 맵을 반환합니다 (코어 이력 화면 결과 컬럼용, 타이밍 무관).
*
* 파라미터 없이 GET 으로 최근 결과 맵을 받아 화면이 row.id 로 매칭한다(kginicis test-map 선례).
* 목록 data_source(notificationLogs) 로드 순서에 의존하지 않아, 결과 컬럼이 비는 문제를 원천 차단.
*
* @return JsonResponse data.results 에 notification_log_id → 결과 맵
*/
public function recent(): JsonResponse
{
return ResponseHelper::success('messages.success', [
'results' => $this->service->recentResults(),
]);
}
}