一键导入
spotiarr-bullmq
Trigger: BullMQ, queue, worker, job, cron, async job, enqueue. BullMQ patterns for spotiarr: real queue names, worker factory, job config, gotchas.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Trigger: BullMQ, queue, worker, job, cron, async job, enqueue. BullMQ patterns for spotiarr: real queue names, worker factory, job config, gotchas.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Trigger: Docker, docker-compose, deploy, container, volume, DOWNLOADS_DIR, PUID, PGID, update, self-hosted. spotiarr Docker setup: services, volumes, env vars, update flow.
Trigger: Zustand, store, client state, usePlayerStore, usePreferencesStore, playerUISlice, ephemeral state, persist middleware. spotiarr Zustand rules: 2 stores + player UI slice, server state stays in TanStack Query, patterns for selectors and bulk hooks.
Trigger: command, validate, PR, branch, run lint, run build, secrets. Correct pnpm commands, branch naming, PR checklist, and secrets rules for spotiarr.
Trigger: architecture, layer, placement, where does X go, new feature, repo structure. spotiarr layer rules: backend DDD-lite, frontend hooks/store/views.
Trigger: i18n, translation, i18next, language, locale, new language, translate. spotiarr frontend i18n: key conventions, useLanguageSync override, adding languages.
Trigger: SSE, server-sent events, real-time, useServerEvents, live updates, EventSource. spotiarr SSE pattern: frontend EventSource hook, backend AppEventBus, 4 event types.
| name | spotiarr-bullmq |
| description | Trigger: BullMQ, queue, worker, job, cron, async job, enqueue. BullMQ patterns for spotiarr: real queue names, worker factory, job config, gotchas. |
| license | Apache-2.0 |
| metadata | {"author":"gentleman-programming","version":"2.0"} |
Load when defining queues, writing workers, enqueueing jobs, or configuring cron jobs in apps/backend/.
infrastructure/setup/queues.ts. Accessing before init throws AppError(500).application/ layer via domain service interface — never directly from presentation/.infrastructure/workers/ (one file per worker, factory function pattern — not classes).infrastructure/jobs/. No locking mechanism — prevent overlapping at implementation level.job.data arrives unvalidated — Zod-parse at worker entry."track-download-processor"; // getTrackDownloadQueue()
"track-search-processor"; // getTrackSearchQueue()
"feed-sync-queue"; // getFeedSyncQueue()
"catalog-sync-queue"; // getCatalogSyncQueue()
| Job type | Config |
|---|---|
| Download | attempts: 3, exponential backoff delay: 5000ms, removeOnComplete: true |
| Search | attempts: 1 (no retry) |
| Job IDs | ${type}-${entityId} for dedup; ${type}-${entityId}-${Date.now()} for downloads |
Worker events to handle: completed (log) · drained (trigger SSE events / library scan) · failed (update entity status → Error, emit SSE).
Date.now() suffix.apps/backend/src/infrastructure/setup/queues.tsapps/backend/src/infrastructure/workers/apps/backend/src/infrastructure/jobs/