diff --git a/client/src/app/start/layout.tsx b/client/src/app/start/layout.tsx
index 96a7df7..60bc7ee 100644
--- a/client/src/app/start/layout.tsx
+++ b/client/src/app/start/layout.tsx
@@ -165,7 +165,7 @@ export default function RegularLayout({
style={{ background: 'white' }}
>
-
diff --git a/client/src/app/styles/loading.css b/client/src/app/styles/loading.css
index f0cabe2..a113966 100644
--- a/client/src/app/styles/loading.css
+++ b/client/src/app/styles/loading.css
@@ -3,4 +3,6 @@
justify-content: center;
align-items: center;
min-height: 100vh;
+ flex-direction: column;
+ gap: 1rem;
}
\ No newline at end of file
diff --git a/server/routes/mongo.ts b/server/routes/mongo.ts
index 90cf0c6..f74e9a7 100644
--- a/server/routes/mongo.ts
+++ b/server/routes/mongo.ts
@@ -5,6 +5,7 @@ import { Schema } from 'mongoose';
//utils
import { saveToMongo } from '../utils/saveToMongo';
import { getLatestInterview } from '../utils/getLatestInterview';
+import { getAllInterviews } from '../utils/getAllInterviews';
//configs
const router = Router();
@@ -23,9 +24,26 @@ router.post('/save-interview', async (req, res) => {
router.get('/get-interview', async (req, res) => {
const userId = (req.user as { _id: Schema.Types.ObjectId })._id;
+ const interviewID = req.query.interviewID as string | null;
+
+ try {
+ if (!interviewID) {
+ const interview = await getLatestInterview(userId, null);
+ res.status(200).send(interview);
+ } else {
+ const interview = await getLatestInterview(userId, interviewID);
+ res.status(200).send(interview);
+ }
+ } catch (err) {
+ res.status(400).send({ error: `❌ Mongo error: ${err}` });
+ }
+});
+
+router.get('/get-all-interviews', async (req, res) => {
+ const userId = (req.user as {_id: Schema.Types.ObjectId })._id;
try {
- const interview = await getLatestInterview(userId);
- res.status(200).send(interview);
+ const interviews = await getAllInterviews(userId);
+ res.status(200).send(interviews);
} catch (err) {
res.status(400).send({ error: `❌ Mongo error: ${err}` });
}
diff --git a/server/utils/getAllInterviews.ts b/server/utils/getAllInterviews.ts
new file mode 100644
index 0000000..b7c22eb
--- /dev/null
+++ b/server/utils/getAllInterviews.ts
@@ -0,0 +1,21 @@
+import interviewModel from '../Models/interviewModel';
+import qa_feedbackModel from '../Models/qa_feedbackModel';
+
+export async function getAllInterviews(userId) {
+ const interviews = await interviewModel
+ .find({ user_id: userId });
+
+ // This means that map would return an array of promises of the results we want.
+ const feedback = interviews.map(async (interview) => {
+ const feedbacks = await qa_feedbackModel.find({
+ interview_id: interview._id,
+ });
+ return {
+ interview: interview,
+ feedback: feedbacks
+ }
+ })
+
+ // We can then use Promise.all to get the result when all the promises return.
+ return Promise.all(feedback);
+}
\ No newline at end of file
diff --git a/server/utils/getLatestInterview.ts b/server/utils/getLatestInterview.ts
index 009a5ea..820b083 100644
--- a/server/utils/getLatestInterview.ts
+++ b/server/utils/getLatestInterview.ts
@@ -1,14 +1,21 @@
-import mongoose from 'mongoose';
import interviewModel from '../Models/interviewModel';
import qa_feedbackModel from '../Models/qa_feedbackModel';
-export async function getLatestInterview(userId) {
- const interview = await interviewModel
- .findOne({ user_id: userId })
- .sort({ _id: -1 });
+export async function getLatestInterview(userId, interviewID: string | null) {
+ if(interviewID !== null){
+ const interview = await interviewModel.findOne({user_id: userId, _id: interviewID});
+ const feedbacks = await qa_feedbackModel.find({
+ interview_id: interview._id,
+ })
+ return feedbacks;
+ } else {
+ const interview = await interviewModel
+ .findOne({ user_id: userId })
+ .sort({ _id: -1 });
- const feedbacks = await qa_feedbackModel.find({
- interview_id: interview._id,
- });
- return feedbacks;
+ const feedbacks = await qa_feedbackModel.find({
+ interview_id: interview._id,
+ });
+ return feedbacks;
+ }
}
diff --git a/server/yarn.lock b/server/yarn.lock
index 78e3370..760d1f8 100644
--- a/server/yarn.lock
+++ b/server/yarn.lock
@@ -464,13 +464,6 @@ crypt@0.0.2:
resolved "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz"
integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==
-debug@^3.2.7:
- version "3.2.7"
- resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
- integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
- dependencies:
- ms "^2.1.1"
-
debug@2.6.9:
version "2.6.9"
resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
@@ -485,12 +478,19 @@ debug@4.x:
dependencies:
ms "2.1.2"
+debug@^3.2.7:
+ version "3.2.7"
+ resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
+ integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
+ dependencies:
+ ms "^2.1.1"
+
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
-depd@~2.0.0, depd@2.0.0:
+depd@2.0.0, depd@~2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz"
integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
@@ -735,7 +735,7 @@ ignore-by-default@^1.0.1:
resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz"
integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==
-inherits@^2.0.3, inherits@~2.0.3, inherits@2.0.4:
+inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -926,22 +926,17 @@ mquery@5.0.0:
dependencies:
debug "4.x"
-ms@^2.0.0, ms@2.0.0:
+ms@2.0.0, ms@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
-ms@^2.1.1:
- version "2.1.3"
- resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
- integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
-
ms@2.1.2:
version "2.1.2"
resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-ms@2.1.3:
+ms@2.1.3, ms@^2.1.1:
version "2.1.3"
resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
@@ -1019,13 +1014,6 @@ object-inspect@^1.9.0:
resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz"
integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
-on-finished@~2.3.0:
- version "2.3.0"
- resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz"
- integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==
- dependencies:
- ee-first "1.1.1"
-
on-finished@2.4.1:
version "2.4.1"
resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz"
@@ -1033,6 +1021,13 @@ on-finished@2.4.1:
dependencies:
ee-first "1.1.1"
+on-finished@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz"
+ integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==
+ dependencies:
+ ee-first "1.1.1"
+
on-headers@~1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz"
@@ -1190,17 +1185,7 @@ readdirp@~3.6.0:
dependencies:
picomatch "^2.2.1"
-safe-buffer@~5.1.0:
- version "5.1.2"
- resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safe-buffer@~5.1.1:
- version "5.1.2"
- resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safe-buffer@5.1.2:
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
@@ -1389,7 +1374,7 @@ typedarray@^0.0.6:
resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
-typescript@^5.2.2, typescript@>=2.7:
+typescript@^5.2.2:
version "5.2.2"
resolved "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz"
integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==
@@ -1411,7 +1396,7 @@ undefsafe@^2.0.5:
resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz"
integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==
-unpipe@~1.0.0, unpipe@1.0.0:
+unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
@@ -1421,7 +1406,7 @@ util-deprecate@~1.0.1:
resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
-utils-merge@^1.0.1, utils-merge@1.0.1, utils-merge@1.x.x:
+utils-merge@1.0.1, utils-merge@1.x.x, utils-merge@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz"
integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==