Commit Graph
7 Commits
Author SHA1 Message Date
hermes 4e675510fd Add project listing selector, confirmed revision and private 3MF renders 2026-11-08 18:49:32 +00:00
hermes e62b6800a6 Match project user FKs to legacy signed integer users.id
Deploy HickLab3D Dashboard / Deploy to production (push) Successful in 38s
Live HickLab3Dash users.id is INT, so bigint foreignId constraints
failed mid-migrate and left an empty unrecorded projects table.
2026-11-08 13:07:26 +00:00
hermes 52a477d56d Parse 3MF XML with DOMDocument so deploy CI can run
Deploy HickLab3D Dashboard / Deploy to production (push) Failing after 1m9s
The swarm runner PHP has ext-dom but not XMLReader, so the 3MF validator
crashed during Actions phpunit and blocked production rsync. DOMDocument
keeps LIBXML_NONET, disabled external entities, and DOCTYPE rejection.
2026-11-08 13:03:59 +00:00
hermes d4928789c4 Add HL3D branding, Etsy Live/Draft paging and Projects lifecycle
Deploy HickLab3D Dashboard / Deploy to production (push) Failing after 23s
Replace the old touchmark/PNG identity with the supplied lockup and
monogram, segmented role-aware navigation, Live/Draft listing filters
with generation-based cache invalidation, and admin Projects covering
immutable file revisions, listing live pointers, and exact-decimal
filament/packaging/shipping costing. Additive schema only; no Etsy
publication. Isolated clone tests: 301 tests, 1162 assertions.
2026-11-08 12:50:56 +00:00
hermes c8c5822166 [verified] Harden Etsy MCP validation and scheduled token refresh
Deploy HickLab3D Dashboard / Deploy to production (push) Successful in 38s
2026-11-07 21:54:33 +00:00
hermes 960189d14b Add settings-driven Artisan scheduler registry with Etsy sync and token refresh jobs
Introduces App\Support\DashboardSchedule (modelled on LHITS_Dashboard's
pattern) as a single settings-driven registry for recurring Artisan jobs,
replacing the two hard-coded Schedule::command() lines in
routes/console.php.

Migrated unchanged:
- integrations_refresh (integrations:refresh), every_30_seconds, withoutOverlapping(5)
- alerts_scan (alerts:scan), every_30_seconds, withoutOverlapping(5)

New:
- etsy_sync (etsy:sync), every_15_minutes - forces a fresh pull of Etsy
  receipts/listings into the existing IntegrationCache entries, decoupled
  from the bundled integrations:refresh job so it can be tuned/disabled
  independently of Parcel2Go/BamBuddy/dryer refreshes.
- etsy_token_refresh (etsy:refresh-token), every_45_minutes - proactively
  refreshes the Etsy OAuth token (tokens last ~1hr) via a new public
  Etsy::refreshAccessToken() wrapper around the existing on-demand
  accessToken() refresh logic, so the connection survives quiet periods.

Frequency is persisted to storage/app/dashboard-schedules.json (no
app_settings table exists in this app, unlike LHITS's AppSetting-backed
store) and surfaced in a new 'Scheduler' section on the existing Settings
page (ScheduleSettingsController + routes), with per-job frequency
dropdowns and manual 'Run now' buttons, matching the page's existing
Tailwind conventions.

Tests: SchedulerTest (registry/frequency behavior), ScheduleSettingsTest
(settings UI + authorization), EtsySyncScheduledJobsTest (new commands,
Http::fake only, no live Etsy calls).
2026-11-07 17:38:11 +00:00
hermes 9b13640571 Add first-party Etsy MCP server for shop listings, orders and messages
Expose php artisan etsy:mcp as JSON-RPC stdio next to laravel-boost, reuse the stored HickLab3D shop connection, create listings as drafts only, and skip Etsy v3 conversation send because that API does not exist.
2026-11-07 15:54:05 +00:00