- Rename product-discovery.ts to product-discovery-curl.ts (axios-based) - Rename payload-fetch.ts to payload-fetch-curl.ts - Add product-discovery-http.ts (Puppeteer browser-based handler) - Add method field to CreateTaskParams for transport selection - Update task-service to insert method column on task creation - Update task-worker with getHandlerForTask() for dual transport routing - product_refresh now queues upstream tasks when no payload exists: - Has platform_dispensary_id → queues product_discovery (http) - No platform_dispensary_id → queues entry_point_discovery This enables HTTP workers to pick up browser-based tasks while curl workers handle axios-based tasks, and prevents product_refresh from failing repeatedly when no crawl has been performed. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
/**
|
|
* Product Discovery Handler
|
|
*
|
|
* Per TASK_WORKFLOW_2024-12-10.md: Initial product fetch for newly discovered stores.
|
|
*
|
|
* Flow:
|
|
* 1. Triggered after store_discovery promotes a new dispensary
|
|
* 2. Chains to payload_fetch to get initial product data
|
|
* 3. payload_fetch chains to product_refresh for DB upsert
|
|
*
|
|
* Chaining:
|
|
* store_discovery → (newStoreIds) → product_discovery → payload_fetch → product_refresh
|
|
*/
|
|
|
|
import { TaskContext, TaskResult } from '../task-worker';
|
|
import { handlePayloadFetch } from './payload-fetch-curl';
|
|
|
|
export async function handleProductDiscovery(ctx: TaskContext): Promise<TaskResult> {
|
|
const { task } = ctx;
|
|
const dispensaryId = task.dispensary_id;
|
|
|
|
if (!dispensaryId) {
|
|
return { success: false, error: 'No dispensary_id provided' };
|
|
}
|
|
|
|
console.log(`[ProductDiscovery] Starting initial product discovery for dispensary ${dispensaryId}`);
|
|
|
|
// Per TASK_WORKFLOW_2024-12-10.md: Chain to payload_fetch for API → disk
|
|
// payload_fetch will then chain to product_refresh for disk → DB
|
|
return handlePayloadFetch(ctx);
|
|
}
|