Commit Graph
123 Commits
Author SHA1 Message Date
openhands 8638e81444 refactor(db): typed query helpers, shared test FormData helper
Replace raw db.execute tuple casts with queryRows/rowsFrom/execResult/
affectedRows helpers from lib/db, drop redundant mysql2 casts on typed
query builders, and centralize per-test fakeForm into test/fake-form.
Update db mocks in tests so helpers resolve against mocked execute.
2026-09-17 21:02:57 +02:00
openhands 5b4b275b2a feat(housekeeping): add per-hotel theme manager with import/export and background
Theme Manager under /admin-next/hotel/theme-manager lets the owner save, apply, rename, delete, import, and export custom themes, plus set a custom site background by URL or upload. Themes are stored in WebsiteSetting/custom_themes JSON so they survive CMS updates.
2026-09-16 19:45:57 +02:00
openhands 438277a17a feat(studio): expand nitro cleanup with repair, auto-clean, and orphaned assets
Scan distinguishes fake, broken, and orphaned SWF/icon assets with age
metadata, deletes per asset kind, re-downloads broken nitro bundles from
configured sources, auto-cleans old fake leftovers, and exports a JSON
manifest. Adds rebuild and auto-clean API endpoints with audit coverage
and a housekeeping preview route under the hotel domain.

Verified: full vitest suite (2213 tests), typecheck, and biome all pass.
2026-09-15 21:59:21 +02:00
openhands ea4fd375b4 test(housekeeping): cover nitro cleanup page in migration matrix 2026-09-15 21:32:14 +02:00
openhands 1bbd809b43 Replace standalone catalog editor with the unified Visual Catalog studio
Make /admin/catalog a full-screen catalog studio that replaces the old
listing plus separate [id]/builder-club detail pages:

- Embed CatalogManagerWorkspace on /admin/catalog with a Normal/Builder
  Club toggle, Catalog Sync status, packages (normal), Organize imports
  and a diagnostics link to /admin/studio/maintenance.
- Manage BC items directly in the studio Items tab (new BcItemsEditor,
  CRUD via existing bc actions; /api/admin/catalog/items now serves BC).
- Inline editor: add pageTextTeaser field for both catalogs and remove
  the legacy full-editor links.
- Remove the 'Open full editor' context action from the tree.
- Move catalog-items-table (dir + barrel) and catalog-translate-tab out
  of the app route into src/components/admin/catalog and update all
  importers.
- Keep /admin/catalog/[id], builder-club/[id] and /admin/catalog/maintenance
  as redirects into the new studio; consolidate maintenance panels into
  /admin/studio/maintenance and point the nav item there.
- Delete the old listing/table/tabs/forms and the standalone bc-manager.
2026-09-14 17:20:52 +02:00
Simo 60e49c1ec9 feat(hk): connect delivery failures to precise diagnostic records 2026-09-13 20:25:03 +02:00
Simo c5c9941768 feat(hk): explain background updates with protected content links and retry details 2026-09-13 19:41:25 +02:00
Simo 52f6d1491f fix(news): persist publication requests and retry cache delivery 2026-09-13 18:33:45 +02:00
Simo 13665e0c3c feat(catalog): persist idempotent bulk operations and retryable deliveries 2026-09-13 18:05:03 +02:00
Simo 1eee6661f9 feat(notifications): add account-scoped inbox and persistent preferences 2026-09-13 17:59:22 +02:00
Simo a320e47c29 feat(catalog): verify deterministic release manifests before Git export 2026-09-13 17:48:23 +02:00
openhands 2920669362 feat: add CSV/JSON export, advanced bulk filters & selection to Catalog Manager
- Admin Audit Log: CSV/JSON export via ?format=query param
- Catalog Manager: club_only / have_offer filters (multi-filter support)
- Offer discovery: refactored discoverOffers() to accept filters object
- Translations added for new filter labels
- Test updates for all modified paths
2026-09-12 20:53:51 +02:00
openhands 388d8992f8 feat: add CSV/JSON export, advanced bulk filters & selection to Catalog Manager
- Admin Audit Log: CSV/JSON export via ?format=query param
- Catalog Manager: club_only / have_offer filters (multi-filter support)
- Offer discovery: refactored discoverOffers() to accept filters object
- Translations added for new filter labels
- Test updates for all modified paths
2026-09-12 20:40:33 +02:00
openhands e47bee16bb feat(studio): add visual layout previews, automated unit tests and polish organize imports 2026-09-11 23:41:23 +02:00
openhands eb3dc4e88c feat(studio): add batch actions, group search filter and smart unit category rules 2026-09-11 23:35:13 +02:00
openhands 01a85ebcd0 feat(studio): add organize-imports tool with suggestion review and approval
Adds a Studio 'Organize imports' dialog that groups recently imported
furniture and furniture already sitting in the auto-created import
pages into suggested catalog categories.  Each group is presented with
its suggested name, icon, and layout which can be overridden before
approval; approved groups are turned into real catalog pages in a
single atomic export run.  Offers already inside the import subtree are
moved to the new pages; brand-new furniture gets a fresh offer.

- groupSuggestedCategories: generic pure helper reusing the same
  per-item label heuristic that drives suggestCategoryName; items with
  no label land in a 'Other Furni' remainder bucket
- GET /api/admin/import/organize: returns items from the imported
  furniture tree (catalog_items JOIN items_base via page id set from
  the imported-furniture root) union audit-logged but not-yet-placed
  recent imports; marks alreadyPlaced vs new
- organizeImportFurni server action: validates import-page membership
  before moving any offer, creates pages + inserts/moves items in one
  withCatalogExport snapshot, logs activity
- OrganizeImportsDialog: full-featured Studio dialog with price panel
  (applies to new offers only), parent select, per-group approval,
  editable name/icon/layout with suggestion reset chips, source tags
- import-pages.ts server helper: locates the imported-furniture tree
- Studio nav: 'Organize imports' button with FolderTree icon,
  gated on CATALOG_EDIT, wired next to the catalog manager
- en + nl translations for organizeImports.* keys with ICU plurals
- groupSuggestedCategories unit tests (deterministic grouping,
  remainder handling, size+alpha ordering, label consistency)
2026-09-11 19:38:18 +02:00
openhands f832479e52 feat(catalog): add auto-category wizard with live preview and smart suggestions
- Add AutoCategoryDialog: pick furni (or empty page), suggest caption/icon/layout, live preview
- Add createAutoCategory server action (page + offers in one export) with CatalogKind
- Extend furni search API with interactionType
- Share ShopTile and refactor inline-editor/items-shop-preview to use it
- Add suggestion heuristics (suggestCategoryName/dIcon/layout) with tests
- Add autoCategory translations (en/nl)
2026-09-11 18:47:31 +02:00
Simo c5a2b44807 feat(catalog): undo bulk offer edits with guarded history restoration 2026-09-11 10:47:46 +02:00
Simo 00e33623f7 feat(devops): diagnose slow HK requests and dependency timings 2026-09-11 09:48:19 +02:00
Simo a2954e4408 feat(diagnostics): correlate staff operations errors and audit records 2026-09-11 00:34:49 +02:00
openhands acbe54fcb7 style: apply biome lint fixes to catalog files and live repair tests 2026-09-10 11:32:20 +02:00
openhands 3e69b72513 feat(catalog): prevent and repair Arcturus emulator data errors
Block invalid catalog_items writes at the API level (points currency
allowlist, non-negative prices, positive amount, limited stack >= sold
count, unique sibling order numbers) and auto-assign unique order numbers
on bulk create. Add a catalog-maintenance scan + transactional repair that
fixes pre-existing rows: resets unsupported points_type, clamps negative
costs, sets amount to 1, raises limited_stack, renumbers duplicate orders
and deletes offers with missing page/item references. Surface the issue
count and a fix button in the admin maintenance panel.

Also: add enabled/retired flag to clone sources, classify poster and
currency furniture in item-kind, and remove the obsolete update-Nitrov3.sh.
2026-09-10 11:29:28 +02:00
Simo 1ef405be0a feat(cms): add recovery history and operational reliability tools 2026-09-09 21:57:56 +02:00
Simo 047cd9f3dd feat(catalog): add saved packages, preview and bulk price editing 2026-09-09 20:04:10 +02:00
Simo c389c3893d feat(cms): improve catalog, editorial recovery and operations 2026-09-09 19:36:15 +02:00
Simo 93a7e9a7c2 feat(catalog): improve visual manager search and offer discovery 2026-09-06 20:58:53 +02:00
Simo 55a47949f1 feat(catalog): add reviewed bulk edits and complete category duplication 2026-09-06 20:25:19 +02:00
Simo 0bedc04692 fix(catalog): open visual manager from dedicated button 2026-09-06 19:58:10 +02:00
Simo 193b6686a9 refactor(catalog): unify commands and embed guarded catalog workspace 2026-09-06 19:40:52 +02:00
Simo 667637f8da refactor(admin): remove legacy menu editor 2026-09-05 20:08:19 +02:00
Simo 816e3875c2 feat(admin): add production error center and refresh CMS dependencies 2026-09-05 19:53:09 +02:00
Simo 9af1e62655 feat: allow rank-gated housekeeping preview in production 2026-08-31 20:29:38 +02:00
openhands 3efd6c90f0 fix: use valid AuditState values for theme-builder migration entry 2026-08-31 17:22:19 +02:00
openhands 4c8225720a fix: resolve test failures for theme builder integration
- Replace hardcoded text-white and text-red-* with CSS variables in theme-editor
- Add theme-builder migration entry to housekeeping matrix
- Update legacy page counts from 137 to 138 in housekeeping tests
- Add /admin/theme-builder to content test prefixes
2026-08-31 17:21:37 +02:00
Simo b1ddda66ff Revert "Merge pull request 'Complete Housekeeping migration and /ase cutover' (#52) from codex/housekeeping-complete into main"
This reverts commit 488b6e57c4, reversing
changes made to b506b4499a.
2026-08-30 21:31:34 +02:00
Simo 4d0c8c7e65 test(housekeeping): finalize release evidence 2026-08-30 21:06:40 +02:00
Simo 222535e116 fix(housekeeping): close final authorization gaps 2026-08-30 21:01:32 +02:00
Simo 2b8f73a91d feat(housekeeping): cut over administration to ase 2026-08-30 20:35:22 +02:00
Simo 65a62867db style: complete cumulative biome checks 2026-08-30 19:44:05 +02:00
Simo 1ae59bcc1a fix(housekeeping): preserve runtime import boundaries 2026-08-30 19:40:57 +02:00
Simo b9c47aa89a style: satisfy cumulative biome checks 2026-08-30 19:38:36 +02:00
Simo cb77b2d3b9 fix(housekeeping): serialize workspace client props 2026-08-30 19:38:19 +02:00
Simo 8a31556d51 test(housekeeping): prove 137 route parity 2026-08-30 19:11:14 +02:00
Simo a113e48880 feat(housekeeping): finish accessible command deck 2026-08-30 18:49:10 +02:00
Simo 85ad0452d3 feat(housekeeping): compose operations workspace 2026-08-30 17:23:55 +02:00
Simo 5574e601bb feat(housekeeping): personalize command deck 2026-08-30 16:55:10 +02:00
Simo 300ac0ef95 feat(housekeeping): compose operational inbox 2026-08-30 16:26:20 +02:00
Simo bcb0ca977f feat(housekeeping): add global command deck search 2026-08-30 15:59:48 +02:00
Simo 2e95a106e0 feat(housekeeping): integrate studio operations 2026-08-30 15:29:58 +02:00
Simo 020c06f172 fix(housekeeping): connect hotel asset ownership 2026-08-30 14:43:50 +02:00