diff --git a/app/lib/actions/locationActions.ts b/app/lib/actions/locationActions.ts index 86b5799..de608e8 100644 --- a/app/lib/actions/locationActions.ts +++ b/app/lib/actions/locationActions.ts @@ -110,13 +110,32 @@ export const fetchAllLocations = withUser(async (user:AuthenticatedUser, year:nu // fetch all locations for the given year const locations = await dbClient.collection("lokacije") - .find( + .aggregate([ { - userId, - "yearMonth.year": year, + $match: { + userId, + "yearMonth.year": year, + }, }, { - projection: { + $addFields: { + bills: { + $map: { + input: "$bills", + as: "bill", + in: { + _id: "$$bill._id", + name: "$$bill.name", + paid: "$$bill.paid", + payedAmount: "$$bill.payedAmount", + hasAttachment: { $ne: ["$$bill.attachment", null] }, + }, + }, + }, + }, + }, + { + $project: { "_id": 1, // "userId": 0, // "userEmail": 0, @@ -130,17 +149,20 @@ export const fetchAllLocations = withUser(async (user:AuthenticatedUser, year:nu "bills.name": 1, "bills.paid": 1, "bills.payedAmount": 1, + "bills.hasAttachment": 1, // "bills.attachment": 0, // "bills.notes": 0, // "bills.barcodeImage": 1, }, - } - ) - .sort({ - "yearMonth.year": -1, - "yearMonth.month": -1, - name: 1, - }) + }, + { + $sort: { + "yearMonth.year": -1, + "yearMonth.month": -1, + name: 1, + }, + }, + ]) .toArray(); return(locations) diff --git a/app/lib/db-types.ts b/app/lib/db-types.ts index 53337f3..358dc4f 100644 --- a/app/lib/db-types.ts +++ b/app/lib/db-types.ts @@ -42,6 +42,11 @@ export interface Bill { payedAmount?: number | null; /** attached document (optional) */ attachment?: BillAttachment|null; + /** + * true if there an attachment + * @description this field enables us to send this info to the client without sending large attachment - it's an optimization + */ + hasAttachment: boolean; /** (optional) notes */ notes?: string|null; /** (optional) image data containing PDF471 bar code */ diff --git a/app/ui/BillBadge.tsx b/app/ui/BillBadge.tsx index f0e3eda..8de5201 100644 --- a/app/ui/BillBadge.tsx +++ b/app/ui/BillBadge.tsx @@ -7,7 +7,7 @@ export interface BillBadgeProps { bill: Bill }; -export const BillBadge:FC = ({ locationId, bill: { _id: billId, name, paid, attachment }}) => - +export const BillBadge:FC = ({ locationId, bill: { _id: billId, name, paid, hasAttachment }}) => + {name} ; \ No newline at end of file