optimization: not fetching binary data if not needed

This commit is contained in:
2024-02-08 15:15:10 +01:00
parent 02e7aef100
commit db3b4abed5
3 changed files with 38 additions and 8 deletions

View File

@@ -4,7 +4,7 @@ import { notFound } from 'next/navigation';
export async function GET(request: Request, { params:{ id } }: { params: { id:string } }) {
const [locationID, billID] = id.split('-');
const [location, bill] = await fetchBillById(locationID, billID) ?? [];
const [location, bill] = await fetchBillById(locationID, billID, true) ?? [];
if(!bill?.attachment) {
notFound();

View File

@@ -196,14 +196,27 @@ export const updateOrAddBill = withUser(async (user:AuthenticatedUser, locationI
}
})
export const fetchBillById = withUser(async (user:AuthenticatedUser, locationID:string, billID:string) => {
export const fetchBillById = withUser(async (user:AuthenticatedUser, locationID:string, billID:string, includeAttachmentBinary:boolean = false) => {
const { id: userId } = user;
const dbClient = await getDbClient();
// don't include the attachment binary data in the response
// if the attachment binary data is not needed
const projection = includeAttachmentBinary ? {} : {
"bills.attachment.fileContentsBase64": 0,
};
// find a location with the given locationID
const billLocation = await dbClient.collection<BillingLocation>("lokacije").findOne({ _id: locationID, userId })
const billLocation = await dbClient.collection<BillingLocation>("lokacije").findOne(
{
_id: locationID,
userId
},
{
projection
})
if(!billLocation) {
console.log(`Location ${locationID} not found`);

View File

@@ -105,10 +105,18 @@ export const fetchAllLocations = withUser(async (user:AuthenticatedUser, year:nu
// fetch all locations for the given year
const locations = await dbClient.collection<BillingLocation>("lokacije")
.find({
.find(
{
userId,
"yearMonth.year": year,
})
},
{
projection: {
// don't include the attachment binary data in the response
"bill.attachment.fileContentsBase64": 0,
},
}
)
.sort({
"yearMonth.year": -1,
"yearMonth.month": -1,
@@ -130,7 +138,16 @@ export const fetchLocationById = withUser(async (user:AuthenticatedUser, locatio
const { id: userId } = user;
// find a location with the given locationID
const billLocation = await dbClient.collection<BillingLocation>("lokacije").findOne({ _id: locationID, userId});
const billLocation = await dbClient.collection<BillingLocation>("lokacije")
.findOne(
{ _id: locationID, userId },
{
projection: {
// don't include the attachment binary data in the response
"bill.attachment.fileContentsBase64": 0,
},
}
);
if(!billLocation) {
console.log(`Location ${locationID} not found`);