|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
import type {
|
|
|
|
|
Company,
|
|
|
|
|
OffersAnalysis,
|
|
|
|
|
OffersAnalysisUnit,
|
|
|
|
|
OffersBackground,
|
|
|
|
|
OffersCurrency,
|
|
|
|
|
OffersEducation,
|
|
|
|
@ -18,9 +19,9 @@ import { TRPCError } from '@trpc/server';
|
|
|
|
|
|
|
|
|
|
import type {
|
|
|
|
|
AddToProfileResponse,
|
|
|
|
|
Analysis,
|
|
|
|
|
AnalysisHighestOffer,
|
|
|
|
|
AnalysisOffer,
|
|
|
|
|
AnalysisUnit,
|
|
|
|
|
Background,
|
|
|
|
|
CreateOfferProfileResponse,
|
|
|
|
|
DashboardOffer,
|
|
|
|
@ -35,7 +36,8 @@ import type {
|
|
|
|
|
SpecificYoe,
|
|
|
|
|
UserProfile,
|
|
|
|
|
UserProfileOffer,
|
|
|
|
|
Valuation} from '~/types/offers';
|
|
|
|
|
Valuation,
|
|
|
|
|
} from '~/types/offers';
|
|
|
|
|
|
|
|
|
|
const analysisOfferDtoMapper = (
|
|
|
|
|
offer: OffersOffer & {
|
|
|
|
@ -110,10 +112,9 @@ const analysisOfferDtoMapper = (
|
|
|
|
|
return analysisOfferDto;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const analysisDtoMapper = (
|
|
|
|
|
noOfOffers: number,
|
|
|
|
|
percentile: number,
|
|
|
|
|
topPercentileOffers: Array<
|
|
|
|
|
const analysisUnitDtoMapper = (
|
|
|
|
|
analysisUnit: OffersAnalysisUnit & {
|
|
|
|
|
topSimilarOffers: Array<
|
|
|
|
|
OffersOffer & {
|
|
|
|
|
company: Company;
|
|
|
|
|
offersFullTime:
|
|
|
|
@ -130,12 +131,13 @@ const analysisDtoMapper = (
|
|
|
|
|
| null;
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
>,
|
|
|
|
|
>;
|
|
|
|
|
},
|
|
|
|
|
) => {
|
|
|
|
|
const analysisDto: Analysis = {
|
|
|
|
|
noOfOffers,
|
|
|
|
|
percentile,
|
|
|
|
|
topPercentileOffers: topPercentileOffers.map((offer) =>
|
|
|
|
|
const analysisDto: AnalysisUnit = {
|
|
|
|
|
noOfOffers: analysisUnit.noOfSimilarOffers,
|
|
|
|
|
percentile: analysisUnit.percentile,
|
|
|
|
|
topPercentileOffers: analysisUnit.topSimilarOffers.map((offer) =>
|
|
|
|
|
analysisOfferDtoMapper(offer),
|
|
|
|
|
),
|
|
|
|
|
};
|
|
|
|
@ -165,17 +167,9 @@ const analysisHighestOfferDtoMapper = (
|
|
|
|
|
export const profileAnalysisDtoMapper = (
|
|
|
|
|
analysis:
|
|
|
|
|
| (OffersAnalysis & {
|
|
|
|
|
overallHighestOffer: OffersOffer & {
|
|
|
|
|
company: Company;
|
|
|
|
|
offersFullTime:
|
|
|
|
|
| (OffersFullTime & { totalCompensation: OffersCurrency })
|
|
|
|
|
| null;
|
|
|
|
|
offersIntern:
|
|
|
|
|
| (OffersIntern & { monthlySalary: OffersCurrency })
|
|
|
|
|
| null;
|
|
|
|
|
profile: OffersProfile & { background: OffersBackground | null };
|
|
|
|
|
};
|
|
|
|
|
topCompanyOffers: Array<
|
|
|
|
|
companyAnalysis: Array<
|
|
|
|
|
OffersAnalysisUnit & {
|
|
|
|
|
topSimilarOffers: Array<
|
|
|
|
|
OffersOffer & {
|
|
|
|
|
company: Company;
|
|
|
|
|
offersFullTime:
|
|
|
|
@ -195,7 +189,10 @@ export const profileAnalysisDtoMapper = (
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
>;
|
|
|
|
|
topOverallOffers: Array<
|
|
|
|
|
}
|
|
|
|
|
>;
|
|
|
|
|
overallAnalysis: OffersAnalysisUnit & {
|
|
|
|
|
topSimilarOffers: Array<
|
|
|
|
|
OffersOffer & {
|
|
|
|
|
company: Company;
|
|
|
|
|
offersFullTime:
|
|
|
|
@ -215,6 +212,17 @@ export const profileAnalysisDtoMapper = (
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
>;
|
|
|
|
|
};
|
|
|
|
|
overallHighestOffer: OffersOffer & {
|
|
|
|
|
company: Company;
|
|
|
|
|
offersFullTime:
|
|
|
|
|
| (OffersFullTime & { totalCompensation: OffersCurrency })
|
|
|
|
|
| null;
|
|
|
|
|
offersIntern:
|
|
|
|
|
| (OffersIntern & { monthlySalary: OffersCurrency })
|
|
|
|
|
| null;
|
|
|
|
|
profile: OffersProfile & { background: OffersBackground | null };
|
|
|
|
|
};
|
|
|
|
|
})
|
|
|
|
|
| null,
|
|
|
|
|
) => {
|
|
|
|
@ -223,19 +231,11 @@ export const profileAnalysisDtoMapper = (
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const profileAnalysisDto: ProfileAnalysis = {
|
|
|
|
|
companyAnalysis: [
|
|
|
|
|
analysisDtoMapper(
|
|
|
|
|
analysis.noOfSimilarCompanyOffers,
|
|
|
|
|
analysis.companyPercentile,
|
|
|
|
|
analysis.topCompanyOffers,
|
|
|
|
|
companyAnalysis: analysis.companyAnalysis.map((analysisUnit) =>
|
|
|
|
|
analysisUnitDtoMapper(analysisUnit),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
id: analysis.id,
|
|
|
|
|
overallAnalysis: analysisDtoMapper(
|
|
|
|
|
analysis.noOfSimilarOffers,
|
|
|
|
|
analysis.overallPercentile,
|
|
|
|
|
analysis.topOverallOffers,
|
|
|
|
|
),
|
|
|
|
|
overallAnalysis: analysisUnitDtoMapper(analysis.overallAnalysis),
|
|
|
|
|
overallHighestOffer: analysisHighestOfferDtoMapper(
|
|
|
|
|
analysis.overallHighestOffer,
|
|
|
|
|
),
|
|
|
|
@ -441,17 +441,9 @@ export const profileDtoMapper = (
|
|
|
|
|
profile: OffersProfile & {
|
|
|
|
|
analysis:
|
|
|
|
|
| (OffersAnalysis & {
|
|
|
|
|
overallHighestOffer: OffersOffer & {
|
|
|
|
|
company: Company;
|
|
|
|
|
offersFullTime:
|
|
|
|
|
| (OffersFullTime & { totalCompensation: OffersCurrency })
|
|
|
|
|
| null;
|
|
|
|
|
offersIntern:
|
|
|
|
|
| (OffersIntern & { monthlySalary: OffersCurrency })
|
|
|
|
|
| null;
|
|
|
|
|
profile: OffersProfile & { background: OffersBackground | null };
|
|
|
|
|
};
|
|
|
|
|
topCompanyOffers: Array<
|
|
|
|
|
companyAnalysis: Array<
|
|
|
|
|
OffersAnalysisUnit & {
|
|
|
|
|
topSimilarOffers: Array<
|
|
|
|
|
OffersOffer & {
|
|
|
|
|
company: Company;
|
|
|
|
|
offersFullTime:
|
|
|
|
@ -471,7 +463,10 @@ export const profileDtoMapper = (
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
>;
|
|
|
|
|
topOverallOffers: Array<
|
|
|
|
|
}
|
|
|
|
|
>;
|
|
|
|
|
overallAnalysis: OffersAnalysisUnit & {
|
|
|
|
|
topSimilarOffers: Array<
|
|
|
|
|
OffersOffer & {
|
|
|
|
|
company: Company;
|
|
|
|
|
offersFullTime:
|
|
|
|
@ -491,6 +486,17 @@ export const profileDtoMapper = (
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
>;
|
|
|
|
|
};
|
|
|
|
|
overallHighestOffer: OffersOffer & {
|
|
|
|
|
company: Company;
|
|
|
|
|
offersFullTime:
|
|
|
|
|
| (OffersFullTime & { totalCompensation: OffersCurrency })
|
|
|
|
|
| null;
|
|
|
|
|
offersIntern:
|
|
|
|
|
| (OffersIntern & { monthlySalary: OffersCurrency })
|
|
|
|
|
| null;
|
|
|
|
|
profile: OffersProfile & { background: OffersBackground | null };
|
|
|
|
|
};
|
|
|
|
|
})
|
|
|
|
|
| null;
|
|
|
|
|
background:
|
|
|
|
@ -530,7 +536,7 @@ export const profileDtoMapper = (
|
|
|
|
|
user: User | null;
|
|
|
|
|
},
|
|
|
|
|
inputToken: string | undefined,
|
|
|
|
|
inputUserId: string | null | undefined
|
|
|
|
|
inputUserId: string | null | undefined,
|
|
|
|
|
) => {
|
|
|
|
|
const profileDto: Profile = {
|
|
|
|
|
analysis: profileAnalysisDtoMapper(profile.analysis),
|
|
|
|
@ -547,7 +553,7 @@ export const profileDtoMapper = (
|
|
|
|
|
profileDto.editToken = profile.editToken ?? null;
|
|
|
|
|
profileDto.isEditable = true;
|
|
|
|
|
|
|
|
|
|
const users = profile.user
|
|
|
|
|
const users = profile.user;
|
|
|
|
|
|
|
|
|
|
// TODO: BRYANN UNCOMMENT THIS ONCE U CHANGE THE SCHEMA
|
|
|
|
|
// for (let i = 0; i < users.length; i++) {
|
|
|
|
@ -558,7 +564,7 @@ export const profileDtoMapper = (
|
|
|
|
|
|
|
|
|
|
// TODO: REMOVE THIS ONCE U CHANGE THE SCHEMA
|
|
|
|
|
if (users?.id === inputUserId) {
|
|
|
|
|
profileDto.isSaved = true
|
|
|
|
|
profileDto.isSaved = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -645,38 +651,53 @@ export const getOffersResponseMapper = (
|
|
|
|
|
return getOffersResponse;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const getUserProfileResponseMapper = (res: User & {
|
|
|
|
|
OffersProfile: Array<OffersProfile & {
|
|
|
|
|
offers: Array<OffersOffer & {
|
|
|
|
|
export const getUserProfileResponseMapper = (
|
|
|
|
|
res:
|
|
|
|
|
| (User & {
|
|
|
|
|
OffersProfile: Array<
|
|
|
|
|
OffersProfile & {
|
|
|
|
|
offers: Array<
|
|
|
|
|
OffersOffer & {
|
|
|
|
|
company: Company;
|
|
|
|
|
offersFullTime: (OffersFullTime & { totalCompensation: OffersCurrency }) | null;
|
|
|
|
|
offersIntern: (OffersIntern & { monthlySalary: OffersCurrency }) | null;
|
|
|
|
|
}>;
|
|
|
|
|
}>;
|
|
|
|
|
} | null): Array<UserProfile> => {
|
|
|
|
|
offersFullTime:
|
|
|
|
|
| (OffersFullTime & { totalCompensation: OffersCurrency })
|
|
|
|
|
| null;
|
|
|
|
|
offersIntern:
|
|
|
|
|
| (OffersIntern & { monthlySalary: OffersCurrency })
|
|
|
|
|
| null;
|
|
|
|
|
}
|
|
|
|
|
>;
|
|
|
|
|
}
|
|
|
|
|
>;
|
|
|
|
|
})
|
|
|
|
|
| null,
|
|
|
|
|
): Array<UserProfile> => {
|
|
|
|
|
if (res) {
|
|
|
|
|
return res.OffersProfile.map((profile) => {
|
|
|
|
|
return {
|
|
|
|
|
createdAt: profile.createdAt,
|
|
|
|
|
id: profile.id,
|
|
|
|
|
offers: profile.offers.map((offer) => {
|
|
|
|
|
return userProfileOfferDtoMapper(offer)
|
|
|
|
|
return userProfileOfferDtoMapper(offer);
|
|
|
|
|
}),
|
|
|
|
|
profileName: profile.profileName,
|
|
|
|
|
token: profile.editToken
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
token: profile.editToken,
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return []
|
|
|
|
|
}
|
|
|
|
|
return [];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const userProfileOfferDtoMapper = (
|
|
|
|
|
offer: OffersOffer & {
|
|
|
|
|
company: Company;
|
|
|
|
|
offersFullTime: (OffersFullTime & { totalCompensation: OffersCurrency }) | null;
|
|
|
|
|
offersFullTime:
|
|
|
|
|
| (OffersFullTime & { totalCompensation: OffersCurrency })
|
|
|
|
|
| null;
|
|
|
|
|
offersIntern: (OffersIntern & { monthlySalary: OffersCurrency }) | null;
|
|
|
|
|
}): UserProfileOffer => {
|
|
|
|
|
},
|
|
|
|
|
): UserProfileOffer => {
|
|
|
|
|
const mappedOffer: UserProfileOffer = {
|
|
|
|
|
company: offersCompanyDtoMapper(offer.company),
|
|
|
|
|
id: offer.id,
|
|
|
|
@ -695,11 +716,10 @@ const userProfileOfferDtoMapper = (
|
|
|
|
|
offer.jobType === JobType.FULLTIME
|
|
|
|
|
? offer.offersFullTime?.title ?? ''
|
|
|
|
|
: offer.offersIntern?.title ?? '',
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (offer.offersFullTime?.totalCompensation) {
|
|
|
|
|
mappedOffer.income.value =
|
|
|
|
|
offer.offersFullTime.totalCompensation.value;
|
|
|
|
|
mappedOffer.income.value = offer.offersFullTime.totalCompensation.value;
|
|
|
|
|
mappedOffer.income.currency =
|
|
|
|
|
offer.offersFullTime.totalCompensation.currency;
|
|
|
|
|
mappedOffer.income.id = offer.offersFullTime.totalCompensation.id;
|
|
|
|
@ -709,11 +729,9 @@ const userProfileOfferDtoMapper = (
|
|
|
|
|
offer.offersFullTime.totalCompensation.baseCurrency;
|
|
|
|
|
} else if (offer.offersIntern?.monthlySalary) {
|
|
|
|
|
mappedOffer.income.value = offer.offersIntern.monthlySalary.value;
|
|
|
|
|
mappedOffer.income.currency =
|
|
|
|
|
offer.offersIntern.monthlySalary.currency;
|
|
|
|
|
mappedOffer.income.currency = offer.offersIntern.monthlySalary.currency;
|
|
|
|
|
mappedOffer.income.id = offer.offersIntern.monthlySalary.id;
|
|
|
|
|
mappedOffer.income.baseValue =
|
|
|
|
|
offer.offersIntern.monthlySalary.baseValue;
|
|
|
|
|
mappedOffer.income.baseValue = offer.offersIntern.monthlySalary.baseValue;
|
|
|
|
|
mappedOffer.income.baseCurrency =
|
|
|
|
|
offer.offersIntern.monthlySalary.baseCurrency;
|
|
|
|
|
} else {
|
|
|
|
@ -723,5 +741,5 @@ const userProfileOfferDtoMapper = (
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return mappedOffer
|
|
|
|
|
}
|
|
|
|
|
return mappedOffer;
|
|
|
|
|
};
|
|
|
|
|