[BE-04] partner audit persistence infra (Repository·QueryDSL·Async Recorder·전용 Executor)
작업 내용 (설계 의도)
변경 사항
근거 TDD: ../TDD.md·ADR-009. BE-02 감사 interface의 infrastructure 구현 + 비동기 적재.
infrastructure/partner/audit/PartnerAuditLogJpaRepository.kt·PartnerAuditLogRepositoryImpl.kt— save.infrastructure/partner/audit/PartnerAuditLogQueryDslRepository.kt(Custom 구현) —findBy(partnerId, from, to, pageable)범위 조회.@Query금지, QueryDSL.infrastructure/partner/audit/AsyncPartnerActivityRecorder.kt—PartnerActivityRecorder구현,@Async("partnerAuditExecutor"),PartnerAuditLogDomainService.record호출, 실패 시 요청 비실패·WARN 로그(mcpMcpAuditLogAsyncRecorder패턴).infrastructure/config/PartnerAsyncConfig.kt— 신규 파일로partnerAuditExecutor빈 정의. 기존AsyncConfig.kt수정 금지(Single Writer 보호).
의존
- BE-02
다이어그램
처리 흐름
sequenceDiagram participant F as Filter(BE-08) participant R as AsyncPartnerActivityRecorder participant D as PartnerAuditLogDomainService F->>R: record(...) @Async R->>D: record(auditLog) Note over R: 실패 시 WARN, 요청 비실패
테스트 케이스
- record 호출 시 partner_audit_log에 1건 적재된다 (TestContainers).
- DomainService가 예외를 던져도 record는 예외를 전파하지 않고 WARN 로그만 남긴다.
- findBy는 from~to 범위 밖 로그를 제외하고 called_at DESC로 페이징한다.
- 신규 파트너의 findBy는 빈 Page를 반환한다.