docs: design manual recent furni resync
This commit is contained in:
1 parent
ab43f5d63c
commit
6b6fc5dc64
1 file changed
+70
@@ -0,0 +1,70 @@
|
|||||||
|
# Manual Recent Furni Resync Design
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
|
||||||
|
Add a safe manual command to the existing Admin Import Furni screen for
|
||||||
|
refreshing furniture imported during the last seven days. The command must
|
||||||
|
update the live FurnitureData metadata and emulator caches without deleting
|
||||||
|
database rows or regenerating existing asset bundles.
|
||||||
|
|
||||||
|
## User interface
|
||||||
|
|
||||||
|
Add `Update imported furni` to the existing `Tools` dropdown on
|
||||||
|
`/admin/import/furni`.
|
||||||
|
|
||||||
|
Selecting it opens a confirmation dialog that states the fixed scope: furniture
|
||||||
|
recorded by the admin audit log as imported during the last seven days. While
|
||||||
|
the operation is running, the action and confirmation button are disabled and a
|
||||||
|
loading state is shown to prevent duplicate requests.
|
||||||
|
|
||||||
|
After completion, show a result panel containing:
|
||||||
|
|
||||||
|
- examined item count;
|
||||||
|
- successfully resynced item count;
|
||||||
|
- failed item count;
|
||||||
|
- emulator RCON refresh status;
|
||||||
|
- returned per-item errors, when present.
|
||||||
|
|
||||||
|
## Data flow
|
||||||
|
|
||||||
|
The client sends an authenticated, CSRF-protected `POST` request through
|
||||||
|
`adminFetch` to the existing endpoint:
|
||||||
|
|
||||||
|
`/api/admin/import/furni/resync?days=7`
|
||||||
|
|
||||||
|
The endpoint remains authoritative for selecting the targets. It reads only
|
||||||
|
`ItemsBase` IDs referenced by `admin_audit_log` entries whose action is
|
||||||
|
`furni_import`, target is `ItemsBase`, and timestamp falls within the last seven
|
||||||
|
days.
|
||||||
|
|
||||||
|
For each target, the existing resync logic rebuilds its FurnitureData entry,
|
||||||
|
enriches it from the configured `habbo_gamedata_hotel`, and upserts it into the
|
||||||
|
live `FurnitureData.json`. It then requests `updateCatalog` and `updateItems`
|
||||||
|
through RCON.
|
||||||
|
|
||||||
|
## Safety and permissions
|
||||||
|
|
||||||
|
- Reuse the endpoint's `ASSETS_IMPORT` permission check and admin CSRF guard.
|
||||||
|
- Do not expose a UI option for `all=1`.
|
||||||
|
- Do not delete or recreate `items_base` or catalog rows.
|
||||||
|
- Do not regenerate `.nitro`, SWF, or icon files.
|
||||||
|
- Keep returned errors visible without treating an RCON failure as a successful
|
||||||
|
refresh.
|
||||||
|
|
||||||
|
## Error handling
|
||||||
|
|
||||||
|
Network or non-JSON failures produce an error toast and leave the command
|
||||||
|
available for retry. A successful API response is rendered even when individual
|
||||||
|
items failed, so the administrator can distinguish partial completion from a
|
||||||
|
request failure.
|
||||||
|
|
||||||
|
The result panel is dismissible. Running the command again replaces the prior
|
||||||
|
result.
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Unit-test the result normalization used by the UI, including partial failures
|
||||||
|
and RCON status.
|
||||||
|
- Verify that the client calls exactly `resync?days=7` through `adminFetch`.
|
||||||
|
- Run focused tests, Biome, TypeScript, the full test suite, and a production
|
||||||
|
build.
|
||||||
Reference in new issue
Block a user