Skip to content

Commit

Permalink
add: registration activity feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
pbc1017 committed Mar 14, 2024
1 parent 7db021a commit d9400b0
Show file tree
Hide file tree
Showing 8 changed files with 567 additions and 155 deletions.
2 changes: 1 addition & 1 deletion back/routes/registration.js
Original file line number Diff line number Diff line change
Expand Up @@ -596,7 +596,7 @@ router.get("/get_registration", async (req, res) => {
? registration.RegistrationActivities.map((activity) => ({
id: activity.id,
title: activity.title,
activityType: activity.activity_type_id,
activityType: activity.activity_type.type,
startDate: formatDateString(activity.start_date),
endDate: formatDateString(activity.end_date),
feedbackType: activity.feedback_type,
Expand Down
191 changes: 39 additions & 152 deletions back/routes/registration_feedback.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ const {
Semester,
RegistrationEvidence,
RegistrationSign,
RegistrationActivityFeedback,
RegistrationFeedback,
} = require("../models");
const schedule = require("node-schedule");
Expand All @@ -30,6 +31,44 @@ const formatSignTime = (signTime) => {
.padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`;
};

router.post("/activity_feedback", async (req, res) => {
try {
const authorized = await checkPermission(req, res, [{ executive: 4 }]);
if (!authorized) {
return;
}

const { activity_id, reviewResult } = req.body;
const studentId = req.session.user.student_id;
const currentTimePlusNineHours = new Date(
new Date().getTime() + 9 * 60 * 60 * 1000
);

// Update feedback_type in Activity based on reviewResult
const feedbackType = reviewResult === "" ? 2 : 3;
await RegistrationActivity.update(
{
feedback_type: feedbackType,
recent_feedback: currentTimePlusNineHours,
},
{ where: { id: activity_id } }
);

// Save a new record in ActivityFeedback
await RegistrationActivityFeedback.create({
activity: activity_id,
student_id: studentId,
added_time: currentTimePlusNineHours,
feedback: reviewResult,
});

res.status(200).send("Feedback processed successfully.");
} catch (error) {
console.error("Error in /feedback route:", error);
res.status(500).send("Internal Server Error");
}
});

router.get("/registration_list", async (req, res) => {
const currentDate = new Date();

Expand Down Expand Up @@ -134,156 +173,4 @@ router.post("/feedback", async (req, res) => {
}
});

router.get("/get_registration", async (req, res) => {
const { id } = req.query;

if (!id) {
return res.status(400).json({
success: false,
message: "ID query parameter is required",
});
}

try {
const registration = await Registration.findByPk(id, {
include: [
{
model: RegistrationEvidence,
as: "RegistrationEvidences", // 모델 정의에 따른 alias 사용
attributes: [
"image_url",
"description",
"registration_evidence_type",
],
},
{
model: RegistrationActivity,
as: "RegistrationActivities", // 모델 정의에 따른 alias 사용
attributes: [
"id",
"title",
"activity_type_id",
"start_date",
"end_date",
"feedback_type",
],
},
{
model: RegistrationSign,
as: "RegistrationSigns",
attributes: ["sign_type"],
},
{
model: RegistrationFeedback,
as: "RegistrationFeedbacks",
attributes: ["added_time", "feedback"],
},
],
attributes: [
"type_id",
"club_id",
"student_id",
"prev_name",
"current_name",
"founding_month",
"founding_year",
"phone_number",
"division",
"is_advisor",
"advisor_name",
"advisor_email",
"advisor_level",
"characteristic_kr",
"characteristic_en",
"division_consistency",
"purpose",
"main_plan",
"advisor_plan",
],
});

const authorized = await checkPermission(req, res, [{ executive: 4 }]);
if (!authorized) {
return;
}

if (!registration) {
return res.status(404).json({ message: "Registration not found" });
}
console.log(registration.RegistrationEvidences);

if (!registration) {
return res.status(404).json({ message: "Registration not found" });
}
console.log(registration.RegistrationEvidences);

const formattedRegistration = {
typeId: registration.type_id,
prevName: registration.prev_name,
currentName: registration.current_name,
phoneNumber: registration.phone_number,
foundingYear: registration.founding_year,
foundingMonth: registration.founding_month,
division: registration.division,
isSelectiveAdvisor: registration.is_advisor === 1 ? true : false, // 예시로, DB에서는 0 또는 1로 저장될 수 있습니다.
advisorName: registration.advisor_name,
advisorEmail: registration.advisor_email,
advisorLevel: registration.advisor_level,
characteristicKr: registration.characteristic_kr,
characteristicEn: registration.characteristic_en,
divisionConsistency: registration.division_consistency,
purpose: registration.purpose,
mainPlan: registration.main_plan,
activityReport: registration.RegistrationActivities
? registration.RegistrationActivities
: [],
activityPlan: registration.RegistrationEvidences
? registration.RegistrationEvidences.filter(
(e) => e.registration_evidence_type === 1
).map((e) => ({
imageUrl: e.image_url,
fileName: e.description,
}))
: [],
regulation: registration.RegistrationEvidences
? registration.RegistrationEvidences.filter(
(e) => e.registration_evidence_type === 2
).map((e) => ({
imageUrl: e.image_url,
fileName: e.description,
}))
: [],
externalTeacher: registration.RegistrationEvidences
? registration.RegistrationEvidences.filter(
(e) => e.registration_evidence_type === 3
).map((e) => ({
imageUrl: e.image_url,
fileName: e.description,
}))
: [],
advisorPlan: registration.advisor_plan,
representativeSignature: registration.RegistrationSigns.some(
(sign) => sign.sign_type === 1
),
feedbackResults: registration.RegistrationFeedbacks
? registration.RegistrationFeedbacks.filter(
(feedback) => feedback.feedback.trim() !== ""
) // Exclude empty feedback
.map((feedback) => {
return {
feedbackTime: formatSignTime(feedback.added_time),
text: feedback.feedback,
// reviewerName: feedback.student.name, // assuming you want to include the name of the reviewer
};
})
: [],
};

res.json({ success: true, data: formattedRegistration });
} catch (error) {
console.error("Error fetching registration:", error);
res.status(500).json({ success: false, message: "Server error occurred" });
}
});

module.exports = router;
2 changes: 2 additions & 0 deletions front/src/components/activity/Activity/Activity.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ export const Activity = ({
navigate(`/club_registration_detail/${id}`);
} else if (isRegistration === 3) {
navigate(`/admin/registration/${id}`);
} else if (isRegistration === 4) {
navigate(`/admin/registration/activity/${id}`);
} else {
navigate(`/activity_detail/${id}`);
}
Expand Down
Loading

0 comments on commit d9400b0

Please sign in to comment.