From d5edb6da604acad13cedeb59c84afe5914df440e Mon Sep 17 00:00:00 2001 From: BryannYeap Date: Tue, 11 Oct 2022 12:19:01 +0800 Subject: [PATCH] [offers][feat] Add delete OfferProfile API --- apps/portal/prisma/schema.prisma | 27 +- apps/portal/src/pages/offers/test.tsx | 34 +- .../src/pages/offers/testCreateProfile.tsx | 266 ++++---- .../server/router/offers-profile-router.ts | 628 +++++++++--------- apps/portal/src/server/router/offers.ts | 2 + 5 files changed, 517 insertions(+), 440 deletions(-) diff --git a/apps/portal/prisma/schema.prisma b/apps/portal/prisma/schema.prisma index 70a88985..1fba7c6a 100644 --- a/apps/portal/prisma/schema.prisma +++ b/apps/portal/prisma/schema.prisma @@ -201,7 +201,7 @@ model OffersBackground { educations OffersEducation[] // For extensibility in the future - profile OffersProfile @relation(fields: [offersProfileId], references: [id]) + profile OffersProfile @relation(fields: [offersProfileId], references: [id], onDelete: Cascade) offersProfileId String @unique } @@ -211,7 +211,7 @@ model OffersSpecificYoe { yoe Int domain String - background OffersBackground @relation(fields: [backgroundId], references: [id]) + background OffersBackground @relation(fields: [backgroundId], references: [id], onDelete: Cascade) backgroundId String } @@ -237,7 +237,7 @@ model OffersExperience { monthlySalary OffersCurrency? @relation("ExperienceMonthlySalary", fields: [monthlySalaryId], references: [id]) monthlySalaryId String? @unique - background OffersBackground @relation(fields: [backgroundId], references: [id]) + background OffersBackground @relation(fields: [backgroundId], references: [id], onDelete: Cascade) backgroundId String } @@ -270,12 +270,11 @@ model OffersEducation { type String? field String? - // Add more fields school String? startDate DateTime? endDate DateTime? - background OffersBackground @relation(fields: [backgroundId], references: [id]) + background OffersBackground @relation(fields: [backgroundId], references: [id], onDelete: Cascade) backgroundId String } @@ -289,14 +288,14 @@ model OffersReply { replyingTo OffersReply? @relation("ReplyThread", fields: [replyingToId], references: [id]) replies OffersReply[] @relation("ReplyThread") - profile OffersProfile @relation(fields: [profileId], references: [id]) + profile OffersProfile @relation(fields: [profileId], references: [id], onDelete: Cascade) profileId String } model OffersOffer { id String @id @default(cuid()) - profile OffersProfile @relation(fields: [profileId], references: [id]) + profile OffersProfile @relation(fields: [profileId], references: [id], onDelete: Cascade) profileId String company Company @relation(fields: [companyId], references: [id]) @@ -309,10 +308,10 @@ model OffersOffer { jobType JobType - OffersIntern OffersIntern? @relation(fields: [offersInternId], references: [id]) + OffersIntern OffersIntern? @relation(fields: [offersInternId], references: [id], onDelete: Cascade) offersInternId String? @unique - OffersFullTime OffersFullTime? @relation(fields: [offersFullTimeId], references: [id]) + OffersFullTime OffersFullTime? @relation(fields: [offersFullTimeId], references: [id], onDelete: Cascade) offersFullTimeId String? @unique } @@ -323,7 +322,7 @@ model OffersIntern { specialization String internshipCycle String startYear Int - monthlySalary OffersCurrency @relation(fields: [monthlySalaryId], references: [id]) + monthlySalary OffersCurrency @relation(fields: [monthlySalaryId], references: [id], onDelete: Cascade) monthlySalaryId String @unique OffersOffer OffersOffer? @@ -334,13 +333,13 @@ model OffersFullTime { title String specialization String level String - totalCompensation OffersCurrency @relation("OfferTotalCompensation", fields: [totalCompensationId], references: [id]) + totalCompensation OffersCurrency @relation("OfferTotalCompensation", fields: [totalCompensationId], references: [id], onDelete: Cascade) totalCompensationId String @unique - baseSalary OffersCurrency @relation("OfferBaseSalary", fields: [baseSalaryId], references: [id]) + baseSalary OffersCurrency @relation("OfferBaseSalary", fields: [baseSalaryId], references: [id], onDelete: Cascade) baseSalaryId String @unique - bonus OffersCurrency @relation("OfferBonus", fields: [bonusId], references: [id]) + bonus OffersCurrency @relation("OfferBonus", fields: [bonusId], references: [id], onDelete: Cascade) bonusId String @unique - stocks OffersCurrency @relation("OfferStocks", fields: [stocksId], references: [id]) + stocks OffersCurrency @relation("OfferStocks", fields: [stocksId], references: [id], onDelete: Cascade) stocksId String @unique OffersOffer OffersOffer? diff --git a/apps/portal/src/pages/offers/test.tsx b/apps/portal/src/pages/offers/test.tsx index fa6880fc..e226fb97 100644 --- a/apps/portal/src/pages/offers/test.tsx +++ b/apps/portal/src/pages/offers/test.tsx @@ -14,7 +14,39 @@ function Test() { }, ]); - return <>{JSON.stringify(data.data)}; + const deleteMutation = trpc.useMutation(['offers.profile.delete']); + + const handleDelete = (id: string) => { + deleteMutation.mutate({ id }); + }; + + return ( + + ); } export default Test; diff --git a/apps/portal/src/pages/offers/testCreateProfile.tsx b/apps/portal/src/pages/offers/testCreateProfile.tsx index d2f9e496..d1fe399a 100644 --- a/apps/portal/src/pages/offers/testCreateProfile.tsx +++ b/apps/portal/src/pages/offers/testCreateProfile.tsx @@ -3,136 +3,142 @@ import React, { useState } from 'react'; import { trpc } from '~/utils/trpc'; function Test() { -// F const data = trpc.useQuery([ -// 'offers.profile.', -// { -// limit: 3, -// location: 'Singapore, Singapore', -// offset: 0, -// yoeCategory: 0, -// }, -// ]); + // F const data = trpc.useQuery([ + // 'offers.profile.', + // { + // limit: 3, + // location: 'Singapore, Singapore', + // offset: 0, + // yoeCategory: 0, + // }, + // ]); - const [createdData, setCreatedData] = useState("") + const [createdData, setCreatedData] = useState(''); - const createMutation = trpc.useMutation(['offers.profile.create'], { - onError(error: any) { - alert(error) + const createMutation = trpc.useMutation(['offers.profile.create'], { + onError(error: any) { + alert(error); + }, + onSuccess(data) { + setCreatedData(JSON.stringify(data)); + }, + }); + + const handleClick = () => { + createMutation.mutate({ + background: { + educations: [ + { + endDate: new Date('2018-09-30T07:58:54.000Z'), + field: 'Computer Science', + school: 'National University of Singapore', + startDate: new Date('2014-09-30T07:58:54.000Z'), + type: 'Bachelors', + }, + ], + experiences: [ + { + companyId: 'cl93m87pl0000tx1ofbafqz6f', + durationInMonths: 24, + jobType: 'FULLTIME', + level: 'Junior', + // "monthlySalary": undefined, + specialization: 'Front End', + title: 'Software Engineer', + totalCompensation: { + currency: 'SGD', + value: 104100, + }, + }, + ], + specificYoes: [ + { + domain: 'Front End', + yoe: 2, + }, + { + domain: 'Full Stack', + yoe: 2, + }, + ], + totalYoe: 4, + }, + offers: [ + { + comments: '', + companyId: 'cl93m87pl0000tx1ofbafqz6f', + job: { + base: { + currency: 'SGD', + value: 84000, + }, + bonus: { + currency: 'SGD', + value: 20000, + }, + level: 'Junior', + specialization: 'Front End', + stocks: { + currency: 'SGD', + value: 100, + }, + title: 'Software Engineer', + totalCompensation: { + currency: 'SGD', + value: 104100, + }, + }, + jobType: 'FULLTIME', + location: 'Singapore, Singapore', + monthYearReceived: new Date('2022-09-30T07:58:54.000Z'), + negotiationStrategy: 'Leveraged having multiple offers', }, - onSuccess(data) { - setCreatedData(JSON.stringify(data)) + { + comments: '', + companyId: 'cl93m87pl0000tx1ofbafqz6f', + job: { + base: { + currency: 'SGD', + value: 84000, + }, + bonus: { + currency: 'SGD', + value: 20000, + }, + level: 'Junior', + specialization: 'Front End', + stocks: { + currency: 'SGD', + value: 100, + }, + title: 'Software Engineer', + totalCompensation: { + currency: 'SGD', + value: 104100, + }, + }, + jobType: 'FULLTIME', + location: 'Singapore, Singapore', + monthYearReceived: new Date('2022-09-30T07:58:54.000Z'), + negotiationStrategy: 'Leveraged having multiple offers', }, + ], }); + }; - const handleClick = () => { - createMutation.mutate({ -"background": { - "educations": [ - { - "endDate": new Date("2018-09-30T07:58:54.000Z"), - "field": "Computer Science", - "school": "National University of Singapore", - "startDate": new Date("2014-09-30T07:58:54.000Z"), - "type": "Bachelors" - } - ], - "experiences": [ - { - "companyId": "cl92szctf0008i9nfxk54bhxn", - "durationInMonths": 24, - "jobType": "FULLTIME", - "level": "Junior", - // "monthlySalary": undefined, - "specialization": "Front End", - "title": "Software Engineer", - "totalCompensation": { - "currency": "SGD", - "value": 104100 - } - } - ], - "specificYoes": [ - { - "domain": "Front End", - "yoe": 2 - }, - { - "domain": "Full Stack", - "yoe": 2 - } - ], - "totalYoe": 4 - }, - "offers": [ + const profileId = 'cl92wiw30006vw3hg7dxa14fo'; // Remember to change this filed after testing deleting + const data = trpc.useQuery([ + `offers.profile.listOne`, { - "comments": "", - "companyId": "cl92szctf0008i9nfxk54bhxn", - "job": { - "base": { - "currency": "SGD", - "value": 84000 - }, - "bonus": { - "currency": "SGD", - "value": 20000 - }, - "level": "Junior", - "specialization": "Front End", - "stocks": { - "currency": "SGD", - "value": 100 - }, - "title": "Software Engineer", - "totalCompensation": { - "currency": "SGD", - "value": 104100 - } - }, - "jobType": "FULLTIME", - "location": "Singapore, Singapore", - "monthYearReceived": new Date("2022-09-30T07:58:54.000Z"), - "negotiationStrategy": "Leveraged having multiple offers" + profileId, }, - { - "comments": "", - "companyId": "cl92szctf0008i9nfxk54bhxn", - "job": { - "base": { - "currency": "SGD", - "value": 84000 - }, - "bonus": { - "currency": "SGD", - "value": 20000 - }, - "level": "Junior", - "specialization": "Front End", - "stocks": { - "currency": "SGD", - "value": 100 - }, - "title": "Software Engineer", - "totalCompensation": { - "currency": "SGD", - "value": 104100 - } - }, - "jobType": "FULLTIME", - "location": "Singapore, Singapore", - "monthYearReceived": new Date("2022-09-30T07:58:54.000Z"), - "negotiationStrategy": "Leveraged having multiple offers" - } - ] - }); - }; + ]); - const data = trpc.useQuery([ - `offers.profile.listOne`, - { - profileId: "cl92wc64a004gw3hgq4pfln2m" - } - ]) + const deleteMutation = trpc.useMutation(['offers.profile.delete']); + const handleDelete = (id: string) => { + deleteMutation.mutate({ id }); + }; return ( // - <> -
- {createdData} -
- + <> +
{createdData}
+ +
{JSON.stringify(data.data)}
- {/* */} + {/* */} ); } diff --git a/apps/portal/src/server/router/offers-profile-router.ts b/apps/portal/src/server/router/offers-profile-router.ts index 002117b4..85a0bd01 100644 --- a/apps/portal/src/server/router/offers-profile-router.ts +++ b/apps/portal/src/server/router/offers-profile-router.ts @@ -1,323 +1,353 @@ -import crypto, { randomUUID } from "crypto"; -import { z } from "zod"; -import { Prisma } from "@prisma/client"; +import crypto, { randomUUID } from 'crypto'; +import { z } from 'zod'; +import { Prisma } from '@prisma/client'; -import { createRouter } from "./context"; +import { createRouter } from './context'; const valuation = z.object({ - currency: z.string(), - value: z.number(), -}) + currency: z.string(), + value: z.number(), +}); // TODO: handle both full time and intern const offer = z.object({ - comments: z.string(), - companyId: z.string(), - job: z.object({ - base: valuation.optional(), // Full time - bonus: valuation.optional(), // Full time - internshipCycle: z.string().optional(), // Intern - level: z.string().optional(), // Full time - monthlySalary: valuation.optional(), // Intern - specialization: z.string(), - startYear: z.number().optional(), // Intern - stocks: valuation.optional(), // Full time - title: z.string(), - totalCompensation: valuation.optional(), // Full time - }), - jobType: z.string(), - location: z.string(), - monthYearReceived: z.date(), - negotiationStrategy: z.string(), -}) + comments: z.string(), + companyId: z.string(), + job: z.object({ + base: valuation.optional(), // Full time + bonus: valuation.optional(), // Full time + internshipCycle: z.string().optional(), // Intern + level: z.string().optional(), // Full time + monthlySalary: valuation.optional(), // Intern + specialization: z.string(), + startYear: z.number().optional(), // Intern + stocks: valuation.optional(), // Full time + title: z.string(), + totalCompensation: valuation.optional(), // Full time + }), + jobType: z.string(), + location: z.string(), + monthYearReceived: z.date(), + negotiationStrategy: z.string(), +}); const experience = z.object({ - companyId: z.string().optional(), - durationInMonths: z.number().optional(), - jobType: z.string().optional(), - level: z.string().optional(), - monthlySalary: valuation.optional(), - specialization: z.string().optional(), - title: z.string().optional(), - totalCompensation: valuation.optional(), -}) + companyId: z.string().optional(), + durationInMonths: z.number().optional(), + jobType: z.string().optional(), + level: z.string().optional(), + monthlySalary: valuation.optional(), + specialization: z.string().optional(), + title: z.string().optional(), + totalCompensation: valuation.optional(), +}); const education = z.object({ - endDate: z.date().optional(), - field: z.string().optional(), - school: z.string().optional(), - startDate: z.date().optional(), - type: z.string().optional(), -}) + endDate: z.date().optional(), + field: z.string().optional(), + school: z.string().optional(), + startDate: z.date().optional(), + type: z.string().optional(), +}); export const offersProfileRouter = createRouter() - .query('listOne', { - input: z.object({ - profileId: z.string(), - }), - async resolve({ ctx, input }) { - return await ctx.prisma.offersProfile.findFirst({ + .query('listOne', { + input: z.object({ + profileId: z.string(), + }), + async resolve({ ctx, input }) { + return await ctx.prisma.offersProfile.findFirst({ + include: { + background: { + include: { + educations: true, + experiences: { 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 - } - } + company: true, + monthlySalary: true, + totalCompensation: true, }, - where: { - id: input.profileId - } - }) - } - }) - .mutation( - 'create', - { - input: z.object({ - background: z.object({ - educations: z.array(education), - experiences: z.array(experience), - specificYoes: z.array(z.object({ - domain: z.string(), - yoe: z.number(), - })), - totalYoe: z.number().optional(), - }), - offers: z.array(offer) - }), - async resolve({ ctx, input }) { - - // TODO: add more - const token = crypto - .createHash("sha256") - .update(Date.now().toString()) - .digest("hex"); + }, + 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.profileId, + }, + }); + }, + }) + .mutation('create', { + input: z.object({ + background: z.object({ + educations: z.array(education), + experiences: z.array(experience), + specificYoes: z.array( + z.object({ + domain: z.string(), + yoe: z.number(), + }), + ), + totalYoe: z.number().optional(), + }), + offers: z.array(offer), + }), + async resolve({ ctx, input }) { + // TODO: add more + const token = crypto + .createHash('sha256') + .update(Date.now().toString()) + .digest('hex'); - const profile = await ctx.prisma.offersProfile.create({ - data: { - background: { + const profile = await ctx.prisma.offersProfile.create({ + data: { + background: { + create: { + educations: { + create: input.background.educations.map((x) => ({ + endDate: x.endDate, + field: x.field, + school: x.school, + startDate: x.startDate, + type: x.type, + })), + }, + experiences: { + create: input.background.experiences.map((x) => { + if ( + x.jobType === 'FULLTIME' && + x.totalCompensation?.currency !== undefined && + x.totalCompensation.value !== undefined + ) { + return { + company: { + connect: { + id: x.companyId, + }, + }, + durationInMonths: x.durationInMonths, + jobType: x.jobType, + level: x.level, + specialization: x.specialization, + title: x.title, + totalCompensation: { create: { - educations: { - create: - input.background.educations.map((x) => ({ - endDate: x.endDate, - field: x.field, - school: x.school, - startDate: x.startDate, - type: x.type - })) - }, - experiences: { - create: - input.background.experiences.map((x) => { - if (x.jobType === "FULLTIME" && x.totalCompensation?.currency !== undefined && x.totalCompensation.value !== undefined) { - return { - company: { - connect: { - id: x.companyId - } - }, - durationInMonths: x.durationInMonths, - jobType: x.jobType, - level: x.level, - specialization: x.specialization, - title: x.title, - totalCompensation: { - create: { - currency: x.totalCompensation?.currency, - value: x.totalCompensation?.value, - } - }, - } - } - if (x.jobType === "INTERN" && x.monthlySalary?.currency !== undefined && x.monthlySalary.value !== undefined) { - return { - company: { - connect: { - id: x.companyId - } - }, - durationInMonths: x.durationInMonths, - jobType: x.jobType, - monthlySalary: { - create: { - currency: x.monthlySalary?.currency, - value: x.monthlySalary?.value - } - }, - specialization: x.specialization, - title: x.title, - } - } - - throw Prisma.PrismaClientKnownRequestError + currency: x.totalCompensation?.currency, + value: x.totalCompensation?.value, + }, + }, + }; + } + if ( + x.jobType === 'INTERN' && + x.monthlySalary?.currency !== undefined && + x.monthlySalary.value !== undefined + ) { + return { + company: { + connect: { + id: x.companyId, + }, + }, + durationInMonths: x.durationInMonths, + jobType: x.jobType, + monthlySalary: { + create: { + currency: x.monthlySalary?.currency, + value: x.monthlySalary?.value, + }, + }, + specialization: x.specialization, + title: x.title, + }; + } - }) - }, - specificYoes: { - create: - input.background.specificYoes.map((x) => { - return { - domain: x.domain, - yoe: x.yoe - } - }) - }, - totalYoe: input.background.totalYoe, - } + throw Prisma.PrismaClientKnownRequestError; + }), + }, + specificYoes: { + create: input.background.specificYoes.map((x) => { + return { + domain: x.domain, + yoe: x.yoe, + }; + }), + }, + totalYoe: input.background.totalYoe, + }, + }, + editToken: token, + offers: { + create: input.offers.map((x) => { + if ( + x.jobType === 'INTERN' && + x.job.internshipCycle !== undefined && + x.job.monthlySalary?.currency !== undefined && + x.job.monthlySalary.value !== undefined && + x.job.startYear !== undefined + ) { + return { + OffersIntern: { + create: { + internshipCycle: x.job.internshipCycle, + monthlySalary: { + create: { + currency: x.job.monthlySalary?.currency, + value: x.job.monthlySalary?.value, + }, + }, + specialization: x.job.specialization, + startYear: x.job.startYear, + title: x.job.title, }, - editToken: token, - offers: { - create: - input.offers.map((x) => { - if (x.jobType === "INTERN" && x.job.internshipCycle !== undefined && x.job.monthlySalary?.currency !== undefined && x.job.monthlySalary.value !== undefined && x.job.startYear !== undefined) { - return { - OffersIntern: { - create: { - internshipCycle: x.job.internshipCycle, - monthlySalary: { - create: { - currency: x.job.monthlySalary?.currency, - value: x.job.monthlySalary?.value - } - }, - specialization: x.job.specialization, - startYear: x.job.startYear, - title: x.job.title, - } - }, - comments: x.comments, - company: { - connect: { - id: x.companyId - } - }, - jobType: x.jobType, - location: x.location, - monthYearReceived: x.monthYearReceived, - negotiationStrategy: x.negotiationStrategy - } - } - if (x.jobType === "FULLTIME" && x.job.base?.currency !== undefined && x.job.base?.value !== undefined && x.job.bonus?.currency !== undefined && x.job.bonus?.value !== undefined && x.job.stocks?.currency !== undefined && x.job.stocks?.value !== undefined && x.job.totalCompensation?.currency !== undefined && x.job.totalCompensation?.value !== undefined && x.job.level !== undefined) { - return { - OffersFullTime: { - create: { - baseSalary: { - create: { - currency: x.job.base?.currency, - value: x.job.base?.value - } - }, - bonus: { - create: { - currency: x.job.bonus?.currency, - value: x.job.bonus?.value - } - }, - level: x.job.level, - specialization: x.job.specialization, - stocks: { - create: { - currency: x.job.stocks?.currency, - value: x.job.stocks?.value, - } - }, - title: x.job.title, - totalCompensation: { - create: { - currency: x.job.totalCompensation?.currency, - value: x.job.totalCompensation?.value, - } - }, - } - }, - comments: x.comments, - company: { - connect: { - id: x.companyId - } - }, - jobType: x.jobType, - location: x.location, - monthYearReceived: x.monthYearReceived, - negotiationStrategy: x.negotiationStrategy - } - } - - // Throw error - throw Prisma.PrismaClientKnownRequestError - }) + }, + comments: x.comments, + company: { + connect: { + id: x.companyId, + }, + }, + jobType: x.jobType, + location: x.location, + monthYearReceived: x.monthYearReceived, + negotiationStrategy: x.negotiationStrategy, + }; + } + if ( + x.jobType === 'FULLTIME' && + x.job.base?.currency !== undefined && + x.job.base?.value !== undefined && + x.job.bonus?.currency !== undefined && + x.job.bonus?.value !== undefined && + x.job.stocks?.currency !== undefined && + x.job.stocks?.value !== undefined && + x.job.totalCompensation?.currency !== undefined && + x.job.totalCompensation?.value !== undefined && + x.job.level !== undefined + ) { + return { + OffersFullTime: { + create: { + baseSalary: { + create: { + currency: x.job.base?.currency, + value: x.job.base?.value, + }, + }, + bonus: { + create: { + currency: x.job.bonus?.currency, + value: x.job.bonus?.value, + }, + }, + level: x.job.level, + specialization: x.job.specialization, + stocks: { + create: { + currency: x.job.stocks?.currency, + value: x.job.stocks?.value, + }, + }, + title: x.job.title, + totalCompensation: { + create: { + currency: x.job.totalCompensation?.currency, + value: x.job.totalCompensation?.value, + }, + }, + }, + }, + comments: x.comments, + company: { + connect: { + id: x.companyId, }, - profileName: randomUUID().substring(0,10), + }, + jobType: x.jobType, + location: x.location, + monthYearReceived: x.monthYearReceived, + negotiationStrategy: x.negotiationStrategy, + }; + } + + // Throw error + throw Prisma.PrismaClientKnownRequestError; + }), + }, + profileName: randomUUID().substring(0, 10), + }, + include: { + background: { + include: { + educations: true, + experiences: { + include: { + company: true, + monthlySalary: true, + totalCompensation: true, }, + }, + specificYoes: true, + }, + }, + offers: { + include: { + OffersFullTime: { include: { - background: { - include: { - educations: true, - experiences: { - include: { - company: true, - monthlySalary: true, - totalCompensation: true - } - }, - specificYoes: true - } - }, - offers: { - include: { - OffersFullTime: { - include: { - baseSalary: true, - bonus: true, - stocks: true, - totalCompensation: true - } - }, - OffersIntern: { - include: { - monthlySalary: true - } - } - } - } + baseSalary: true, + bonus: true, + stocks: true, + totalCompensation: true, }, - }); + }, + OffersIntern: { + include: { + monthlySalary: true, + }, + }, + }, + }, + }, + }); - // TODO: add analysis to profile object then return - return profile - } + // TODO: add analysis to profile object then return + return profile; + }, + }) + .mutation('delete', { + input: z.object({ + id: z.string(), + }), + async resolve({ ctx, input }) { + return await ctx.prisma.offersProfile.delete({ + where: { + id: input.id, + }, + }); }, -); + }); diff --git a/apps/portal/src/server/router/offers.ts b/apps/portal/src/server/router/offers.ts index a4332d05..2d48f28c 100644 --- a/apps/portal/src/server/router/offers.ts +++ b/apps/portal/src/server/router/offers.ts @@ -200,6 +200,7 @@ export const offersRouter = createRouter().query('list', { }, }); + // FILTERING data = data.filter((offer) => { let validRecord = true; @@ -235,6 +236,7 @@ export const offersRouter = createRouter().query('list', { return validRecord; }); + // SORTING data = data.sort((offer1, offer2) => { const defaultReturn = offer2.monthYearReceived.getTime() - offer1.monthYearReceived.getTime();