Commit eb70b0c6 authored by Yoon, Daeki's avatar Yoon, Daeki 😅
Browse files

Merge branch 'jiwon0820'

parents f3fc15f0 7275ba42
......@@ -13,6 +13,7 @@ export const save = async (answers: IAnswerRequestData[]) => {
};
export const saveForm = async (answerForm: FormData) => {
console.log("formdata", answerForm);
const { data } = await axios.post(`${baseUrl}/answers/upload`, answerForm);
return data;
};
......
......@@ -20,7 +20,9 @@ export const AnswerSurvey = () => {
const handleSubmit = async (e: FormEvent) => {
e.preventDefault();
console.log("answers:", answers);
const needAnswer = answers.some((answer) => !answer.requiredCheck);
const needAnswer = answers.some(
(answer) => answer.question.isRequired && !answer.requiredCheck
);
if (needAnswer) {
alert("필수질문에 응답하셔야 합니다.");
return;
......@@ -46,12 +48,14 @@ export const AnswerSurvey = () => {
formData.append("guestId", "guest");
const files: FileList = answer.content;
[...files].map((f) => {
formData.append("uploadFiles", f);
});
files &&
[...files].map((f) => {
console.log("파일 없음", f);
formData.append("uploadFiles", f);
});
return formData;
});
console.log("forms", forms);
setError("");
const results = await answerApi.save(
otherAnswers.map((answer) => ({
......
......@@ -25,9 +25,9 @@ export const ResultSurvey = () => {
async function getAnswers() {
try {
if (surveyId) {
const survey = await answerApi.getAnswers(surveyId);
// console.log(survey);
setSurvey(survey);
const result = await answerApi.getAnswers(surveyId);
console.log(result);
setSurvey(result);
} else {
setLoading(true);
}
......
......@@ -22,8 +22,8 @@ export const SurveyCard = ({ survey, handleDelete }: Props) => {
return (
<div className="w-40 h-48 md:w-52 md:h-60 rounded border-2 hover:border-2 hover:border-themeColor">
<Link to={`${survey._id}`} state={survey} className="w-full pt-1">
<p className="font-bold">
<Link to={`${survey._id}`} state={survey} className="w-full">
<p className="font-bold text-center mt-1.5">
{survey.title ? survey.title : "제목없는 설문조사"}
</p>
......@@ -32,7 +32,7 @@ export const SurveyCard = ({ survey, handleDelete }: Props) => {
{survey.comment ? survey.comment : "설명없는 설문조사"}
</p>
</div>
<p className="text-gray-500 text-sm">
<p className="text-gray-500 text-sm text-center">
{survey.updatedAt?.substring(0, 10)}
</p>
</Link>
......
......@@ -90,6 +90,7 @@ export const createAnswerWithFile = asyncWrap(async (reqExp, res) => {
let fileInfos;
const files = formidableFilesToArray(req.files.uploadFiles);
console.log("files=", files);
if (files) {
fileInfos = await Promise.all(
files.map(async (file) => await fileDb.createFile(file))
......@@ -103,30 +104,41 @@ export const createAnswerWithFile = asyncWrap(async (reqExp, res) => {
res.json(newAnswer);
});
// export const getAnswers = asyncWrap(async (reqExp, res) => {
// const req = reqExp as TypedRequest;
// const { surveyId } = req.params;
// try {
// const survey = await surveyDb.getSurveyById(surveyId);
// const answers = await answerDb.getAnswers(surveyId);
// console.log(answers);
// const jsonSurvey = survey?.toJSON();
// if (jsonSurvey && answers) {
// const a = answers.map(async (a) => {
// const targetObj = jsonSurvey.questions.find(
// (q: any) => String(q._id) === String(a._id)
// ) as any;
// if (targetObj) {
// if (a.file.length) {
// targetObj.answers = a.file;
// } else {
// targetObj.answers = a.answers;
// }
// }
// });
// await Promise.all(a);
// }
// return res.json(jsonSurvey);
// } catch (error: any) {
// res.status(422).send(error.message || "설문조사 결과 불러오기 오류");
// }
// });
export const getAnswers = asyncWrap(async (reqExp, res) => {
const req = reqExp as TypedRequest;
const { surveyId } = req.params;
try {
const survey = await surveyDb.getSurveyById(surveyId);
const answers = await answerDb.getAnswers(surveyId);
console.log(answers);
const jsonSurvey = survey?.toJSON();
if (jsonSurvey && answers) {
const a = answers.map(async (a) => {
const targetObj = jsonSurvey.questions.find(
(q: any) => String(q._id) === String(a._id)
) as any;
if (targetObj) {
if (a.file.length) {
targetObj.answers = a.file;
} else {
targetObj.answers = a.answers;
}
}
});
await Promise.all(a);
}
return res.json(jsonSurvey);
const result = await answerDb.getAnswers(surveyId);
console.log("result===", result);
return res.json(result);
} catch (error: any) {
res.status(422).send(error.message || "설문조사 결과 불러오기 오류");
}
......
......@@ -7,22 +7,65 @@ export const createAnswer = async (answer: IAnswer) => {
};
export const getAnswers = async (surveyId: string) => {
const answers = await Answer.aggregate([
const result = await Answer.aggregate([
// surveyId에 해당하는 답변들 find
{ $match: { surveyId: new Types.ObjectId(surveyId) } },
// 같은 question에 대한 답변들을 answers[]에 push
// {surveyId,questionId,guestId,content} => {_id:questionId, surveyId, answers:[content,content]}
{
$group: {
_id: "$questionId",
surveyId: { $first: "$surveyId" },
answers: { $push: "$content" },
},
},
// question DB popluate
{
$lookup: {
from: "questions",
localField: "_id",
foreignField: "_id",
as: "questionInfo",
},
},
{
$unwind: "$questionInfo",
},
{ $set: { "questionInfo.answers": "$answers" } },
{ $unset: "answers" },
// 질문 순서대로 정렬
{ $sort: { "questionInfo.order": 1 } },
// surveyId로 묶고 questions 내에 { questionInfo, answers }[]
{
$group: {
_id: "$surveyId",
questions: {
$push: "$questionInfo",
},
},
},
// survey DB populate
{
$lookup: {
from: "fileinfos",
localField: "answers",
from: "surveys",
localField: "_id",
foreignField: "_id",
as: "file",
as: "survey",
},
},
{
$unwind: "$survey",
},
//밖에 있던 questions를 survey 내부로 이동시키고 survey를 가장 root로 변경
{ $set: { "survey.questions": "$questions" } },
{ $replaceRoot: { newRoot: "$survey" } },
]);
return answers;
return result[0];
};
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment