[offers][chore] Simplify offer analysis API response

pull/380/head
BryannYeap 2 years ago
parent 0edcfb7af3
commit 56632892ce

@ -66,6 +66,86 @@ const binarySearchOfferPercentile = (
return -1;
};
const topPercentileDtoMapper = (topPercentileOffers: Array<any>) => {
return topPercentileOffers.map((offer) => {
const { background } = offer.profile;
return {
company: { id: offer.company.id, name: offer.company.name },
id: offer.id,
jobType: offer.jobType,
level: offer.OffersFullTime?.level,
monthYearReceived: offer.monthYearReceived,
monthlySalary: offer.OffersIntern?.monthlySalary?.value,
negotiationStrategy: offer.negotiationStrategy,
profile: {
background: {
experiences: background?.experiences.map(
(exp: { company: { id: any; name: any }; id: any }) => {
return {
company: { id: exp.company.id, name: exp.company.name },
id: exp.id,
};
},
),
id: background?.id,
totalYoe: background?.totalYoe,
},
id: offer.profileId,
name: offer.profile.profileName,
},
specialization:
offer.jobType === JobType.FULLTIME
? offer.OffersFullTime?.specialization
: offer.OffersIntern?.specialization,
title:
offer.jobType === JobType.FULLTIME
? offer.OffersFullTime?.title
: offer.OffersIntern?.title,
totalCompensation: offer.OffersFullTime?.totalCompensation?.value,
};
});
};
const specificAnalysisDtoMapper = (
noOfOffers: number,
percentile: number,
topPercentileOffers: Array<any>,
) => {
return {
noOfOffers,
percentile,
topPercentileCompanyOffers: topPercentileDtoMapper(topPercentileOffers),
};
};
const highestOfferDtoMapper = (
offer: OffersOffer & {
OffersFullTime:
| (OffersFullTime & {
baseSalary: OffersCurrency;
bonus: OffersCurrency;
stocks: OffersCurrency;
totalCompensation: OffersCurrency;
})
| null;
OffersIntern: (OffersIntern & { monthlySalary: OffersCurrency }) | null;
company: Company;
profile: OffersProfile & { background: OffersBackground | null };
},
) => {
return {
company: { id: offer.company.id, name: offer.company.name },
id: offer.id,
level: offer.OffersFullTime?.level,
location: offer.location,
specialization:
offer.jobType === JobType.FULLTIME
? offer.OffersFullTime?.specialization
: offer.OffersIntern?.specialization,
totalYoe: offer.profile.background?.totalYoe,
};
};
export const offersAnalysisRouter = createRouter().query('generate', {
input: z.object({
profileId: z.string(),
@ -378,6 +458,20 @@ export const offersAnalysisRouter = createRouter().query('generate', {
},
});
return analysis;
return {
companyAnalysis: specificAnalysisDtoMapper(
noOfSimilarCompanyOffers,
companyPercentile,
topPercentileCompanyOffers,
),
id: analysis.id,
overallAnalysis: specificAnalysisDtoMapper(
noOfSimilarOffers,
overallPercentile,
topPercentileOffers,
),
overallHighestOffer: highestOfferDtoMapper(overallHighestOffer),
profileId: analysis.profileId,
};
},
});

Loading…
Cancel
Save