Skip to content

Commit 57643cb

Browse files
authored
Merge branch 'refactor-question' into refactor-backend
2 parents 564229e + 844fcb3 commit 57643cb

26 files changed

+4570
-131
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
/node_modules
55
/frontend/node_modules
66
/backend/node_modules
7+
/QuestionService/node_modules
8+
/QuestionService/javascript
79
/backend/javascript
810
/.pnp
911
.pnp.js
@@ -15,6 +17,7 @@
1517
# production
1618
/frontend/build
1719
/backend/build
20+
/QuestionService/build
1821

1922
# misc
2023
.DS_Store
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
"use strict";
2+
Object.defineProperty(exports, "__esModule", { value: true });
3+
exports.firebaseConfig = void 0;
4+
require("dotenv/config");
5+
exports.firebaseConfig = {
6+
apiKey: process.env.FIREBASE_API_KEY,
7+
authDomain: "peerprep-d7af2.firebaseapp.com",
8+
projectId: "peerprep-d7af2",
9+
storageBucket: "peerprep-d7af2.appspot.com",
10+
messagingSenderId: "852795173750",
11+
appId: "1:852795173750:web:b1aed6d65dc6d4cb566857",
12+
measurementId: "G-NZSVYREFLC",
13+
};
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
"use strict";
2+
var __importDefault = (this && this.__importDefault) || function (mod) {
3+
return (mod && mod.__esModule) ? mod : { "default": mod };
4+
};
5+
Object.defineProperty(exports, "__esModule", { value: true });
6+
const express_1 = __importDefault(require("express"));
7+
const cors_1 = __importDefault(require("cors"));
8+
const question_controller_1 = require("./question/question.controller");
9+
const app = (0, express_1.default)();
10+
const port = 3002;
11+
app.use((0, cors_1.default)());
12+
app.use(express_1.default.json());
13+
app.get("/", (req, res) => {
14+
res.send("Hello World!");
15+
});
16+
app.get("/questions", question_controller_1.handleGetQuestions);
17+
app.post("/questions", question_controller_1.handleAddQuestion);
18+
app.delete("/questions/:questionId", question_controller_1.handleDeleteQuestion);
19+
app.listen(port, () => {
20+
console.log(`Peerprep listening on port ${port}`);
21+
});
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
"use strict";
2+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4+
return new (P || (P = Promise))(function (resolve, reject) {
5+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8+
step((generator = generator.apply(thisArg, _arguments || [])).next());
9+
});
10+
};
11+
Object.defineProperty(exports, "__esModule", { value: true });
12+
exports.handleAddQuestion = exports.handleDeleteQuestion = exports.handleGetQuestions = void 0;
13+
const question_service_1 = require("./question.service");
14+
const firestore_1 = require("firebase/firestore");
15+
function handleGetQuestions(req, res) {
16+
return __awaiter(this, void 0, void 0, function* () {
17+
try {
18+
// console.log(req.query.email);
19+
// const { email } = req.query;
20+
const query = yield (0, firestore_1.getDocs)((0, firestore_1.collection)(question_service_1.db, "questions"));
21+
const result = yield Promise.all(query.docs.map((d) => __awaiter(this, void 0, void 0, function* () {
22+
const q = d.data();
23+
const examplesArray = yield getExamples(d.id);
24+
return {
25+
id: d.id,
26+
title: q.title,
27+
tags: q.tags,
28+
categories: q.categories,
29+
constraints: q.constraints,
30+
difficulty: q.difficulty,
31+
description: q.description,
32+
examples: examplesArray,
33+
};
34+
})));
35+
if (result.length > 0) {
36+
res.status(200).send(result);
37+
}
38+
else {
39+
res.status(500).send("no questions");
40+
}
41+
}
42+
catch (error) {
43+
console.error(error);
44+
res.status(500).send(error);
45+
}
46+
});
47+
}
48+
exports.handleGetQuestions = handleGetQuestions;
49+
const getExamples = (id) => __awaiter(void 0, void 0, void 0, function* () {
50+
const subCollRef = (0, firestore_1.collection)(question_service_1.db, "questions", id, "examples");
51+
const examplesSnapshot = yield (0, firestore_1.getDocs)(subCollRef);
52+
const examplesResult = examplesSnapshot.docs.map((data) => {
53+
const exampleData = data.data();
54+
return {
55+
text: exampleData.text,
56+
image: exampleData.img || "", // Use an empty string if image is missing
57+
};
58+
});
59+
// console.log(examplesSnapshot)
60+
return examplesResult;
61+
});
62+
function handleDeleteQuestion(req, res) {
63+
return __awaiter(this, void 0, void 0, function* () {
64+
const questionId = req.params.questionId;
65+
try {
66+
const docRef = (0, firestore_1.doc)(question_service_1.db, "questions", questionId);
67+
const result = yield (0, firestore_1.deleteDoc)(docRef);
68+
}
69+
catch (err) {
70+
console.log(`error when deleting question with id ${questionId}` + err);
71+
res.status(500).send(err);
72+
}
73+
});
74+
}
75+
exports.handleDeleteQuestion = handleDeleteQuestion;
76+
function handleAddQuestion(req, res) {
77+
return __awaiter(this, void 0, void 0, function* () {
78+
try {
79+
const { qtitle, qtags, qcategories, qconstraints, qdifficulty, qdescription, qexamples, } = req.body;
80+
const docRef = yield (0, firestore_1.addDoc)((0, firestore_1.collection)(question_service_1.db, "questions"), {
81+
title: qtitle,
82+
tags: qtags,
83+
categories: qcategories,
84+
constraints: qconstraints,
85+
difficulty: qdifficulty,
86+
description: qdescription,
87+
});
88+
const exampleRef = (0, firestore_1.collection)(docRef, "examples");
89+
qexamples.map((e) => {
90+
const add = (0, firestore_1.addDoc)(exampleRef, e);
91+
});
92+
// const addExample = setDoc(exampleRef, qexamples)
93+
}
94+
catch (err) {
95+
console.log(err);
96+
res.status(500).send(err);
97+
}
98+
});
99+
}
100+
exports.handleAddQuestion = handleAddQuestion;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
"use strict";
2+
Object.defineProperty(exports, "__esModule", { value: true });
3+
exports.db = void 0;
4+
const app_1 = require("firebase/app");
5+
const firestore_1 = require("firebase/firestore");
6+
const firebase_config_1 = require("../firebase/firebase.config");
7+
(0, app_1.initializeApp)(firebase_config_1.firebaseConfig);
8+
exports.db = (0, firestore_1.getFirestore)();
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
"use strict";
2+
Object.defineProperty(exports, "__esModule", { value: true });
3+
exports.firebaseConfig = void 0;
4+
require("dotenv/config");
5+
exports.firebaseConfig = {
6+
apiKey: process.env.FIREBASE_API_KEY,
7+
authDomain: "peerprep-d7af2.firebaseapp.com",
8+
projectId: "peerprep-d7af2",
9+
storageBucket: "peerprep-d7af2.appspot.com",
10+
messagingSenderId: "852795173750",
11+
appId: "1:852795173750:web:b1aed6d65dc6d4cb566857",
12+
measurementId: "G-NZSVYREFLC",
13+
};
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
"use strict";
2+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4+
return new (P || (P = Promise))(function (resolve, reject) {
5+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8+
step((generator = generator.apply(thisArg, _arguments || [])).next());
9+
});
10+
};
11+
Object.defineProperty(exports, "__esModule", { value: true });
12+
exports.handleAddQuestion = exports.handleDeleteQuestion = exports.handleGetQuestions = void 0;
13+
const question_service_1 = require("./question.service");
14+
const firestore_1 = require("firebase/firestore");
15+
function handleGetQuestions(req, res) {
16+
return __awaiter(this, void 0, void 0, function* () {
17+
try {
18+
// console.log(req.query.email);
19+
// const { email } = req.query;
20+
console.log(`getting all questions`);
21+
const query = yield (0, firestore_1.getDocs)((0, firestore_1.collection)(question_service_1.db, "questions"));
22+
const result = yield Promise.all(query.docs.map((d) => __awaiter(this, void 0, void 0, function* () {
23+
const q = d.data();
24+
const examplesArray = yield getExamples(d.id);
25+
return {
26+
id: d.id,
27+
title: q.title,
28+
tags: q.tags,
29+
categories: q.categories,
30+
constraints: q.constraints,
31+
difficulty: q.difficulty,
32+
description: q.description,
33+
examples: examplesArray,
34+
};
35+
})));
36+
if (result.length > 0) {
37+
res.status(200).send(result);
38+
}
39+
else {
40+
res.status(500).send("no questions");
41+
}
42+
}
43+
catch (error) {
44+
console.error(error);
45+
res.status(500).send(error);
46+
}
47+
});
48+
}
49+
exports.handleGetQuestions = handleGetQuestions;
50+
const getExamples = (id) => __awaiter(void 0, void 0, void 0, function* () {
51+
const subCollRef = (0, firestore_1.collection)(question_service_1.db, "questions", id, "examples");
52+
const examplesSnapshot = yield (0, firestore_1.getDocs)(subCollRef);
53+
const examplesResult = examplesSnapshot.docs.map((data) => {
54+
const exampleData = data.data();
55+
return {
56+
text: exampleData.text,
57+
image: exampleData.img || "", // Use an empty string if image is missing
58+
};
59+
});
60+
// console.log(examplesSnapshot)
61+
return examplesResult;
62+
});
63+
function handleDeleteQuestion(req, res) {
64+
return __awaiter(this, void 0, void 0, function* () {
65+
const questionId = req.params.questionId;
66+
try {
67+
const docRef = (0, firestore_1.doc)(question_service_1.db, "questions", questionId);
68+
const result = yield (0, firestore_1.deleteDoc)(docRef);
69+
}
70+
catch (err) {
71+
console.log(`error when deleting question with id ${questionId}` + err);
72+
res.status(500).send(err);
73+
}
74+
});
75+
}
76+
exports.handleDeleteQuestion = handleDeleteQuestion;
77+
function handleAddQuestion(req, res) {
78+
return __awaiter(this, void 0, void 0, function* () {
79+
try {
80+
const { qtitle, qtags, qcategories, qconstraints, qdifficulty, qdescription, qexamples, } = req.body;
81+
const docRef = yield (0, firestore_1.addDoc)((0, firestore_1.collection)(question_service_1.db, "questions"), {
82+
title: qtitle,
83+
tags: qtags,
84+
categories: qcategories,
85+
constraints: qconstraints,
86+
difficulty: qdifficulty,
87+
description: qdescription,
88+
});
89+
const exampleRef = (0, firestore_1.collection)(docRef, "examples");
90+
qexamples.map((e) => {
91+
const add = (0, firestore_1.addDoc)(exampleRef, e);
92+
});
93+
// const addExample = setDoc(exampleRef, qexamples)
94+
}
95+
catch (err) {
96+
console.log(err);
97+
res.status(500).send(err);
98+
}
99+
});
100+
}
101+
exports.handleAddQuestion = handleAddQuestion;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
"use strict";
2+
Object.defineProperty(exports, "__esModule", { value: true });
3+
exports.db = void 0;
4+
const app_1 = require("firebase/app");
5+
const firestore_1 = require("firebase/firestore");
6+
const firebase_config_1 = require("../firebase/firebase.config");
7+
(0, app_1.initializeApp)(firebase_config_1.firebaseConfig);
8+
exports.db = (0, firestore_1.getFirestore)();

0 commit comments

Comments
 (0)