[offers][chore] Add typed response for get offers API

pull/390/head
BryannYeap 3 years ago
parent 00165a8f7d
commit bca6e85f0a

@ -73,10 +73,10 @@ export default function OffersTable({
});
setOffers(filteredData);
setPagination({
currentPage: (response.paging.currPage as number) + 1,
numOfItems: response.paging.numOfItemsInPage,
currentPage: response.paging.currentPage + 1,
numOfItems: response.paging.numOfItems,
numOfPages: response.paging.numOfPages,
totalItems: response.paging.totalNumberOfOffers,
totalItems: response.paging.totalItems,
});
},
},

@ -22,9 +22,12 @@ import type {
AnalysisOffer,
Background,
CreateOfferProfileResponse,
DashboardOffer,
Education,
Experience,
GetOffersResponse,
OffersCompany,
Paging,
Profile,
ProfileAnalysis,
ProfileOffer,
@ -522,3 +525,52 @@ export const addToProfileResponseMapper = (updatedProfile: {
return addToProfileResponse;
};
export const dashboardOfferDtoMapper = (
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 };
},
) => {
const dashboardOfferDto: DashboardOffer = {
company: offersCompanyDtoMapper(offer.company),
id: offer.id,
income: valuationDtoMapper({ currency: '', value: -1 }),
monthYearReceived: offer.monthYearReceived,
profileId: offer.profileId,
title: offer.OffersFullTime?.title ?? '',
totalYoe: offer.profile.background?.totalYoe ?? -1,
};
if (offer.OffersFullTime) {
dashboardOfferDto.income = valuationDtoMapper(
offer.OffersFullTime.totalCompensation,
);
} else if (offer.OffersIntern) {
dashboardOfferDto.income = valuationDtoMapper(
offer.OffersIntern.monthlySalary,
);
}
return dashboardOfferDto;
};
export const getOffersResponseMapper = (
data: Array<DashboardOffer>,
paging: Paging,
) => {
const getOffersResponse: GetOffersResponse = {
data,
paging,
};
return getOffersResponse;
};

@ -1,6 +1,11 @@
import { z } from 'zod';
import { TRPCError } from '@trpc/server';
import {
dashboardOfferDtoMapper,
getOffersResponseMapper,
} from '~/mappers/offers-mappers';
import { createRouter } from '../context';
const yoeCategoryMap: Record<number, string> = {
@ -299,14 +304,14 @@ export const offersRouter = createRouter().query('list', {
: data.length;
const paginatedData = data.slice(startRecordIndex, endRecordIndex);
return {
data: paginatedData,
paging: {
currPage: input.offset,
numOfItemsInPage: paginatedData.length,
return getOffersResponseMapper(
paginatedData.map((offer) => dashboardOfferDtoMapper(offer)),
{
currentPage: input.offset,
numOfItems: paginatedData.length,
numOfPages: Math.ceil(data.length / input.limit),
totalNumberOfOffers: data.length,
totalItems: data.length,
},
};
);
},
});

@ -65,6 +65,7 @@ export type DashboardOffer = {
id: string;
income: Valuation;
monthYearReceived: Date;
profileId: string;
title: string;
totalYoe: number;
};
@ -124,10 +125,10 @@ export type GetOffersResponse = {
};
export type Paging = {
currPage: number;
numOfItemsInPage: number;
currentPage: number;
numOfItems: number;
numOfPages: number;
totalNumberOfOffers: number;
totalItems: number;
};
export type CreateOfferProfileResponse = {
@ -136,7 +137,7 @@ export type CreateOfferProfileResponse = {
};
export type OffersDiscussion = {
data: Array<OReply>;
data: Array<Reply>;
};
export type ProfileAnalysis = {

Loading…
Cancel
Save