Backfill the completed acquisitions, sales, dashboard, pricing, search, public detail, worker, migration, contracts, validation, tests, and implementation-status changes into one verified application slice.
39 lines
1.3 KiB
JavaScript
39 lines
1.3 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),
|
|
};
|
|
}
|