[offers][feat] add edit profile endpoint

pull/376/head
Stuart Long Chay Boon 2 years ago
parent dbdcd4dda9
commit 68d0956cba

@ -66,10 +66,9 @@ function Test() {
}, },
offers: [ offers: [
{ {
// Comments: '',
companyId: 'cl95u79f000007im531ysjg79', OffersFullTime: {
job: { baseSalary: {
base: {
currency: 'SGD', currency: 'SGD',
value: 84000, value: 84000,
}, },
@ -89,16 +88,16 @@ function Test() {
value: 104100, value: 104100,
}, },
}, },
// Comments: '',
companyId: 'cl95u79f000007im531ysjg79',
jobType: 'FULLTIME', jobType: 'FULLTIME',
location: 'Singapore, Singapore', location: 'Singapore, Singapore',
monthYearReceived: new Date('2022-09-30T07:58:54.000Z'), monthYearReceived: new Date('2022-09-30T07:58:54.000Z'),
negotiationStrategy: 'Leveraged having multiple offers', negotiationStrategy: 'Leveraged having multiple offers',
}, },
{ {
comments: undefined, OffersFullTime: {
companyId: 'cl95u79f000007im531ysjg79', baseSalary: {
job: {
base: {
currency: 'SGD', currency: 'SGD',
value: 84000, value: 84000,
}, },
@ -118,6 +117,8 @@ function Test() {
value: 104100, value: 104100,
}, },
}, },
comments: undefined,
companyId: 'cl95u79f000007im531ysjg79',
jobType: 'FULLTIME', jobType: 'FULLTIME',
location: 'Singapore, Singapore', location: 'Singapore, Singapore',
monthYearReceived: new Date('2022-09-30T07:58:54.000Z'), monthYearReceived: new Date('2022-09-30T07:58:54.000Z'),
@ -127,12 +128,12 @@ function Test() {
}); });
}; };
const profileId = 'cl95u9ju500eo7ipd54kurv8d'; // Remember to change this filed after testing deleting const profileId = 'cl96stky5002ew32gx2kale2x'; // Remember to change this filed after testing deleting
const data = trpc.useQuery([ const data = trpc.useQuery([
`offers.profile.listOne`, `offers.profile.listOne`,
{ {
profileId, profileId,
token: 'dccc05133962013ba8b4ee396e51baee1b53a66051732b48fd015129ae1d593e', token: 'afca11e436d21bde24543718fa957c6c625335439dc504f24ee35eae7b5ef1ba',
}, },
], { ], {
onError(err) { onError(err) {
@ -145,16 +146,385 @@ function Test() {
const handleDelete = (id: string) => { const handleDelete = (id: string) => {
deleteMutation.mutate({ deleteMutation.mutate({
profileId: id, profileId: id,
token: 'dccc05133962013ba8b4ee396e51baee1b53a66051732b48fd015129ae1d593e', token: 'afca11e436d21bde24543718fa957c6c625335439dc504f24ee35eae7b5ef1ba',
}); });
}; };
const updateMutation = trpc.useMutation(['offers.profile.update'], {
onError(err: any) {
alert(err);
},
onSuccess(response) {
setCreatedData(JSON.stringify(response));
},
});
const handleUpdate = () => {
updateMutation.mutate({
background: {
educations: [
{
backgroundId: "cl96stky6002fw32g6vj4meyr",
endDate: new Date("2018-09-30T07:58:54.000Z"),
field: "Computer Science",
id: "cl96stky6002gw32gey2ffawd",
school: "National University of Singapore",
startDate: new Date("2014-09-30T07:58:54.000Z"),
type: "Bachelors"
}
],
experiences: [
{
backgroundId: "cl96stky6002fw32g6vj4meyr",
company: {
createdAt: new Date("2022-10-12T16:19:05.196Z"),
description: "Meta Platforms, Inc., doing business as Meta and formerly named Facebook, Inc., and TheFacebook, Inc., is an American multinational technology conglomerate based in Menlo Park, California. The company owns Facebook, Instagram, and WhatsApp, among other products and services.",
id: "cl95u79f000007im531ysjg79",
logoUrl: "https://logo.clearbit.com/meta.com",
name: "Meta",
slug: "meta",
updatedAt: new Date("2022-10-12T16:19:05.196Z")
},
companyId: "cl95u79f000007im531ysjg79",
durationInMonths: 24,
id: "cl96stky6002iw32gpt6t87s2",
jobType: "FULLTIME",
level: "Junior",
monthlySalary: null,
monthlySalaryId: null,
specialization: "Front End",
title: "Software Engineer",
totalCompensation: {
currency: "SGD",
id: "cl96stky6002jw32g73svfacr",
value: 104100
},
totalCompensationId: "cl96stky6002jw32g73svfacr"
}
],
id: "cl96stky6002fw32g6vj4meyr",
offersProfileId: "cl96stky5002ew32gx2kale2x",
specificYoes: [
{
backgroundId: "cl96stky6002fw32g6vj4meyr",
domain: "Backend",
id: "cl96t7890004tw32g5in3px5j",
yoe: 2
},
{
backgroundId: "cl96stky6002fw32g6vj4meyr",
domain: "Backend",
id: "cl96tb87x004xw32gnu17jbzv",
yoe: 2
},
{
backgroundId: "cl96stky6002fw32g6vj4meyr",
domain: "Backend",
id: "cl976t39z00007iygt3np3cgo",
yoe: 2
},
{
backgroundId: "cl96stky6002fw32g6vj4meyr",
domain: "Front End",
id: "cl96stky7002mw32gn4jc7uml",
yoe: 2
},
{
backgroundId: "cl96stky6002fw32g6vj4meyr",
domain: "Full Stack",
id: "cl96stky7002nw32gpprghtxr",
yoe: 2
},
{
backgroundId: "cl96stky6002fw32g6vj4meyr",
domain: "Backend",
id: "cl976we5h000p7iygiomdo9fh",
yoe: 2
}
],
totalYoe: 6
},
createdAt: "2022-10-13T08:28:13.518Z",
discussion: [],
id: "cl96stky5002ew32gx2kale2x",
isEditable: true,
offers: [
{
OffersFullTime: {
baseSalary: {
currency: "SGD",
id: "cl976t4de00067iyg3pjir7k9",
value: 1999999999
},
baseSalaryId: "cl976t4de00067iyg3pjir7k9",
bonus: {
currency: "SGD",
id: "cl976t4de00087iygcnlmh8aw",
value: 1410065407
},
bonusId: "cl976t4de00087iygcnlmh8aw",
id: "cl976t4de00057iygq3ktce3v",
level: "EXPERT",
specialization: "FRONTEND",
stocks: {
currency: "SGD",
id: "cl976t4df000a7iygkrsgr1xh",
value: -558038585
},
stocksId: "cl976t4df000a7iygkrsgr1xh",
title: "Software Engineer",
totalCompensation: {
currency: "SGD",
id: "cl976t4df000c7iyg73ryf5uw",
value: 55555555
},
totalCompensationId: "cl976t4df000c7iyg73ryf5uw"
},
OffersIntern: null,
comments: "this IS SO IEUHDAEUIGDI",
company: {
createdAt: new Date("2022-10-12T16:19:05.196Z"),
description: "Meta Platforms, Inc., doing business as Meta and formerly named Facebook, Inc., and TheFacebook, Inc., is an American multinational technology conglomerate based in Menlo Park, California. The company owns Facebook, Instagram, and WhatsApp, among other products and services.",
id: "cl95u79f000007im531ysjg79",
logoUrl: "https://logo.clearbit.com/meta.com",
name: "Meta",
slug: "meta",
updatedAt: new Date("2022-10-12T16:19:05.196Z")
},
companyId: "cl95u79f000007im531ysjg79",
id: "cl976t4de00047iygl0zbce11",
jobType: "FULLTIME",
location: "Singapore, Singapore",
monthYearReceived: new Date("2022-09-30T07:58:54.000Z"),
negotiationStrategy: "Charmed the guy with my face",
offersFullTimeId: "cl976t4de00057iygq3ktce3v",
offersInternId: null,
profileId: "cl96stky5002ew32gx2kale2x"
},
{
OffersFullTime: {
baseSalary: {
currency: "SGD",
id: "cl96stky80033w32gxw5goc4z",
value: 84000
},
baseSalaryId: "cl96stky80033w32gxw5goc4z",
bonus: {
currency: "SGD",
id: "cl96stky80035w32gajjwdo1p",
value: 123456789
},
bonusId: "cl96stky80035w32gajjwdo1p",
id: "cl96stky80032w32gep9ovgj3",
level: "Junior",
specialization: "Front End",
stocks: {
currency: "SGD",
id: "cl96stky90037w32gu04t6ybh",
value: 100
},
stocksId: "cl96stky90037w32gu04t6ybh",
title: "Software Engineer",
totalCompensation: {
currency: "SGD",
id: "cl96stky90039w32glbpktd0o",
value: 104100
},
totalCompensationId: "cl96stky90039w32glbpktd0o"
},
OffersIntern: null,
comments: null,
company: {
createdAt: new Date("2022-10-12T16:19:05.196Z"),
description: "Meta Platforms, Inc., doing business as Meta and formerly named Facebook, Inc., and TheFacebook, Inc., is an American multinational technology conglomerate based in Menlo Park, California. The company owns Facebook, Instagram, and WhatsApp, among other products and services.",
id: "cl95u79f000007im531ysjg79",
logoUrl: "https://logo.clearbit.com/meta.com",
name: "Meta",
slug: "meta",
updatedAt: new Date("2022-10-12T16:19:05.196Z")
},
companyId: "cl95u79f000007im531ysjg79",
id: "cl96stky80031w32gau9mu1gs",
jobType: "FULLTIME",
location: "Singapore, Singapore",
monthYearReceived: new Date("2022-09-30T07:58:54.000Z"),
negotiationStrategy: "Leveraged having million offers",
offersFullTimeId: "cl96stky80032w32gep9ovgj3",
offersInternId: null,
profileId: "cl96stky5002ew32gx2kale2x"
},
{
OffersFullTime: {
baseSalary: {
currency: "SGD",
id: "cl96stky9003dw32gcvqbijlo",
value: 1
},
baseSalaryId: "cl96stky9003dw32gcvqbijlo",
bonus: {
currency: "SGD",
id: "cl96stky9003fw32goc3zqxwr",
value: 0
},
bonusId: "cl96stky9003fw32goc3zqxwr",
id: "cl96stky9003cw32g5v10izfu",
level: "Senior",
specialization: "Front End",
stocks: {
currency: "SGD",
id: "cl96stky9003hw32g1lbbkqqr",
value: 999999
},
stocksId: "cl96stky9003hw32g1lbbkqqr",
title: "Software Engineer DOG",
totalCompensation: {
currency: "SGD",
id: "cl96stky9003jw32gzumcoi7v",
value: 999999
},
totalCompensationId: "cl96stky9003jw32gzumcoi7v"
},
OffersIntern: null,
comments: null,
company: {
createdAt: new Date("2022-10-12T16:19:05.196Z"),
description: "Meta Platforms, Inc., doing business as Meta and formerly named Facebook, Inc., and TheFacebook, Inc., is an American multinational technology conglomerate based in Menlo Park, California. The company owns Facebook, Instagram, and WhatsApp, among other products and services.",
id: "cl95u79f000007im531ysjg79",
logoUrl: "https://logo.clearbit.com/meta.com",
name: "Meta",
slug: "meta",
updatedAt: new Date("2022-10-12T16:19:05.196Z")
},
companyId: "cl95u79f000007im531ysjg79",
id: "cl96stky9003bw32gc3l955vr",
jobType: "FULLTIME",
location: "Singapore, Singapore",
monthYearReceived: new Date("2022-09-30T07:58:54.000Z"),
negotiationStrategy: "LOst out having multiple offers",
offersFullTimeId: "cl96stky9003cw32g5v10izfu",
offersInternId: null,
profileId: "cl96stky5002ew32gx2kale2x"
},
{
OffersFullTime: {
baseSalary: {
currency: "SGD",
id: "cl976wf28000v7iygmk1b7qaq",
value: 1999999999
},
baseSalaryId: "cl976wf28000v7iygmk1b7qaq",
bonus: {
currency: "SGD",
id: "cl976wf28000x7iyg63w7kcli",
value: 1410065407
},
bonusId: "cl976wf28000x7iyg63w7kcli",
id: "cl976wf28000u7iyg6euei8e9",
level: "EXPERT",
specialization: "FRONTEND",
stocks: {
currency: "SGD",
id: "cl976wf28000z7iyg9ivun6ap",
value: 111222333
},
stocksId: "cl976wf28000z7iyg9ivun6ap",
title: "Software Engineer",
totalCompensation: {
currency: "SGD",
id: "cl976wf2800117iygmzsc0xit",
value: 55555555
},
totalCompensationId: "cl976wf2800117iygmzsc0xit"
},
OffersIntern: null,
comments: "this IS SO COOL",
company: {
createdAt: new Date("2022-10-12T16:19:05.196Z"),
description: "Meta Platforms, Inc., doing business as Meta and formerly named Facebook, Inc., and TheFacebook, Inc., is an American multinational technology conglomerate based in Menlo Park, California. The company owns Facebook, Instagram, and WhatsApp, among other products and services.",
id: "cl95u79f000007im531ysjg79",
logoUrl: "https://logo.clearbit.com/meta.com",
name: "Meta",
slug: "meta",
updatedAt: new Date("2022-10-12T16:19:05.196Z")
},
companyId: "cl95u79f000007im531ysjg79",
id: "cl976wf28000t7iyga4noyz7s",
jobType: "FULLTIME",
location: "Singapore, Singapore",
monthYearReceived: new Date("2022-09-30T07:58:54.000Z"),
negotiationStrategy: "Charmed the guy with my face",
offersFullTimeId: "cl976wf28000u7iyg6euei8e9",
offersInternId: null,
profileId: "cl96stky5002ew32gx2kale2x"
},
{
OffersFullTime: {
baseSalary: {
currency: "SGD",
id: "cl96tbb3o0053w32gz11paaxu",
value: 1999999999
},
baseSalaryId: "cl96tbb3o0053w32gz11paaxu",
bonus: {
currency: "SGD",
id: "cl96tbb3o0055w32gpyqgz5hx",
value: 1410065407
},
bonusId: "cl96tbb3o0055w32gpyqgz5hx",
id: "cl96tbb3o0052w32guguajzin",
level: "EXPERT",
specialization: "FRONTEND",
stocks: {
currency: "SGD",
id: "cl96tbb3o0057w32gu4nyxguf",
value: 500
},
stocksId: "cl96tbb3o0057w32gu4nyxguf",
title: "Software Engineer",
totalCompensation: {
currency: "SGD",
id: "cl96tbb3o0059w32gm3iy1zk4",
value: 55555555
},
totalCompensationId: "cl96tbb3o0059w32gm3iy1zk4"
},
OffersIntern: null,
comments: "this rocks",
company: {
createdAt: new Date("2022-10-12T16:19:05.196Z"),
description: "Meta Platforms, Inc., doing business as Meta and formerly named Facebook, Inc., and TheFacebook, Inc., is an American multinational technology conglomerate based in Menlo Park, California. The company owns Facebook, Instagram, and WhatsApp, among other products and services.",
id: "cl95u79f000007im531ysjg79",
logoUrl: "https://logo.clearbit.com/meta.com",
name: "Meta",
slug: "meta",
updatedAt: new Date("2022-10-12T16:19:05.196Z")
},
companyId: "cl95u79f000007im531ysjg79",
id: "cl96tbb3o0051w32gjrpaiiit",
jobType: "FULLTIME",
location: "Singapore, Singapore",
monthYearReceived: new Date("2022-09-30T07:58:54.000Z"),
negotiationStrategy: "Charmed the guy with my face",
offersFullTimeId: "cl96tbb3o0052w32guguajzin",
offersInternId: null,
profileId: "cl96stky5002ew32gx2kale2x"
}
],
profileName: "ailing bryann stuart ziqing",
token: "afca11e436d21bde24543718fa957c6c625335439dc504f24ee35eae7b5ef1ba",
userId: null
});
}
return ( return (
<> <>
<div>{createdData}</div> <div>{createdData}</div>
<button type="button" onClick={handleClick}> <button type="button" onClick={handleClick}>
Click Me! Click Me!
</button> </button>
<button type="button" onClick={handleUpdate}>
UPDATE!
</button>
<button <button
className="text-danger-600" className="text-danger-600"
type="button" type="button"

@ -9,50 +9,92 @@ import type { offersProfile } from '~/types/offers-profile';
const valuation = z.object({ const valuation = z.object({
currency: z.string(), currency: z.string(),
id: z.string().optional(),
value: z.number(), value: z.number(),
}); });
// TODO: handle both full time and intern const company = z.object({
createdAt: z.date(),
description: z.string().nullish(),
id: z.string().optional(),
logoUrl: z.string().nullish(),
name: z.string(),
slug: z.string(),
updatedAt: z.date()
})
const offer = z.object({ const offer = z.object({
comments: z.string().optional(), OffersFullTime: z.object({
companyId: z.string(), baseSalary: valuation.nullish(),
job: z.object({ baseSalaryId: z.string().nullish(),
base: valuation.optional(), // Full time bonus: valuation.nullish(),
bonus: valuation.optional(), // Full time bonusId: z.string().nullish(),
internshipCycle: z.string().optional(), // Intern id: z.string().optional(),
level: z.string().optional(), // Full time level: z.string().nullish(),
monthlySalary: valuation.optional(), // Intern
specialization: z.string(), specialization: z.string(),
startYear: z.number().optional(), // Intern stocks: valuation.nullish(),
stocks: valuation.optional(), // Full time stocksId: z.string().nullish(),
title: z.string(), title: z.string(),
totalCompensation: valuation.optional(), // Full time totalCompensation: valuation.nullish(),
}), totalCompensationId: z.string().nullish(),
}).nullish(),
OffersIntern: z.object({
id: z.string().optional(),
internshipCycle: z.string().nullish(),
monthlySalary: valuation.nullish(),
specialization: z.string(),
startYear: z.number().nullish(),
title: z.string(),
totalCompensation: valuation.nullish(), // Full time
}).nullish(),
comments: z.string().nullish(),
company: company.nullish(),
companyId: z.string(),
id: z.string().optional(),
jobType: z.string(), jobType: z.string(),
location: z.string(), location: z.string(),
monthYearReceived: z.date(), monthYearReceived: z.date(),
negotiationStrategy: z.string().optional(), negotiationStrategy: z.string().nullish(),
offersFullTimeId: z.string().nullish(),
offersInternId: z.string().nullish(),
profileId: z.string().nullish(),
}); });
const experience = z.object({ const experience = z.object({
companyId: z.string().optional(), backgroundId: z.string().nullish(),
durationInMonths: z.number().optional(), company: company.nullish(),
jobType: z.string().optional(), companyId: z.string().nullish(),
level: z.string().optional(), durationInMonths: z.number().nullish(),
monthlySalary: valuation.optional(), id: z.string().optional(),
specialization: z.string().optional(), jobType: z.string().nullish(),
title: z.string().optional(), level: z.string().nullish(),
totalCompensation: valuation.optional(), monthlySalary: valuation.nullish(),
monthlySalaryId: z.string().nullish(),
specialization: z.string().nullish(),
title: z.string().nullish(),
totalCompensation: valuation.nullish(),
totalCompensationId: z.string().nullish()
}); });
const education = z.object({ const education = z.object({
endDate: z.date().optional(), backgroundId: z.string().nullish(),
field: z.string().optional(), endDate: z.date().nullish(),
school: z.string().optional(), field: z.string().nullish(),
startDate: z.date().optional(), id: z.string().optional(),
type: z.string().optional(), school: z.string().nullish(),
startDate: z.date().nullish(),
type: z.string().nullish(),
}); });
const reply = z.object({
createdAt: z.date().nullish(),
id: z.string().optional(),
messages: z.string().nullish(),
profileId: z.string().nullish(),
replyingToId: z.string().nullish(),
userId: z.string().nullish()
})
type WithIsEditable<T> = T & { type WithIsEditable<T> = T & {
isEditable: boolean; isEditable: boolean;
}; };
@ -272,24 +314,25 @@ export const offersProfileRouter = createRouter()
create: input.offers.map((x) => { create: input.offers.map((x) => {
if ( if (
x.jobType === 'INTERN' && x.jobType === 'INTERN' &&
x.job.internshipCycle !== undefined && x.OffersIntern &&
x.job.monthlySalary?.currency !== undefined && x.OffersIntern.internshipCycle &&
x.job.monthlySalary.value !== undefined && x.OffersIntern.monthlySalary?.currency &&
x.job.startYear !== undefined x.OffersIntern.monthlySalary.value &&
x.OffersIntern.startYear
) { ) {
return { return {
OffersIntern: { OffersIntern: {
create: { create: {
internshipCycle: x.job.internshipCycle, internshipCycle: x.OffersIntern.internshipCycle,
monthlySalary: { monthlySalary: {
create: { create: {
currency: x.job.monthlySalary?.currency, currency: x.OffersIntern.monthlySalary?.currency,
value: x.job.monthlySalary?.value, value: x.OffersIntern.monthlySalary?.value,
}, },
}, },
specialization: x.job.specialization, specialization: x.OffersIntern.specialization,
startYear: x.job.startYear, startYear: x.OffersIntern.startYear,
title: x.job.title, title: x.OffersIntern.title,
}, },
}, },
comments: x.comments, comments: x.comments,
@ -306,44 +349,45 @@ export const offersProfileRouter = createRouter()
} }
if ( if (
x.jobType === 'FULLTIME' && x.jobType === 'FULLTIME' &&
x.job.base?.currency !== undefined && x.OffersFullTime &&
x.job.base?.value !== undefined && x.OffersFullTime.baseSalary?.currency &&
x.job.bonus?.currency !== undefined && x.OffersFullTime.baseSalary?.value &&
x.job.bonus?.value !== undefined && x.OffersFullTime.bonus?.currency &&
x.job.stocks?.currency !== undefined && x.OffersFullTime.bonus?.value &&
x.job.stocks?.value !== undefined && x.OffersFullTime.stocks?.currency &&
x.job.totalCompensation?.currency !== undefined && x.OffersFullTime.stocks?.value &&
x.job.totalCompensation?.value !== undefined && x.OffersFullTime.totalCompensation?.currency &&
x.job.level !== undefined x.OffersFullTime.totalCompensation?.value &&
x.OffersFullTime.level
) { ) {
return { return {
OffersFullTime: { OffersFullTime: {
create: { create: {
baseSalary: { baseSalary: {
create: { create: {
currency: x.job.base?.currency, currency: x.OffersFullTime.baseSalary?.currency,
value: x.job.base?.value, value: x.OffersFullTime.baseSalary?.value,
}, },
}, },
bonus: { bonus: {
create: { create: {
currency: x.job.bonus?.currency, currency: x.OffersFullTime.bonus?.currency,
value: x.job.bonus?.value, value: x.OffersFullTime.bonus?.value,
}, },
}, },
level: x.job.level, level: x.OffersFullTime.level,
specialization: x.job.specialization, specialization: x.OffersFullTime.specialization,
stocks: { stocks: {
create: { create: {
currency: x.job.stocks?.currency, currency: x.OffersFullTime.stocks?.currency,
value: x.job.stocks?.value, value: x.OffersFullTime.stocks?.value,
}, },
}, },
title: x.job.title, title: x.OffersFullTime.title,
totalCompensation: { totalCompensation: {
create: { create: {
currency: x.job.totalCompensation?.currency, currency: x.OffersFullTime.totalCompensation?.currency,
value: x.job.totalCompensation?.value, value: x.OffersFullTime.totalCompensation?.value,
}, },
}, },
}, },
@ -426,7 +470,550 @@ export const offersProfileRouter = createRouter()
} }
// TODO: Throw 401 // TODO: Throw 401
}, },
})
.mutation('update', {
input: z.object({
background: z.object({
educations: z.array(education),
experiences: z.array(experience),
id: z.string().optional(),
offersProfileId: z.string().optional(),
specificYoes: z.array(
z.object({
backgroundId: z.string().optional(),
domain: z.string(),
id: z.string().optional(),
yoe: z.number()
}),
),
totalYoe: z.number(),
}),
createdAt: z.string().optional(),
discussion: z.array(reply),
id: z.string(),
isEditable: z.boolean().nullish(),
offers: z.array(offer),
profileName: z.string(),
token: z.string(),
userId: z.string().nullish()
}),
async resolve({ ctx, input }) {
const profileToUpdate = await ctx.prisma.offersProfile.findFirst({
where: {
id: input.id,
},
});
const profileEditToken = profileToUpdate?.editToken;
if (profileEditToken === input.token) {
await ctx.prisma.offersProfile.update({
data: {
profileName: input.profileName,
},
where: {
id: input.id,
}
}); });
// .mutation('update', {
// }); await ctx.prisma.offersBackground.update({
data: {
totalYoe: input.background.totalYoe
},
where: {
id: input.background.id
}
})
for (const edu of input.background.educations) {
if (edu.id) {
await ctx.prisma.offersEducation.update({
data: {
endDate: edu.endDate,
field: edu.field,
school: edu.school,
startDate: edu.startDate,
type: edu.type,
},
where: {
id: edu.id
}
})
} else {
await ctx.prisma.offersBackground.update({
data: {
educations: {
create:
{
endDate: edu.endDate,
field: edu.field,
school: edu.school,
startDate: edu.startDate,
type: edu.type,
}
}
},
where: {
id: input.background.id
}
})
}
}
for (const exp of input.background.experiences) {
if (exp.id) {
await ctx.prisma.offersExperience.update({
data: {
companyId: exp.companyId,
durationInMonths: exp.durationInMonths,
level: exp.level,
specialization: exp.specialization,
},
where: {
id: exp.id
}
})
if (exp.monthlySalary) {
await ctx.prisma.offersCurrency.update({
data: {
currency: exp.monthlySalary.currency,
value: exp.monthlySalary.value,
},
where: {
id: exp.monthlySalary.id
}
})
}
if (exp.totalCompensation) {
await ctx.prisma.offersCurrency.update({
data: {
currency: exp.totalCompensation.currency,
value: exp.totalCompensation.value,
},
where: {
id: exp.totalCompensation.id
}
})
}
} else if (!exp.id) {
if (exp.jobType === 'FULLTIME' && exp.totalCompensation?.currency !== undefined && exp.totalCompensation.value !== undefined) {
if (exp.companyId) {
await ctx.prisma.offersBackground.update({
data: {
experiences: {
create: {
company: {
connect: {
id: exp.companyId,
},
},
durationInMonths: exp.durationInMonths,
jobType: exp.jobType,
level: exp.level,
specialization: exp.specialization,
title: exp.title,
totalCompensation: {
create: {
currency: exp.totalCompensation?.currency,
value: exp.totalCompensation?.value,
},
},
},
}
},
where: {
id: input.background.id
}
})
} else {
await ctx.prisma.offersBackground.update({
data: {
experiences: {
create: {
durationInMonths: exp.durationInMonths,
jobType: exp.jobType,
level: exp.level,
specialization: exp.specialization,
title: exp.title,
totalCompensation: {
create: {
currency: exp.totalCompensation?.currency,
value: exp.totalCompensation?.value,
},
},
}
}
},
where: {
id: input.background.id
}
})
}
}
else if (
exp.jobType === 'INTERN' &&
exp.monthlySalary?.currency !== undefined &&
exp.monthlySalary.value !== undefined
) {
if (exp.companyId) {
await ctx.prisma.offersBackground.update({
data: {
experiences: {
create: {
company: {
connect: {
id: exp.companyId,
},
},
durationInMonths: exp.durationInMonths,
jobType: exp.jobType,
monthlySalary: {
create: {
currency: exp.monthlySalary?.currency,
value: exp.monthlySalary?.value,
},
},
specialization: exp.specialization,
title: exp.title,
}
}
},
where: {
id: input.background.id
}
})
} else {
await ctx.prisma.offersBackground.update({
data: {
experiences: {
create: {
durationInMonths: exp.durationInMonths,
jobType: exp.jobType,
monthlySalary: {
create: {
currency: exp.monthlySalary?.currency,
value: exp.monthlySalary?.value,
},
},
specialization: exp.specialization,
title: exp.title,
}
}
},
where: {
id: input.background.id
}
})
}
}
}
}
for (const yoe of input.background.specificYoes) {
if (yoe.id) {
await ctx.prisma.offersSpecificYoe.update({
data: {
...yoe
},
where: {
id: yoe.id
}
})
} else {
await ctx.prisma.offersBackground.update({
data: {
specificYoes: {
create:
{
domain: yoe.domain,
yoe: yoe.yoe,
}
}
},
where: {
id: input.background.id
}
})
}
}
for (const offerToUpdate of input.offers) {
if (offerToUpdate.id) {
await ctx.prisma.offersOffer.update({
data: {
comments: offerToUpdate.comments,
companyId: offerToUpdate.companyId,
location: offerToUpdate.location,
monthYearReceived: offerToUpdate.monthYearReceived,
negotiationStrategy: offerToUpdate.negotiationStrategy,
},
where: {
id: offerToUpdate.id
}
})
if (offerToUpdate.jobType === "INTERN" || offerToUpdate.jobType === "FULLTIME") {
await ctx.prisma.offersOffer.update({
data: {
jobType: offerToUpdate.jobType
},
where: {
id: offerToUpdate.id
}
})
}
if (offerToUpdate.OffersIntern?.monthlySalary) {
await ctx.prisma.offersIntern.update({
data: {
internshipCycle: offerToUpdate.OffersIntern.internshipCycle ?? undefined,
specialization: offerToUpdate.OffersIntern.specialization,
startYear: offerToUpdate.OffersIntern.startYear ?? undefined,
title: offerToUpdate.OffersIntern.title,
},
where: {
id: offerToUpdate.OffersIntern.id,
}
})
await ctx.prisma.offersCurrency.update({
data: {
currency: offerToUpdate.OffersIntern.monthlySalary.currency,
value: offerToUpdate.OffersIntern.monthlySalary.value
},
where: {
id: offerToUpdate.OffersIntern.monthlySalary.id
}
})
}
if (offerToUpdate.OffersFullTime?.totalCompensation) {
await ctx.prisma.offersFullTime.update({
data: {
level: offerToUpdate.OffersFullTime.level ?? undefined,
specialization: offerToUpdate.OffersFullTime.specialization,
title: offerToUpdate.OffersFullTime.title,
},
where: {
id: offerToUpdate.OffersFullTime.id,
}
})
if (offerToUpdate.OffersFullTime.baseSalary) {
await ctx.prisma.offersCurrency.update({
data: {
currency: offerToUpdate.OffersFullTime.baseSalary.currency,
value: offerToUpdate.OffersFullTime.baseSalary.value
},
where: {
id: offerToUpdate.OffersFullTime.baseSalary.id
}
})
}
if (offerToUpdate.OffersFullTime.bonus) {
await ctx.prisma.offersCurrency.update({
data: {
currency: offerToUpdate.OffersFullTime.bonus.currency,
value: offerToUpdate.OffersFullTime.bonus.value
},
where: {
id: offerToUpdate.OffersFullTime.bonus.id
}
})
}
if (offerToUpdate.OffersFullTime.stocks) {
await ctx.prisma.offersCurrency.update({
data: {
currency: offerToUpdate.OffersFullTime.stocks.currency,
value: offerToUpdate.OffersFullTime.stocks.value
},
where: {
id: offerToUpdate.OffersFullTime.stocks.id
}
})
}
await ctx.prisma.offersCurrency.update({
data: {
currency: offerToUpdate.OffersFullTime.totalCompensation.currency,
value: offerToUpdate.OffersFullTime.totalCompensation.value
},
where: {
id: offerToUpdate.OffersFullTime.totalCompensation.id
}
})
}
} else {
if (
offerToUpdate.jobType === "INTERN" &&
offerToUpdate.OffersIntern &&
offerToUpdate.OffersIntern.internshipCycle &&
offerToUpdate.OffersIntern.monthlySalary?.currency &&
offerToUpdate.OffersIntern.monthlySalary.value &&
offerToUpdate.OffersIntern.startYear
) {
await ctx.prisma.offersProfile.update({
data: {
offers: {
create: {
OffersIntern: {
create: {
internshipCycle: offerToUpdate.OffersIntern.internshipCycle,
monthlySalary: {
create: {
currency: offerToUpdate.OffersIntern.monthlySalary?.currency,
value: offerToUpdate.OffersIntern.monthlySalary?.value,
},
},
specialization: offerToUpdate.OffersIntern.specialization,
startYear: offerToUpdate.OffersIntern.startYear,
title: offerToUpdate.OffersIntern.title,
},
},
comments: offerToUpdate.comments,
company: {
connect: {
id: offerToUpdate.companyId,
},
},
jobType: offerToUpdate.jobType,
location: offerToUpdate.location,
monthYearReceived: offerToUpdate.monthYearReceived,
negotiationStrategy: offerToUpdate.negotiationStrategy,
}
}
},
where: {
id: input.id,
}
})
}
if (
offerToUpdate.jobType === 'FULLTIME' &&
offerToUpdate.OffersFullTime &&
offerToUpdate.OffersFullTime.baseSalary?.currency &&
offerToUpdate.OffersFullTime.baseSalary?.value &&
offerToUpdate.OffersFullTime.bonus?.currency &&
offerToUpdate.OffersFullTime.bonus?.value &&
offerToUpdate.OffersFullTime.stocks?.currency &&
offerToUpdate.OffersFullTime.stocks?.value &&
offerToUpdate.OffersFullTime.totalCompensation?.currency &&
offerToUpdate.OffersFullTime.totalCompensation?.value &&
offerToUpdate.OffersFullTime.level
) {
await ctx.prisma.offersProfile.update({
data: {
offers: {
create: {
OffersFullTime: {
create: {
baseSalary: {
create: {
currency: offerToUpdate.OffersFullTime.baseSalary?.currency,
value: offerToUpdate.OffersFullTime.baseSalary?.value,
},
},
bonus: {
create: {
currency: offerToUpdate.OffersFullTime.bonus?.currency,
value: offerToUpdate.OffersFullTime.bonus?.value,
},
},
level: offerToUpdate.OffersFullTime.level,
specialization: offerToUpdate.OffersFullTime.specialization,
stocks: {
create: {
currency: offerToUpdate.OffersFullTime.stocks?.currency,
value: offerToUpdate.OffersFullTime.stocks?.value,
},
},
title: offerToUpdate.OffersFullTime.title,
totalCompensation: {
create: {
currency: offerToUpdate.OffersFullTime.totalCompensation?.currency,
value: offerToUpdate.OffersFullTime.totalCompensation?.value,
},
},
},
},
comments: offerToUpdate.comments,
company: {
connect: {
id: offerToUpdate.companyId,
},
},
jobType: offerToUpdate.jobType,
location: offerToUpdate.location,
monthYearReceived: offerToUpdate.monthYearReceived,
negotiationStrategy: offerToUpdate.negotiationStrategy,
}
}
},
where: {
id: input.id,
}
})
}
}
}
// TODO: add analysis to profile object then return
const result = await ctx.prisma.offersProfile.findFirst({
include: {
background: {
include: {
educations: true,
experiences: {
include: {
company: true,
monthlySalary: true,
totalCompensation: true,
},
},
specificYoes: true,
},
},
discussion: {
include: {
replies: true,
replyingTo: true,
},
},
offers: {
include: {
OffersFullTime: {
include: {
baseSalary: true,
bonus: true,
stocks: true,
totalCompensation: true,
},
},
OffersIntern: {
include: {
monthlySalary: true,
},
},
company: true,
},
},
},
where: {
id: input.id,
},
});
if (result) {
return exclude(computeIsEditable(result, input.token), 'editToken')
}
throw new trpc.TRPCError({
code: 'NOT_FOUND',
message: 'Profile does not exist',
});
}
throw new trpc.TRPCError({
code: 'UNAUTHORIZED',
message: 'Invalid token.',
});
},
});

Loading…
Cancel
Save