적립 포인트 절사가 코드에 1점 버림으로 고정돼 있어 운영자가 조정할 수 없었다. 언어/통화 설정의 환율 절사를 따라가는 방안을 먼저 검토했으나, 그쪽은 외화 환산 분기에서만 적용되어 기본 통화 상점에는 따라갈 값 자체가 없다. 적립은 기본 통화 원장에 정수로 확정 기록되는 값이라 성격이 다르므로 마일리지 통화별 규칙에 신설했다. - earn_rounding_unit(1/10/100) + earn_rounding_method(floor/round/ceil) - 기본값은 종전 하드코딩과 정확히 같은 금액을 산출 — 기존 쇼핑몰 적립액 무변화 - 주문 계산·옵션 분할·부분취소 안분 전 경로에 동일 기준 적용 - 주문 시점 값을 스냅샷으로 보관 — 이후 기준을 바꿔도 과거 주문이 소급 변경되지 않는다 - 설정 UI·검증·다국어(ko/en/ja)·API 문서 동반, 기존 사이트는 업그레이드 스텝이 명시 기입 함께 처리: 마일리지 내역 목록 테스트가 첫 컬럼 field 를 `no` 로 단언해 실패하던 것을 현재 레이아웃 값(`number`)에 맞춰 정정했다. 이 브랜치와 무관한 stale 케이스다.
35 lines
2.0 KiB
PHP
35 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace Modules\Sirsoft\Ecommerce\Upgrades;
|
|
|
|
use App\Extension\AbstractUpgradeStep;
|
|
|
|
/**
|
|
* Ecommerce 모듈 1.0.5 업그레이드 스텝
|
|
*
|
|
* 1. 카테고리 계층의 순환 참조를 절단하고 path 를 전면 재구축한다.
|
|
* 순환이 남아 있으면 카테고리 수정·순서 변경 요청이 path 재계산 재귀에서 종료되지 않아
|
|
* 실패하고, 해당 노드가 트리에서 사라져 관리자 화면으로 복구할 수 없다.
|
|
* 2. 주문 부가세(total_vat_amount)를 백필한다.
|
|
* 쓰기 지점이 부분취소 재계산 1곳뿐이라 부분취소를 겪은 주문만 값이 정상화되고
|
|
* 나머지는 영구 0 이었다. 0 인 주문만 채우고 이미 정상화된 값은 건드리지 않는다.
|
|
*
|
|
* 함께 목록 조회 성능용 인덱스를 기존 사이트에 반영한다 — 상품 리뷰 정렬 인덱스(02)와
|
|
* 주문 목록 "발송일" 정렬용 복합 인덱스(04). 마이그레이션만 추가하면 신규 설치에만
|
|
* 반영되므로 업그레이드 시점에 동일 인덱스를 적용한다. 데이터가 많은 쇼핑몰에서는
|
|
* ALTER TABLE 이 수 분 걸리며 그동안 해당 테이블 쓰기가 대기한다.
|
|
*
|
|
* 3. 주문에 보관된 배송정책 스냅샷을 리스트+메타 구조로 정규화한다.
|
|
* 항목 목록과 배송지 메타를 한 배열에 섞어 담아 json_encode 가 리스트가 아닌 객체로
|
|
* 직렬화했고, 배열을 전제한 주문 상세 화면에서 배송정책 줄이 통째로 사라졌다.
|
|
*
|
|
* 4. 마일리지 통화별 규칙에 적립 절사 기준을 명시 기입한다.
|
|
* 값이 없으면 종전 동작(1점 버림)으로 폴백하므로 금액은 달라지지 않지만, 명시해 두지
|
|
* 않으면 이후 폴백 기본값이 바뀔 때 기존 사이트의 적립 절사가 조용히 따라 바뀐다.
|
|
*
|
|
* 모든 비즈니스 로직은 data/1.0.5/migrations/ 로 격리(AbstractUpgradeStep 규약).
|
|
*
|
|
* @upgrade-path A
|
|
*/
|
|
class Upgrade_1_0_5 extends AbstractUpgradeStep {}
|