Files
pokemon-inventory/packages/contracts/pricing.js
T
2026-09-10 06:46:11 -04:00

55 lines
1.8 KiB
JavaScript

function toIsoString(value) {
return value instanceof Date ? value.toISOString() : value;
}
export function toAdminPricingObservationDto(observation) {
return {
id: observation.id,
productId: observation.productId,
inventoryItemId: observation.inventoryItemId,
providerId: observation.providerId,
priceMinor: observation.priceMinor,
currency: observation.currency,
sourceIdentifier: observation.sourceIdentifier,
conditionId: observation.conditionId,
sourceUrl: observation.sourceUrl ?? null,
qualityScore: observation.qualityScore ?? null,
isOutlier: observation.isOutlier,
outlierReason: observation.outlierReason ?? null,
observedAt: toIsoString(observation.observedAt),
};
}
export function toAdminMarketValuationDto({ valuation, observations }) {
return {
id: valuation.id,
inventoryItemId: valuation.inventoryItemId,
valueMinor: valuation.valueMinor,
currency: valuation.currency,
strategy: valuation.strategy,
confidence: valuation.confidence,
sourceCount: valuation.sourceCount,
calculatedAt: toIsoString(valuation.calculatedAt),
stale:
Date.now() - new Date(valuation.calculatedAt).getTime() >
7 * 24 * 60 * 60 * 1000,
observations: observations.map(toAdminPricingObservationDto),
};
}
export function toAdminMarketValuationSummaryDto(valuation) {
return {
id: valuation.id,
inventoryItemId: valuation.inventoryItemId,
valueMinor: valuation.valueMinor,
currency: valuation.currency,
strategy: valuation.strategy,
confidence: valuation.confidence,
sourceCount: valuation.sourceCount,
calculatedAt: toIsoString(valuation.calculatedAt),
stale:
Date.now() - new Date(valuation.calculatedAt).getTime() >
7 * 24 * 60 * 60 * 1000,
};
}