feat: add Stalker products functionality with filtering, pagination, and purge option
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user