Skip to content

Phase 7d: Print API + QR Print Tab + Hangar Plugin (foundation MVP) #80

@strausmann

Description

@strausmann

Master tracking for Phase 7d implementation. Spec under review in the PR for branch `docs/phase-7d-foundation-spec`.

Scope (per spec)

Backend

  • POST /api/preview + POST /api/print with γ-hybrid PrintItem schema (name/subtitle/qr_url/image_url/copies/extras)
  • Tape-match logic with force-override + audit flag
  • Multi-item × copies → N Job rows
  • Alembic migration: Job table gains `api_key_id`, `source_ip`, `tape_match_override`, `plugin`, `plugin_item_id`

Plugin protocol

  • IntegrationPlugin.search(query, limit) → list[PluginItemSummary]
  • IntegrationPlugin.get_item(item_id) → PluginItem
  • Optional HasChildren.get_children(item_id) → list[PluginItemSummary]

Plugins

  • Grocy, SnipeIt, Spoolman: gain search() + get_item()
  • Hangar: new plugin module `backend/app/integrations/hangar/` with all 3 methods + httpx client

Frontend

  • New HTMX route `/qr-print` with platform-toggle, search-debounce, results-list, select-form
  • Per-item copies input
  • Children-toggle for hierarchical items
  • Live preview with red/green tape-match border + tape badge top-right
  • Print-button → toast with job IDs

Dependencies

Out-of-scope (Phase 7e+)

  • Aggregations templates (one big label for whole shelf)
  • Per-plugin search filters
  • Saved searches/favourites
  • Plugin config via UI
  • Multi-printer fan-out
  • Image rendering on labels (renderer falls back to QR-only for now)

Acceptance criteria

See spec Section 13 "Definition of Done for Phase 7d".

Refs #22

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions