fix(items/list): "5월 22일 마감" 발주는 그 날 종일 노출 — 자정 정각이면 23:59:59로 해석
Deploy momo-erp / deploy (push) Successful in 2m14s

증상: sale_end_date='2026-05-22 00:00:00' 인 품목들이 5월 22일 0시 1분부터
      출고요청 화면에서 사라짐. 사용자 의도는 "5월 22일 종일 마감".

원인: NOW() <= sale_end_date 비교가 자정 정각을 그 날의 끝이 아니라
      그 날의 시작으로 해석.

수정: CASE 로 종료시각이 자정 정각이면 (= 시간 명시 안 함)
      그 날 23:59:59 까지 노출. 시간 명시(예: 22:00)는 그 시각까지 정확히.

      NOW() <= CASE
        WHEN sale_end_date = date_trunc('day', sale_end_date)
          THEN sale_end_date + INTERVAL '1 day' - INTERVAL '1 second'
        ELSE sale_end_date
      END

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
chpark
2026-05-22 11:57:30 +09:00
parent 1a209ceb29
commit a40bb609e3
+13 -2
View File
@@ -109,11 +109,22 @@ export async function POST(req: NextRequest) {
} }
// 출고요청(orders/new) 메뉴: 판매 가능 기간(sale_start_date ~ sale_end_date) 안의 품목만. // 출고요청(orders/new) 메뉴: 판매 가능 기간(sale_start_date ~ sale_end_date) 안의 품목만.
// 기간이 NULL 인 품목은 상시 노출. USER 항상 적용, ADMIN 도 forSale=true 이면 적용. // 기간이 NULL 인 품목은 상시 노출. USER 항상 적용, ADMIN 도 forSale=true 이면 적용.
// 분 단위 시간까지 비교 (NOW() vs TIMESTAMP) //
// 종료일 비교 규칙:
// - sale_end_date 시간이 00:00:00 (자정 정각) 이면 → 그 날 23:59:59 까지 노출
// ("5월 22일 마감" 의도는 5월 22일 종일 노출이라는 통상 해석)
// - 시간이 명시 (예: 22:00) 되어 있으면 → 그 시각까지 정확히 비교
if (isUser || forSale) { if (isUser || forSale) {
conditions.push( conditions.push(
`(I.sale_start_date IS NULL OR NOW() >= I.sale_start_date) `(I.sale_start_date IS NULL OR NOW() >= I.sale_start_date)
AND (I.sale_end_date IS NULL OR NOW() <= I.sale_end_date)` AND (
I.sale_end_date IS NULL
OR NOW() <= CASE
WHEN I.sale_end_date = date_trunc('day', I.sale_end_date)
THEN I.sale_end_date + INTERVAL '1 day' - INTERVAL '1 second'
ELSE I.sale_end_date
END
)`
); );
} }