mirror of
https://github.com/yangshun/tech-interview-handbook.git
synced 2025-07-29 21:23:14 +08:00
[offers][feat] add edit profile endpoint
This commit is contained in:
@ -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', {
|
.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,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
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.',
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
Reference in New Issue
Block a user