feat: add Stalker products functionality with filtering, pagination, and purge option

This commit is contained in:
Victor Noguera
2026-05-19 19:37:05 -04:00
parent aed0c11017
commit f6178a665c
6 changed files with 444 additions and 20 deletions

View File

@@ -338,6 +338,7 @@ export async function runStalker(args: StalkerArgs): Promise<StalkerRunStats> {
if (args.sellability && !args.dryRun) {
await enrichInventorySellability(result, stats);
}
applyInventoryPersistencePolicy(result, args.sellability && !args.dryRun);
if (!args.dryRun && runId != null) {
persistAsinResult(database, runId, result);
@@ -457,6 +458,22 @@ async function scanAsin(
};
}
function applyInventoryPersistencePolicy(
result: StalkerAsinResult,
requireAvailableSellability: boolean,
): void {
for (const { seller } of result.matchedSellers) {
seller.storefrontItems = seller.storefrontItems.filter((item) => {
if (!requireAvailableSellability) return false;
return (
item.sellability?.canSell === true &&
item.sellability.sellabilityStatus === "available"
);
});
seller.storefrontAsins = seller.storefrontItems.map((item) => item.asin);
}
}
async function enrichInventorySellability(
result: StalkerAsinResult,
stats: StalkerRunStats,
@@ -833,6 +850,13 @@ function upsertSellerInventory(
);
for (const item of seller.storefrontItems) {
if (
item.sellability?.canSell !== true ||
item.sellability.sellabilityStatus !== "available"
) {
continue;
}
insert.run(
runId,
seller.sellerId,