70 lines
2.7 KiB
Markdown
70 lines
2.7 KiB
Markdown
---
|
|
phase: 01
|
|
plan: 01
|
|
subsystem: admin
|
|
tags: [lottery, missing-number, backend]
|
|
dependency_graph:
|
|
requires: []
|
|
provides: [missingNum endpoint, getMissingNumbers model method, i18n keys]
|
|
affects: [application/admin/model/History.php, application/admin/controller/History.php, application/admin/lang/zh-cn/history.php]
|
|
tech-stack:
|
|
added: []
|
|
patterns: [FastAdmin Backend controller, ThinkPHP 5.x Model, Db facade]
|
|
key-files:
|
|
created:
|
|
- application/admin/model/History.php
|
|
- application/admin/controller/History.php
|
|
- application/admin/lang/zh-cn/history.php
|
|
modified: []
|
|
decisions:
|
|
- Used $noNeedRight = ['missingNum'] instead of ['*'] for minimal permission bypass
|
|
- Model queries up to 500 historical records for true omission count calculation
|
|
- Color fallback uses '—' string when fa_num table has no mapping for a number
|
|
metrics:
|
|
duration: ~5min
|
|
completed: "2026-04-21"
|
|
---
|
|
|
|
# Phase 01 Plan 01: Backend Missing Number Logic Summary
|
|
|
|
Backend missing number calculation logic and AJAX endpoint — History model with `getMissingNumbers()` + `calcOmitCount()` methods, History controller with `missingNum()` endpoint, and i18n language keys for the missing number feature.
|
|
|
|
## Tasks Completed
|
|
|
|
| # | Task | Commit | Files |
|
|
|---|------|--------|-------|
|
|
| 1 | Add getMissingNumbers() and calcOmitCount() to History model | 6386a40 | application/admin/model/History.php |
|
|
| 2 | Add missingNum() AJAX endpoint to History controller | 15bb870 | application/admin/controller/History.php |
|
|
| 3 | Add i18n text keys to language file | 96d5e78 | application/admin/lang/zh-cn/history.php |
|
|
|
|
## One-liner
|
|
|
|
History model `getMissingNumbers()` computes missing lottery numbers (1-49) with true omission counts from up to 500 historical records, controller `missingNum()` validates periods (1-100) and returns JSON, i18n file provides Chinese translations.
|
|
|
|
## Key Decisions
|
|
|
|
- **$noNeedRight minimal scope**: Only `missingNum` method is exempted from permission checks (not `['*']`), following least-privilege principle.
|
|
- **500-record limit for omission calculation**: Queries up to 500 historical records to calculate true omission counts (last appearance distance), not just "appeared/not appeared" in the query window.
|
|
- **Color fallback**: Returns `'—'` when fa_num table lacks a wave color mapping for a given number.
|
|
|
|
## Deviations from Plan
|
|
|
|
None - plan executed exactly as written.
|
|
|
|
## Known Stubs
|
|
|
|
None.
|
|
|
|
## Threat Flags
|
|
|
|
None beyond what was identified in the plan's threat model (T-01-01 through T-01-04).
|
|
|
|
## Self-Check
|
|
|
|
- Model file exists with both methods: PASS
|
|
- Controller file exists with missingNum endpoint: PASS
|
|
- Lang file exists with all i18n keys: PASS
|
|
- All 3 commits present in git log: PASS
|
|
|
|
## Self-Check: PASSED
|