diff --git a/apps/portal/prisma/migrations/20221014192315_/migration.sql b/apps/portal/prisma/migrations/20221014192315_/migration.sql new file mode 100644 index 00000000..20352390 --- /dev/null +++ b/apps/portal/prisma/migrations/20221014192315_/migration.sql @@ -0,0 +1,60 @@ +-- CreateTable +CREATE TABLE "OffersAnalysis" ( + "id" TEXT NOT NULL, + "profileId" TEXT NOT NULL, + "offerId" TEXT NOT NULL, + "overallPercentile" INTEGER NOT NULL, + "noOfSimilarOffers" INTEGER NOT NULL, + "companyPercentile" INTEGER NOT NULL, + "noOfSimilarCompanyOffers" INTEGER NOT NULL, + + CONSTRAINT "OffersAnalysis_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "_TopOverallOffers" ( + "A" TEXT NOT NULL, + "B" TEXT NOT NULL +); + +-- CreateTable +CREATE TABLE "_TopCompanyOffers" ( + "A" TEXT NOT NULL, + "B" TEXT NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX "OffersAnalysis_profileId_key" ON "OffersAnalysis"("profileId"); + +-- CreateIndex +CREATE UNIQUE INDEX "OffersAnalysis_offerId_key" ON "OffersAnalysis"("offerId"); + +-- CreateIndex +CREATE UNIQUE INDEX "_TopOverallOffers_AB_unique" ON "_TopOverallOffers"("A", "B"); + +-- CreateIndex +CREATE INDEX "_TopOverallOffers_B_index" ON "_TopOverallOffers"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_TopCompanyOffers_AB_unique" ON "_TopCompanyOffers"("A", "B"); + +-- CreateIndex +CREATE INDEX "_TopCompanyOffers_B_index" ON "_TopCompanyOffers"("B"); + +-- AddForeignKey +ALTER TABLE "OffersAnalysis" ADD CONSTRAINT "OffersAnalysis_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "OffersProfile"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "OffersAnalysis" ADD CONSTRAINT "OffersAnalysis_offerId_fkey" FOREIGN KEY ("offerId") REFERENCES "OffersOffer"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_TopOverallOffers" ADD CONSTRAINT "_TopOverallOffers_A_fkey" FOREIGN KEY ("A") REFERENCES "OffersAnalysis"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_TopOverallOffers" ADD CONSTRAINT "_TopOverallOffers_B_fkey" FOREIGN KEY ("B") REFERENCES "OffersOffer"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_TopCompanyOffers" ADD CONSTRAINT "_TopCompanyOffers_A_fkey" FOREIGN KEY ("A") REFERENCES "OffersAnalysis"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_TopCompanyOffers" ADD CONSTRAINT "_TopCompanyOffers_B_fkey" FOREIGN KEY ("B") REFERENCES "OffersOffer"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/apps/portal/prisma/schema.prisma b/apps/portal/prisma/schema.prisma index 9d84a2d5..e30230bb 100644 --- a/apps/portal/prisma/schema.prisma +++ b/apps/portal/prisma/schema.prisma @@ -190,6 +190,8 @@ model OffersProfile { user User? @relation(fields: [userId], references: [id]) userId String? + + OffersAnalysis OffersAnalysis? } model OffersBackground { @@ -316,6 +318,11 @@ model OffersOffer { OffersFullTime OffersFullTime? @relation(fields: [offersFullTimeId], references: [id], onDelete: Cascade) offersFullTimeId String? @unique + + OffersAnalysis OffersAnalysis? @relation("HighestOverallOffer") + + OffersAnalysisTopOverallOffers OffersAnalysis[] @relation("TopOverallOffers") + OffersAnalysisTopCompanyOffers OffersAnalysis[] @relation("TopCompanyOffers") } model OffersIntern { @@ -348,6 +355,26 @@ model OffersFullTime { OffersOffer OffersOffer? } +model OffersAnalysis { + id String @id @default(cuid()) + + profile OffersProfile @relation(fields: [profileId], references: [id]) + profileId String @unique + + overallHighestOffer OffersOffer @relation("HighestOverallOffer", fields: [offerId], references: [id]) + offerId String @unique + + // OVERALL + overallPercentile Int + noOfSimilarOffers Int + topOverallOffers OffersOffer[] @relation("TopOverallOffers") + + // Company + companyPercentile Int + noOfSimilarCompanyOffers Int + topCompanyOffers OffersOffer[] @relation("TopCompanyOffers") +} + // End of Offers project models. // Start of Questions project models. diff --git a/apps/portal/src/server/router/offers/offers-analysis-router.ts b/apps/portal/src/server/router/offers/offers-analysis-router.ts index 3552d9ea..c620cde5 100644 --- a/apps/portal/src/server/router/offers/offers-analysis-router.ts +++ b/apps/portal/src/server/router/offers/offers-analysis-router.ts @@ -225,22 +225,22 @@ export const offersAnalysisRouter = createRouter().query('generate', { (offer) => offer.id !== overallHighestOffer.id, ); - const similarOffersCount = similarOffers.length; + const noOfSimilarOffers = similarOffers.length; const similarOffers90PercentileIndex = - Math.floor(similarOffersCount * 0.9) - 1; + Math.floor(noOfSimilarOffers * 0.9) - 1; const topPercentileOffers = - similarOffersCount > 1 + noOfSimilarOffers > 1 ? similarOffers.slice( similarOffers90PercentileIndex, similarOffers90PercentileIndex + 2, ) : similarOffers; - const similarCompanyOffersCount = similarCompanyOffers.length; + const noOfSimilarCompanyOffers = similarCompanyOffers.length; const similarCompanyOffers90PercentileIndex = - Math.floor(similarCompanyOffersCount * 0.9) - 1; + Math.floor(noOfSimilarCompanyOffers * 0.9) - 1; const topPercentileCompanyOffers = - similarCompanyOffersCount > 1 + noOfSimilarCompanyOffers > 1 ? similarCompanyOffers.slice( similarCompanyOffers90PercentileIndex, similarCompanyOffers90PercentileIndex + 2, @@ -250,12 +250,12 @@ export const offersAnalysisRouter = createRouter().query('generate', { return { company: { highestOfferAgainstCompanyPercentile, - similarCompanyOffersCount, + noOfSimilarCompanyOffers, topPercentileCompanyOffers, }, overall: { highestOfferAgainstOverallPercentile, - similarOffersCount, + noOfSimilarOffers, topPercentileOffers, }, overallHighestOffer,