53 lines
2.2 KiB
Markdown
53 lines
2.2 KiB
Markdown
# Walkthrough: Standardize Points Ratio
|
|
|
|
## 1. Goal
|
|
Standardize the Points-to-Yuan ratio to **1 Yuan = 1 Point**, and remove the decimal display logic (previous 100 Points = 1 Yuan) across the system.
|
|
|
|
## 2. Changes
|
|
|
|
### Backend (`bindbox_game`)
|
|
- **Core Logic (`internal/pkg/points/convert.go`)**:
|
|
- Updated `CentsToPoints` to `(cents * rate) / 100`.
|
|
- Updated `PointsToCents` to `(points * 100) / rate`.
|
|
- Added unit tests to verify 100 Cents = 1 Point.
|
|
- **Service Layer (`internal/service/user`)**:
|
|
- Updated `points_convert.go` to use `points_exchange_rate` config key.
|
|
- Added `PointsToCents` method for reverse calculation.
|
|
- Updated `lottery_app.go` to use `PointsToCents` for accurate deduction calculation.
|
|
- **DB Config**:
|
|
- Expects `points_exchange_rate` (default 1) instead of `points_exchange_per_cent`.
|
|
|
|
### Admin Frontend (`web/admin`)
|
|
- **System Configs**:
|
|
- Added "Points Configuration" section.
|
|
- Allows setting "1 Yuan = N Points" (Default 1).
|
|
|
|
### Mini-Program Frontend Display Logic
|
|
- **Goal**: Ensure Points are displayed as integers and values are consistent.
|
|
- **Files Modified**:
|
|
- `pages-user/points/index.vue`
|
|
- `pages-user/orders/detail.vue`
|
|
- `pages-user/tasks/index.vue`
|
|
- `pages/shop/index.vue` (Fixed `/ 100` division for points)
|
|
- `pages-shop/shop/detail.vue` (Fixed `/ 100` division for points)
|
|
- **Changes**:
|
|
- Removed incorrect `/ 100` division for Points display while keeping it for Money (Yuan) display.
|
|
- formated points to use `.toFixed(0)` to remove decimal places.
|
|
|
|
### Database Migration
|
|
- **Script**: `docs/standardize_points_ratio/migration.sql`
|
|
- **Action Required**: Run this script to shrink existing point values by 100x to match the new 1:1 definition.
|
|
|
|
## 3. Verification
|
|
- **Unit Tests**:
|
|
- `go test internal/pkg/points/...` passed.
|
|
- **Manual Check**:
|
|
- `TestCentsToPoints` confirmed 100 Cents -> 1 Point.
|
|
- `TestRefundPointsAmount` confirmed proportional refund works with integer points.
|
|
|
|
## 4. Next Steps for User
|
|
1. **Backup Database**.
|
|
2. **Deploy Backend & Admin**.
|
|
3. **Run Migration Script** (`docs/standardize_points_ratio/migration.sql`).
|
|
4. **Deploy Mini Program**.
|