|
|
|
@ -121,12 +121,7 @@ const specificAnalysisDtoMapper = (
|
|
|
|
|
const highestOfferDtoMapper = (
|
|
|
|
|
offer: OffersOffer & {
|
|
|
|
|
OffersFullTime:
|
|
|
|
|
| (OffersFullTime & {
|
|
|
|
|
baseSalary: OffersCurrency;
|
|
|
|
|
bonus: OffersCurrency;
|
|
|
|
|
stocks: OffersCurrency;
|
|
|
|
|
totalCompensation: OffersCurrency;
|
|
|
|
|
})
|
|
|
|
|
| (OffersFullTime & { totalCompensation: OffersCurrency })
|
|
|
|
|
| null;
|
|
|
|
|
OffersIntern: (OffersIntern & { monthlySalary: OffersCurrency }) | null;
|
|
|
|
|
company: Company;
|
|
|
|
@ -146,7 +141,43 @@ const highestOfferDtoMapper = (
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const offersAnalysisRouter = createRouter().query('generate', {
|
|
|
|
|
const profileAnalysisDtoMapper = (
|
|
|
|
|
analysisId: string,
|
|
|
|
|
profileId: string,
|
|
|
|
|
overallHighestOffer: OffersOffer & {
|
|
|
|
|
OffersFullTime:
|
|
|
|
|
| (OffersFullTime & { totalCompensation: OffersCurrency })
|
|
|
|
|
| null;
|
|
|
|
|
OffersIntern: (OffersIntern & { monthlySalary: OffersCurrency }) | null;
|
|
|
|
|
company: Company;
|
|
|
|
|
profile: OffersProfile & { background: OffersBackground | null };
|
|
|
|
|
},
|
|
|
|
|
noOfSimilarOffers: number,
|
|
|
|
|
overallPercentile: number,
|
|
|
|
|
topPercentileOffers: Array<any>,
|
|
|
|
|
noOfSimilarCompanyOffers: number,
|
|
|
|
|
companyPercentile: number,
|
|
|
|
|
topPercentileCompanyOffers: Array<any>,
|
|
|
|
|
) => {
|
|
|
|
|
return {
|
|
|
|
|
companyAnalysis: specificAnalysisDtoMapper(
|
|
|
|
|
noOfSimilarCompanyOffers,
|
|
|
|
|
companyPercentile,
|
|
|
|
|
topPercentileCompanyOffers,
|
|
|
|
|
),
|
|
|
|
|
id: analysisId,
|
|
|
|
|
overallAnalysis: specificAnalysisDtoMapper(
|
|
|
|
|
noOfSimilarOffers,
|
|
|
|
|
overallPercentile,
|
|
|
|
|
topPercentileOffers,
|
|
|
|
|
),
|
|
|
|
|
overallHighestOffer: highestOfferDtoMapper(overallHighestOffer),
|
|
|
|
|
profileId,
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const offersAnalysisRouter = createRouter()
|
|
|
|
|
.query('generate', {
|
|
|
|
|
input: z.object({
|
|
|
|
|
profileId: z.string(),
|
|
|
|
|
}),
|
|
|
|
@ -458,20 +489,125 @@ export const offersAnalysisRouter = createRouter().query('generate', {
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
companyAnalysis: specificAnalysisDtoMapper(
|
|
|
|
|
noOfSimilarCompanyOffers,
|
|
|
|
|
companyPercentile,
|
|
|
|
|
topPercentileCompanyOffers,
|
|
|
|
|
),
|
|
|
|
|
id: analysis.id,
|
|
|
|
|
overallAnalysis: specificAnalysisDtoMapper(
|
|
|
|
|
return profileAnalysisDtoMapper(
|
|
|
|
|
analysis.id,
|
|
|
|
|
analysis.profileId,
|
|
|
|
|
overallHighestOffer,
|
|
|
|
|
noOfSimilarOffers,
|
|
|
|
|
overallPercentile,
|
|
|
|
|
topPercentileOffers,
|
|
|
|
|
),
|
|
|
|
|
overallHighestOffer: highestOfferDtoMapper(overallHighestOffer),
|
|
|
|
|
profileId: analysis.profileId,
|
|
|
|
|
};
|
|
|
|
|
noOfSimilarCompanyOffers,
|
|
|
|
|
companyPercentile,
|
|
|
|
|
topPercentileCompanyOffers,
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
.query('get', {
|
|
|
|
|
input: z.object({
|
|
|
|
|
profileId: z.string(),
|
|
|
|
|
}),
|
|
|
|
|
async resolve({ ctx, input }) {
|
|
|
|
|
const analysis = await ctx.prisma.offersAnalysis.findFirst({
|
|
|
|
|
include: {
|
|
|
|
|
overallHighestOffer: {
|
|
|
|
|
include: {
|
|
|
|
|
OffersFullTime: {
|
|
|
|
|
include: {
|
|
|
|
|
totalCompensation: true,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
OffersIntern: {
|
|
|
|
|
include: {
|
|
|
|
|
monthlySalary: true,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
company: true,
|
|
|
|
|
profile: {
|
|
|
|
|
include: {
|
|
|
|
|
background: true,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
topCompanyOffers: {
|
|
|
|
|
include: {
|
|
|
|
|
OffersFullTime: {
|
|
|
|
|
include: {
|
|
|
|
|
totalCompensation: true,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
OffersIntern: {
|
|
|
|
|
include: {
|
|
|
|
|
monthlySalary: true,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
company: true,
|
|
|
|
|
profile: {
|
|
|
|
|
include: {
|
|
|
|
|
background: {
|
|
|
|
|
include: {
|
|
|
|
|
experiences: {
|
|
|
|
|
include: {
|
|
|
|
|
company: true,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
topOverallOffers: {
|
|
|
|
|
include: {
|
|
|
|
|
OffersFullTime: {
|
|
|
|
|
include: {
|
|
|
|
|
totalCompensation: true,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
OffersIntern: {
|
|
|
|
|
include: {
|
|
|
|
|
monthlySalary: true,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
company: true,
|
|
|
|
|
profile: {
|
|
|
|
|
include: {
|
|
|
|
|
background: {
|
|
|
|
|
include: {
|
|
|
|
|
experiences: {
|
|
|
|
|
include: {
|
|
|
|
|
company: true,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
where: {
|
|
|
|
|
profileId: input.profileId,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (!analysis) {
|
|
|
|
|
throw new TRPCError({
|
|
|
|
|
code: 'NOT_FOUND',
|
|
|
|
|
message: 'No analysis found on this profile',
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return profileAnalysisDtoMapper(
|
|
|
|
|
analysis.id,
|
|
|
|
|
analysis.profileId,
|
|
|
|
|
analysis.overallHighestOffer,
|
|
|
|
|
analysis.noOfSimilarOffers,
|
|
|
|
|
analysis.overallPercentile,
|
|
|
|
|
analysis.topOverallOffers,
|
|
|
|
|
analysis.noOfSimilarCompanyOffers,
|
|
|
|
|
analysis.companyPercentile,
|
|
|
|
|
analysis.topCompanyOffers,
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|