[BE-05] LimitedDropRepositoryImpl + JPA 영속화
작업 내용 (설계 의도)
변경 사항
LimitedDropRepository의 infrastructure 구현과 JPA 매핑(근거 TDD: ../TDD.md “ERD”). StockRepositoryImpl(Impl + JpaRepository 분리) 선례를 따른다. limited_drops 테이블 DDL은 private-senior-dba→private-mysql-implementer가 선행(V41__create_limited_drops.sql — ②가 V38~40 점유해 senior-dba가 V41 배정) — 이 티켓은 매핑·조회만. 롤백: 역방향 DDL로 테이블 drop(참조 코드 미배포 시 안전).
LimitedDropJpaRepository(Spring Data):findByProductIdAndStatus파생 쿼리(활성 회차).LimitedDropRepositoryImpl:save·findById·findOpenByProductId구현.- LimitedDrop ↔ JPA 매핑: ENUM 컬럼 금지(VARCHAR status), 시간
ZonedDateTime, DATETIME(6). FK 컬럼 금지(product_id일반 컬럼). - 복잡 조회 없음 → QueryDSL CustomImpl 불필요(파생 쿼리로 충분).
@Query사용 금지.
의존
- BE-01 (LimitedDrop·LimitedDropRepository), DB(
limited_drops마이그레이션 — senior-dba·mysql-implementer 선행)
다이어그램
클래스 의존
flowchart LR LimitedDropRepositoryImpl -.->|implements| LimitedDropRepository LimitedDropRepositoryImpl --> LimitedDropJpaRepository LimitedDropJpaRepository -.->|매핑| LimitedDrop
테스트 케이스
- save 후 findById로 동일 LimitedDrop을 복원한다 (Testcontainers MySQL)
- findOpenByProductId는 status=OPEN 회차만 반환한다
- CLOSED 회차만 있으면 findOpenByProductId는 null을 반환한다
- status·시간 컬럼이 VARCHAR·DATETIME(6)로 매핑되어 왕복 저장·조회에 손실이 없다