Files
pokemon-inventory/packages/contracts/sale.js
T
fragginwagon b8f089a5d9 feat: reconcile application vertical slices
Backfill the completed acquisitions, sales, dashboard, pricing, search, public detail, worker, migration, contracts, validation, tests, and implementation-status changes into one verified application slice.
2026-09-09 22:12:53 -04:00

60 lines
1.7 KiB
JavaScript

function toIsoString(value) {
return value instanceof Date ? value.toISOString() : value;
}
export function toAdminSaleDto({
sale,
saleItem,
inventoryItem,
saleItems = [saleItem],
inventoryItems = [inventoryItem],
netProceedsMinor,
profitMinor,
productName,
}) {
return {
id: sale.id,
sellerId: sale.sellerId,
status: sale.status,
saleDate: sale.saleDate,
saleLocation: sale.saleLocation ?? null,
soldPriceMinor: sale.soldPriceMinor,
currency: sale.currency,
platformFeesMinor: sale.platformFeesMinor,
paymentProcessingFeesMinor: sale.paymentProcessingFeesMinor,
shippingCostMinor: sale.shippingCostMinor,
taxesMinor: sale.taxesMinor,
otherFeesMinor: sale.otherFeesMinor,
buyerName: sale.buyerName ?? null,
buyerContact: sale.buyerContact ?? null,
notes: sale.notes ?? null,
voidReason: sale.voidReason ?? null,
voidedAt: toIsoString(sale.voidedAt) ?? null,
productName: productName ?? null,
netProceedsMinor: netProceedsMinor ?? null,
profitMinor: profitMinor ?? null,
saleItem: {
id: saleItem.id,
inventoryItemId: saleItem.inventoryItemId,
soldPriceMinor: saleItem.soldPriceMinor,
costBasisMinor: saleItem.costBasisMinor,
},
saleItems: saleItems.map((item) => ({
id: item.id,
inventoryItemId: item.inventoryItemId,
soldPriceMinor: item.soldPriceMinor,
costBasisMinor: item.costBasisMinor,
})),
inventoryItem: {
id: inventoryItem.id,
status: inventoryItem.status,
},
inventoryItems: inventoryItems.map((item) => ({
id: item.id,
status: item.status,
})),
createdAt: toIsoString(sale.createdAt),
updatedAt: toIsoString(sale.updatedAt),
};
}