code-simplifier 에이전트로 1회차 · Claude Code · Opus 5.5 · 생각 깊이 중간 · src/settle.mjs 77줄 · 가상 공방 정산 코드 ·
원본 파일 ·
목록code-simplifier 에이전트로 1회차
1// 공방 주문 정산 모듈
2
3const FREE_SHIP_THRESHOLD = 50000
4
5export const shipFee = (region, total) => {
6 const overThreshold = total >= FREE_SHIP_THRESHOLD
7 if (region == 'jeju') {
8 return overThreshold ? 3000 : 6000
9 }
10 return overThreshold ? 0 : 3000
11}
12
13// 회원 등급 할인율
14export const gradeRate = (grade) => {
15 if (grade == 'vip') return 0.1
16 if (grade == 'gold') return 0.05
17 if (grade == 'silver') return 0.03
18 return 0
19}
20
21export const settleOrder = (order) => {
22 let sum = 0
23 // array-like 입력도 받도록 인덱스 루프 유지
24 for (let i = 0; i < order.items.length; i++) {
25 const item = order.items[i]
26 const qty = item.qty || 1 // 수량이 없거나 0이면 1개로 본다
27 sum += Math.round(item.price * qty) // 줄마다 반올림
28 }
29
30 // couponRate가 0이어도 기본값 0.1 적용 (|| 의도적)
31 const couponRate = order.couponRate || 0.1
32 if (order.coupon && order.coupon.length > 0 && sum > 0) {
33 sum -= Math.floor(sum * couponRate)
34 }
35
36 const rate = gradeRate(order.grade)
37 if (rate > 0) {
38 sum -= Math.floor(sum * rate)
39 }
40
41 let fee = shipFee(order.region, sum)
42 // 느슨한 비교: 1, '1' 도 픽업으로 취급
43 if (order.pickup == true) {
44 fee = 0
45 }
46
47 return { goods: sum, fee: fee, total: sum + fee }
48}
49
50export const settleDay = (orders) => {
51 const out = { count: 0, goods: 0, fee: 0, total: 0, byRegion: {} }
52 for (let i = 0; i < orders.length; i++) {
53 const order = orders[i]
54 if (order.status == 'cancel') {
55 continue
56 }
57
58 const r = settleOrder(order)
59 out.count += 1
60 out.goods += r.goods
61 out.fee += r.fee
62 out.total += r.total
63
64 const key = order.region ? order.region : 'etc'
65 out.byRegion[key] = (out.byRegion[key] ?? 0) + r.total
66 }
67 return out
68}
69
70// 주문번호 묶음 키 (예: 3번 창고)
71export const binKey = (orderNo) => {
72 const n = orderNo % 10
73 if (n === 3) {
74 return 'B'
75 }
76 return n > 5 ? 'C' : 'A'
77}