feat: poll pricing jobs in worker
Quality / test (push) Canceled after 0s

This commit is contained in:
2026-09-09 12:45:48 -04:00
parent 72346130ed
commit bab4efc6ad
2 changed files with 23 additions and 1 deletions
+22
View File
@@ -8,7 +8,12 @@ import { createLocalImageStorage, resolveProjectImageStorageRoot } from '../../a
import { createImageDerivativeProcessor } from '../../api/src/infrastructure/images/image-derivative-processor.js';
import { createSharpImageRenderer } from '../../api/src/infrastructure/images/sharp-image-renderer.js';
import { createImageDerivativeJobRepository } from '../../api/src/modules/inventory/repositories/image-derivative-job-repository.js';
import { createPricingRepository } from '../../api/src/modules/pricing/repositories/pricing-repository.js';
import { createPricingRefreshJobRepository } from '../../api/src/modules/pricing/repositories/pricing-refresh-job-repository.js';
import { createPricingService } from '../../api/src/modules/pricing/services/pricing-service.js';
import { createPricingProviderRegistry } from '../../api/src/modules/pricing/providers/pricing-provider.js';
import { processNextPersistentImageDerivativeJob } from './image-derivative-worker.js';
import { processNextPersistentPricingRefreshJob, runPricingRefreshJob } from './pricing-refresh-worker.js';
const pollIntervalMs = Number.parseInt(process.env.WORKER_POLL_INTERVAL_MS ?? '2000', 10);
@@ -17,6 +22,12 @@ async function runWorker() {
const database = createDatabase();
const imageStorage = createLocalImageStorage(imageStorageRoot);
const jobRepository = createImageDerivativeJobRepository(database.db);
const pricingRefreshJobRepository = createPricingRefreshJobRepository(database.db);
const pricingProviderRegistry = createPricingProviderRegistry();
const pricingService = createPricingService({
pricingRepository: createPricingRepository(database.db),
pricingProviderRegistry,
});
const processor = createImageDerivativeProcessor({
imageStorage,
renderer: createSharpImageRenderer(),
@@ -32,6 +43,17 @@ async function runWorker() {
});
if (result) console.log(`Image derivative job ${result.id} ${result.status.toLowerCase()}.`);
const pricingResult = await processNextPersistentPricingRefreshJob({
jobRepository: pricingRefreshJobRepository,
pricingRefreshJob: (job) => runPricingRefreshJob({
job,
providerRegistry: pricingProviderRegistry,
pricingService,
}),
});
if (pricingResult) console.log(`Pricing refresh job ${pricingResult.id} ${pricingResult.status.toLowerCase()}.`);
}
await processOne();
+1 -1
View File
@@ -149,7 +149,7 @@ Work through one bounded vertical slice at a time. The linked documentation rema
- No initial User/Seller is provisioned in the development database yet. Run `npm run provision:admin` after setting its required local `.env` variables.
- Listings are partially implemented: draft creation, seller-scoped reads, publication gating, lifecycle writes, archive behavior, sold/archived inventory checks, and item-owned image metadata are complete; storage-backed processing remains.
- Concrete provider adapters, asynchronous pricing refresh transport, richer exports/settings, full integration CI services, and deployment/backup automation remain incomplete to varying degrees.
- The pricing refresh worker now has durable PostgreSQL refresh jobs with row-locked claim, completed/failed persistence, and provider observations routed through the pricing service; configured external providers remain deployment work.
- The pricing refresh worker now claims durable PostgreSQL jobs with row locking, persists completed/failed outcomes, and routes provider observations through the pricing service; configured external providers remain deployment work.
- Pricing refresh requests now enqueue seller-scoped jobs and expose a safe `GET /api/v1/admin/jobs/:id` polling contract instead of doing provider work inline.
- `npm install` currently reports dependency audit findings. Review and remediate them before production deployment; do not use `npm audit fix --force` without reviewing its changes.