mirror of
https://github.com/yangshun/tech-interview-handbook.git
synced 2025-07-28 20:52:00 +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])
|
user User? @relation(fields: [userId], references: [id])
|
||||||
userId String?
|
userId String?
|
||||||
|
|
||||||
|
OffersAnalysis OffersAnalysis?
|
||||||
}
|
}
|
||||||
|
|
||||||
model OffersBackground {
|
model OffersBackground {
|
||||||
@ -316,6 +318,11 @@ model OffersOffer {
|
|||||||
|
|
||||||
OffersFullTime OffersFullTime? @relation(fields: [offersFullTimeId], references: [id], onDelete: Cascade)
|
OffersFullTime OffersFullTime? @relation(fields: [offersFullTimeId], references: [id], onDelete: Cascade)
|
||||||
offersFullTimeId String? @unique
|
offersFullTimeId String? @unique
|
||||||
|
|
||||||
|
OffersAnalysis OffersAnalysis? @relation("HighestOverallOffer")
|
||||||
|
|
||||||
|
OffersAnalysisTopOverallOffers OffersAnalysis[] @relation("TopOverallOffers")
|
||||||
|
OffersAnalysisTopCompanyOffers OffersAnalysis[] @relation("TopCompanyOffers")
|
||||||
}
|
}
|
||||||
|
|
||||||
model OffersIntern {
|
model OffersIntern {
|
||||||
@ -348,6 +355,26 @@ model OffersFullTime {
|
|||||||
OffersOffer OffersOffer?
|
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.
|
// End of Offers project models.
|
||||||
|
|
||||||
// Start of Questions project models.
|
// Start of Questions project models.
|
||||||
|
@ -225,22 +225,22 @@ export const offersAnalysisRouter = createRouter().query('generate', {
|
|||||||
(offer) => offer.id !== overallHighestOffer.id,
|
(offer) => offer.id !== overallHighestOffer.id,
|
||||||
);
|
);
|
||||||
|
|
||||||
const similarOffersCount = similarOffers.length;
|
const noOfSimilarOffers = similarOffers.length;
|
||||||
const similarOffers90PercentileIndex =
|
const similarOffers90PercentileIndex =
|
||||||
Math.floor(similarOffersCount * 0.9) - 1;
|
Math.floor(noOfSimilarOffers * 0.9) - 1;
|
||||||
const topPercentileOffers =
|
const topPercentileOffers =
|
||||||
similarOffersCount > 1
|
noOfSimilarOffers > 1
|
||||||
? similarOffers.slice(
|
? similarOffers.slice(
|
||||||
similarOffers90PercentileIndex,
|
similarOffers90PercentileIndex,
|
||||||
similarOffers90PercentileIndex + 2,
|
similarOffers90PercentileIndex + 2,
|
||||||
)
|
)
|
||||||
: similarOffers;
|
: similarOffers;
|
||||||
|
|
||||||
const similarCompanyOffersCount = similarCompanyOffers.length;
|
const noOfSimilarCompanyOffers = similarCompanyOffers.length;
|
||||||
const similarCompanyOffers90PercentileIndex =
|
const similarCompanyOffers90PercentileIndex =
|
||||||
Math.floor(similarCompanyOffersCount * 0.9) - 1;
|
Math.floor(noOfSimilarCompanyOffers * 0.9) - 1;
|
||||||
const topPercentileCompanyOffers =
|
const topPercentileCompanyOffers =
|
||||||
similarCompanyOffersCount > 1
|
noOfSimilarCompanyOffers > 1
|
||||||
? similarCompanyOffers.slice(
|
? similarCompanyOffers.slice(
|
||||||
similarCompanyOffers90PercentileIndex,
|
similarCompanyOffers90PercentileIndex,
|
||||||
similarCompanyOffers90PercentileIndex + 2,
|
similarCompanyOffers90PercentileIndex + 2,
|
||||||
@ -250,12 +250,12 @@ export const offersAnalysisRouter = createRouter().query('generate', {
|
|||||||
return {
|
return {
|
||||||
company: {
|
company: {
|
||||||
highestOfferAgainstCompanyPercentile,
|
highestOfferAgainstCompanyPercentile,
|
||||||
similarCompanyOffersCount,
|
noOfSimilarCompanyOffers,
|
||||||
topPercentileCompanyOffers,
|
topPercentileCompanyOffers,
|
||||||
},
|
},
|
||||||
overall: {
|
overall: {
|
||||||
highestOfferAgainstOverallPercentile,
|
highestOfferAgainstOverallPercentile,
|
||||||
similarOffersCount,
|
noOfSimilarOffers,
|
||||||
topPercentileOffers,
|
topPercentileOffers,
|
||||||
},
|
},
|
||||||
overallHighestOffer,
|
overallHighestOffer,
|
||||||
|
Reference in New Issue
Block a user