mirror of
https://github.com/yangshun/tech-interview-handbook.git
synced 2025-07-28 12:43:12 +08:00
[offers][chore] Add OffersAnalysis into database
This commit is contained in:
60
apps/portal/prisma/migrations/20221014192315_/migration.sql
Normal file
60
apps/portal/prisma/migrations/20221014192315_/migration.sql
Normal file
@ -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;
|
@ -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.
|
||||
|
@ -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,
|
||||
|
Reference in New Issue
Block a user