Skip to content

Commit 8eed18c

Browse files
committed
Link frontend add question form to backend
1 parent 10f7be4 commit 8eed18c

File tree

6 files changed

+34
-12
lines changed

6 files changed

+34
-12
lines changed

QuestionService/javascript/question/question.service.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ function addQuestion(question) {
2121
let questionDoc = question;
2222
const docRef = (0, firestore_1.doc)(exports.db, "questions", question.title);
2323
yield (0, firestore_1.setDoc)(docRef, questionDoc);
24-
for (let i = 1; i <= question.examples.length; i++) {
25-
const add = (0, firestore_1.setDoc)((0, firestore_1.doc)(docRef, "examples", i.toString()), question.examples[i]);
24+
for (let i = 0; i < question.examples.length; i++) {
25+
const add = (0, firestore_1.setDoc)((0, firestore_1.doc)(docRef, "examples", (i + 1).toString()), question.examples[i]);
2626
}
2727
return Promise.resolve(question);
2828
}

QuestionService/src/question/question.service.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { initializeApp } from "firebase/app";
2-
import {addDoc, collection, doc, getFirestore, setDoc} from "firebase/firestore";
2+
import {doc, getFirestore, setDoc} from "firebase/firestore";
33
import { firebaseConfig } from "../firebase/firebase.config"
44

55
initializeApp(firebaseConfig);
@@ -25,8 +25,8 @@ export async function addQuestion(question: Question): Promise<Question> {
2525
let questionDoc: Omit<Question, "examples"> = question
2626
const docRef = doc(db, "questions", question.title);
2727
await setDoc(docRef, questionDoc);
28-
for (let i = 1; i <= question.examples.length; i++) {
29-
const add = setDoc(doc(docRef, "examples", i.toString()), question.examples[i]);
28+
for (let i = 0; i < question.examples.length; i++) {
29+
const add = setDoc(doc(docRef, "examples", (i+1).toString()), question.examples[i]);
3030
}
3131
return Promise.resolve(question);
3232
} catch (error) {

frontend/src/api/questions/dto.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { Example } from "../../data/data.context";
33
export interface QuestionDTO {
44
title: string;
55
tags: string[];
6-
categories: string;
7-
constraints: string;
6+
categories: string[];
7+
constraints: string[];
88
difficulty: string;
99
description: string;
1010
examples: Example[];

frontend/src/components/Questions/AddQuestionTab.tsx

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import QuestionForm from "./QuestionForm";
33
import {Box, Button} from "@mui/material";
44
import Question from "./Question";
55
import Typography from "@mui/material/Typography";
6+
import {addQuestion} from "../../api/questions/data";
7+
import {AxiosError} from "axios";
68

79

810
const AddQuestionTab: React.FC = () => {
@@ -11,10 +13,21 @@ const AddQuestionTab: React.FC = () => {
1113
const handleAddQuestionClick = () => {
1214
setAddQuestions(true);
1315
}
14-
const onSubmit = (question: Question) => {
15-
// TODO: Add question to database
16+
const onSubmit = async (question: Question) => {
1617
console.log(question);
17-
setAddQuestions(false);
18+
let questionToAdd = new Question(question);
19+
20+
try {
21+
const questionAdded = await addQuestion(questionToAdd);
22+
console.log(questionAdded);
23+
setAddQuestions(false);
24+
} catch (e) {
25+
if (e instanceof AxiosError && e.response) {
26+
console.log(e.response.data.code);
27+
} else if (e instanceof Error) {
28+
console.log(e.message);
29+
}
30+
}
1831
};
1932

2033
const onCancel = () => {

frontend/src/components/Questions/Question.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export default class Question {
66
constraints: string[] = [];
77
difficulty: string = '';
88
description: string = '';
9+
examples: Example[] = [];
910

1011
constructor(initializer?: any) {
1112
if (!initializer) return;
@@ -16,6 +17,11 @@ export default class Question {
1617
if (initializer.constraints) this.constraints = initializer.constraints;
1718
if (initializer.difficulty) this.difficulty = initializer.difficulty;
1819
if (initializer.description) this.description = initializer.description;
19-
20+
if (initializer.examples) this.examples = initializer.examples;
2021
}
22+
}
23+
24+
interface Example {
25+
text: string;
26+
image: string;
2127
}

frontend/src/components/Questions/QuestionForm.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ const QuestionForm: React.FC<QuestionFormProps> = ({question:initialQuestion, on
2727
];
2828

2929
const handleTextInputChange = (e: { target: { id: any; value: any; }; }) => {
30-
const {id, value} = e.target;
30+
let {id, value} = e.target;
31+
if (id === 'constraints') {
32+
value = [value]
33+
}
3134
setQuestion((q) => ({
3235
...q,
3336
[id]: value,

0 commit comments

Comments
 (0)