59 lines
1.6 KiB
JavaScript
59 lines
1.6 KiB
JavaScript
const formatDateAsString = (value) => (value instanceof Date ? value.toISOString() : value ?? null)
|
|
const { normalizeMediaPath } = require("../../utils/mediaPath")
|
|
|
|
function mapDealToDealCardResponse(deal) {
|
|
return {
|
|
id: deal.id,
|
|
title: deal.title,
|
|
description: deal.description || "",
|
|
price: deal.price ?? null,
|
|
originalPrice: deal.originalPrice ?? null,
|
|
shippingPrice: deal.shippingPrice ?? null,
|
|
couponCode: deal.couponCode ?? null,
|
|
location: deal.location ?? null,
|
|
discountType: deal.discountType ?? null,
|
|
discountValue: deal.discountValue ?? null,
|
|
barcodeId: deal.barcodeId ?? null,
|
|
|
|
score: deal.score,
|
|
commentsCount: deal.commentCount,
|
|
hasLink: Boolean(deal.url),
|
|
status: deal.status,
|
|
saleType: deal.saletype,
|
|
affiliateType: deal.affiliateType,
|
|
|
|
myVote: deal.myVote ?? 0,
|
|
isSaved: Boolean(deal.isSaved),
|
|
|
|
createdAt: formatDateAsString(deal.createdAt),
|
|
updatedAt: formatDateAsString(deal.updatedAt),
|
|
|
|
user: {
|
|
id: deal.user.id,
|
|
username: deal.user.username,
|
|
avatarUrl: normalizeMediaPath(deal.user.avatarUrl) ?? null,
|
|
},
|
|
|
|
seller: deal.seller
|
|
? {
|
|
name: deal.seller.name,
|
|
url: deal.seller.url ?? null,
|
|
}
|
|
: {
|
|
name: deal.customSeller || "",
|
|
url: null,
|
|
},
|
|
|
|
imageUrl: normalizeMediaPath(deal.images?.[0]?.imageUrl) || "",
|
|
}
|
|
}
|
|
|
|
function mapPaginatedDealsToDealCardResponse(paginated) {
|
|
return {
|
|
...paginated,
|
|
results: paginated.results.map(mapDealToDealCardResponse),
|
|
}
|
|
}
|
|
|
|
module.exports = { mapDealToDealCardResponse,mapPaginatedDealsToDealCardResponse }
|