[offers][feat] Add sorting functionality to list offers

pull/353/head
BryannYeap 3 years ago committed by Stuart Long Chay Boon
parent d5d74b7b4b
commit d4d10ed1b0

@ -9,6 +9,7 @@ function test() {
limit: 3, limit: 3,
location: 'Singapore, Singapore', location: 'Singapore, Singapore',
offset: 0, offset: 0,
sortBy: '-monthYearReceived',
yoeCategory: 0, yoeCategory: 0,
}, },
]); ]);

@ -20,7 +20,9 @@ const getYoeRange = (yoeCategory: number) => {
: null; : null;
}; };
const sortingKeys = ['date', 'tc', 'yoe']; const ascOrder = '+';
const descOrder = '-';
const sortingKeys = ['monthYearReceived', 'totalCompensation', 'yoe'];
const createSortByValidationRegex = () => { const createSortByValidationRegex = () => {
const startsWithPlusOrMinusOnly = '^[+-]{1}'; const startsWithPlusOrMinusOnly = '^[+-]{1}';
@ -38,7 +40,7 @@ export const offersRouter = createRouter().query('list', {
offset: z.number().nonnegative(), offset: z.number().nonnegative(),
salaryMax: z.number().nullish(), salaryMax: z.number().nullish(),
salaryMin: z.number().nonnegative().nullish(), salaryMin: z.number().nonnegative().nullish(),
sortby: z.string().regex(createSortByValidationRegex()).nullish(), sortBy: z.string().regex(createSortByValidationRegex()).nullish(),
title: z.string().nullish(), title: z.string().nullish(),
yoeCategory: z.number().min(0).max(3), yoeCategory: z.number().min(0).max(3),
}), }),
@ -224,6 +226,72 @@ export const offersRouter = createRouter().query('list', {
return validRecord; return validRecord;
}); });
data = data.sort((offer1, offer2) => {
const defaultReturn =
offer2.monthYearReceived.getTime() - offer1.monthYearReceived.getTime();
if (!input.sortBy) {
return defaultReturn;
}
const order = input.sortBy.charAt(0);
const sortingKey = input.sortBy.substring(1);
if (order === ascOrder) {
return (() => {
if (sortingKey === 'monthYearReceived') {
return (
offer1.monthYearReceived.getTime() -
offer2.monthYearReceived.getTime()
);
}
if (sortingKey === 'totalCompensation') {
const salary1 = offer1.OffersFullTime?.totalCompensation.value
? offer1.OffersFullTime?.totalCompensation.value
: offer1.OffersIntern?.monthlySalary.value;
const salary2 = offer2.OffersFullTime?.totalCompensation.value
? offer2.OffersFullTime?.totalCompensation.value
: offer2.OffersIntern?.monthlySalary.value;
if (salary1 && salary2) {
return salary1 - salary2;
}
}
return defaultReturn;
})();
}
if (order === descOrder) {
return (() => {
if (sortingKey === 'monthYearReceived') {
return (
offer2.monthYearReceived.getTime() -
offer1.monthYearReceived.getTime()
);
}
if (sortingKey === 'totalCompensation') {
const salary1 = offer1.OffersFullTime?.totalCompensation.value
? offer1.OffersFullTime?.totalCompensation.value
: offer1.OffersIntern?.monthlySalary.value;
const salary2 = offer2.OffersFullTime?.totalCompensation.value
? offer2.OffersFullTime?.totalCompensation.value
: offer2.OffersIntern?.monthlySalary.value;
if (salary1 && salary2) {
return salary2 - salary1;
}
}
return defaultReturn;
})();
}
return defaultReturn;
});
return data; return data;
}, },
}); });

Loading…
Cancel
Save