Files
dcalc/backend/README.md
T
2026-11-04 15:35:15 +08:00

66 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# dcalc backend
## Run
```bash
uv sync
python main.py
```
## Test
```bash
uv run pytest -v
```
## Quality
```bash
uv run ruff check .
```
## Runtime Entry
- `main.py`: FastAPI application and uvicorn entry.
- `api/routes/calc.py`: `/api/calc` HTTP route.
- `services/calc_service.py`: calculation orchestration.
- `core/basic/character/`: character calculation implementation.
- `core/basic/equipment.py`: equipment data models and compatibility access.
- `core/basic/equipment_registry.py`: equipment version registry and cache.
- `database/connect.py`: SQLite and Redis connections.
## Gold Cache and Notifications
- Application startup checks both realtime and official gold caches, then checks
them at wall-clock minute boundaries. Each half-hour batch starts 5 minutes
early: 01:25 collects the 01:30 batch, 01:55 collects the 02:00 batch, without
HTTP traffic. All regions in a refresh share the batch timestamp selected at
the start, even if the work crosses a half-hour boundary. Existing public
`updataTime` types remain number for realtime and string for official.
Redis locks prevent duplicate work across workers. Realtime region pages stay
8 seconds apart. Failures retain the last successful data for up to 24 hours.
- Realtime uses the arithmetic mean of displayed unit prices from rows 4–10
(`i.item1`, slice `[3:10]`), in 元/万金币, rounded to 2 decimals. This replaces
the earlier 万金币/元 average and uses a new Redis namespace so old units are
never returned as new prices. No BeautifulSoup or browser dependency is added.
- Official authentication uses `HELPER_TOKEN` and `HELPER_ID`. Authentication
failures (`returnCode=-30003`, explicit token-expiry messages or HTTP 401) can
notify via Bark. Network errors do not trigger token-expiry notifications.
- Set optional `BARK_URL` in `config/.env`, `.env.dev`, `.env.prod` or the process
environment to your full Bark push URL, including its device key. There is no
default destination; unset/blank means no Bark request. Restart after changing
credentials. A successful alert is deduplicated per token for 24 hours; a new
token permits a new alert. Failed pushes remain retryable. No credentials are
included in notification text or logged push errors.
- Official gold responses also contain `max` and `min`: the largest/smallest
values of `10000 / price` across both rank arrays, in 万金币 per 100点券,
rounded to 2 decimals. Nonpositive/invalid prices are excluded; absent valid
quotes yield `null`. Rank arrays retain their 点券 per 100万金币 unit and are
also rounded to 2 decimals. JSON numbers do not force trailing zeroes.
## Compatibility Rules
- Do not change `/calc` request and response contract without frontend migration approval.
- Do not change frontendNew result data shape during backend refactors.
- Keep Skill and Forge business formulas behavior-compatible unless a dedicated formula task says otherwise.