Skip to content

Commit

Permalink
Merge branch 'develop' into cdChan
Browse files Browse the repository at this point in the history
  • Loading branch information
chan000518 authored Aug 12, 2024
2 parents dece5cc + 45a69fa commit 4ffef59
Show file tree
Hide file tree
Showing 15 changed files with 726 additions and 236 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/fastcd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,17 @@ jobs:
runs-on: ubuntu-latest

steps:
# 리포지토리의 코드를 체크아웃합니다.
- name: Check out the repository
uses: actions/checkout@v3

# Node.js 환경을 설정합니다.
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '16'

# 프로젝트의 의존성을 설치합니다.
- name: Install dependencies
run: npm install

Expand Down
95 changes: 95 additions & 0 deletions api/controllers/assignmentController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
const Assignment = require('../models/assignment');
const Grade = require('../models/grade');
const User = require('../models/user');

//과제 생성
exports.createAssignment = async(req, res)=>{
try{

const {name, date} = req.body;

if(!name || !date){
return res.status(400).send({message : "과제 이름과 날짜는 필수입니다."});
}

const assignment = new Assignment({name, date});
await assignment.save();

const users = await User.find();
if(!users.length){
return res.status(400).send({message : "사용자가 없습니다"});
}

//모든 user에 대한 grade db 생성
const gradeDocuments = users.map(user =>({
user: user._id,
userName: user.username,
assignment: assignment._id,
assignmentName: assignment.name,
assignmentDate: assignment.date,
deduction: 0
}));

await Grade.insertMany(gradeDocuments);

res.status(201).send({message : "과제가 성공적으로 생성되었습니다", assignment});
} catch(error){
res.status(500).send({message : "과제 생성 도중 오류가 발생했습니다", error});
}
};

//모든 과제 조회
exports.getAllAssignments = async(req, res)=>{
try{
const assignments = await Assignment.find();
res.status(200).send(assignments);
} catch(error){
res.status(500).send({message : "과제를 가져오는 도중 오류가 발생했습니다", error});
}
};

//특정 과제 조회 + 해당 과제의 모든 채점 결과도 조회
exports.getAssignmentById = async(req, res)=>{
try{
const {assignmentId} = req.params;

const assignment = await Assignment.findById(assignmentId);
if(!assignment){
return res.status(404).send({message : "과제를 찾을 수 없습니다"});
}

const grades = await Grade.find({assignment : assignment._id});

res.status(200).send({assignment, grades});
} catch(error){
res.status(500).send({message : "과제를 가져오는 도중 오류가 발생했습니다", error});
}
};

//과제 삭제
exports.deleteAssignment = async(req, res)=>{
try{
const {assignmentId} = req.params;

if(!assignmentId){
return res.status(400).send({message : "과제 ID가 필요합니다"});
}

//Id에 해당하는 과제가 존재하는지 확인
const assignment = await Assignment.findById(assignmentId);
if(!assignment){
return res.status(404).send({message : "해당 과제를 찾을 수 없습니다"});
}

//해당 과제의 채점 정보 삭제
await Grade.deleteMany({assignment : assignmentId});

//과제 삭제
await Assignment.findByIdAndDelete(assignmentId);


res.status(200).send({message: "과제가 성공적으로 삭제되었습니다"});
}catch(error){
res.status(500).send({message : "과제 삭제 도중 오류가 발생했습니다", error});
}
};
169 changes: 41 additions & 128 deletions api/controllers/depositController.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,132 +73,6 @@ exports.dependAdd = async (req, res) => {
}
};


// 과제 정보 입력
exports.AssignmentInsert = async (req, res) => {
try {
const { assignment, lackList, xList } = req.body;

// lackList의 사용자별로 체크 상태와 차감 내역을 추가
for (const userId of lackList) {
const deposit = await getOrCreateDeposit(userId);

if (deposit) {
// 미흡 과제 추가
deposit.assignmentList.push({
assignmentIdx: deposit.assignmentList.length + 1,
assignment: assignment,
assignedDate: new Date(),
check: true
});
// 차감 내역 추가
deposit.deductionList.push({
deductionIdx: deposit.deductionList.length + 1,
deductionDate: new Date(),
deductedAmount: -10000,
deductionDetail: `미흡 과제 : ${assignment}`,
});
deposit.updateDeposit(-10000);
// 변경사항 저장
await deposit.save();
}
}

// xList의 사용자별로 체크 상태와 차감 내역을 추가
for (const userId of xList) {
const deposit = await getOrCreateDeposit(userId);

if (deposit) {
// 미제출 과제 추가
deposit.assignmentList.push({
assignmentIdx: deposit.assignmentList.length + 1,
assignment: assignment,
assignedDate: new Date(),
check: false
});
// 차감 내역 추가
deposit.deductionList.push({
deductionIdx: deposit.deductionList.length + 1,
deductionDate: new Date(),
deductedAmount: -20000,
deductionDetail: `미제출 과제 : ${assignment}`,
});
deposit.updateDeposit(-20000);
// 변경사항 저장
await deposit.save();
}
}

res.status(200).json({ message: '과제 정보 입력이 성공적으로 되었습니다' });
} catch (error) {
console.error(error);
res.status(500).json({ message: 'Server error' });
}
};


// 과제 정보 수정(과제 리스트 수정)
exports.AssignmentUpdate = async (req, res) => {
try {
const { userId, assignment, check, pass } = req.body;

const deposit = await getOrCreateDeposit(userId);

// 기존 과제 항목을 찾기
const assignmentIndex = deposit.assignmentList.findIndex(item => item.assignment === assignment);
if (assignmentIndex !== -1) {
if (pass) {
// 과제 항목 삭제
const deletedAssignment = deposit.assignmentList.splice(assignmentIndex, 1)[0];

// 보증금 업데이트
deposit.updateDeposit(deletedAssignment.check ? 10000 : 20000);

// 차감 내역에서 해당 과제 항목 삭제
const deductionIndex = deposit.deductionList.findIndex(item => item.deductionDetail.includes(assignment));
if (deductionIndex !== -1) {
deposit.deductionList.splice(deductionIndex, 1);
}
} else {
// 과제 항목 수정
deposit.assignmentList[assignmentIndex].check = check;

// 차감 내역 수정
const deductionIndex = deposit.deductionList.findIndex(item => item.deductionDetail.includes(assignment));
if (deductionIndex !== -1) {
deposit.deductionList[deductionIndex].deductedAmount = check ? -10000 : -20000;
}
}
} else {
// 과제 항목이 없으면 새로 추가합니다.
deposit.assignmentList.push({
assignmentIdx: deposit.assignmentList.length + 1,
assignment: assignment,
assignedDate: new Date(),
check: check
});
// 차감 내역 추가
deposit.deductionList.push({
deductionIdx: deposit.deductionList.length + 1,
deductionDate: new Date(),
deductedAmount: check ? -10000 : -20000,
deductionDetail: `${check ? '미흡' : '미제출'} 과제: ${assignment}`,
});
// 보증금 업데이트
deposit.updateDeposit(check ? -10000 : -20000);
}

// 변경사항 저장
await deposit.save();

res.status(200).json({ message: "과제 정보가 성공적으로 수정되었습니다" , deposit});
} catch (error) {
console.error(error);
res.status(500).json({ message: 'Server error' });
}
};


//잔여 보증금 보여주기
exports.checkDeposit = async(req, res)=>{
try{
Expand All @@ -209,19 +83,58 @@ exports.checkDeposit = async(req, res)=>{
return res.status(400).send({message: "존재하지 않는 사용자입니다."});
}

const deposit = await Deposit.findOne({user: user._id}).select('deposit deductionList');
const deposit = await Deposit.findOne({user: user._id}).select('deposit deductionList defendList');
if(!deposit){
return res.status(400).send({message : "보증금 내역이 존재하지 않습니다."});
}

const deductionList = deposit.deductionList;
const defendList = deposit.defendList;

res.status(201).send({user, deposit: deposit.deposit, deductionList});
res.status(201).send({user, deposit: deposit.deposit, deductionList, defendCount : defendList.length});
} catch(error){
res.status(500).send({message: "보증금 정보를 가져오는 도중 오류가 발생했습니다.", error});
}
};

//보증금 내역 수정하기
exports.updateDeposit = async(req, res)=>{
try{
const {userId, deductionIdx} = req.params;
const {deductedAmount, deductionDetail} = req.body;

const user = await User.findById(userId);
if(!user){
return res.status(400).send({message : "존재하지 않는 사용자입니다."});
}

const deposit = await Deposit.findOne({user : user._id});
if(!deposit){
return res.status(400).send({message : "보증금 내역이 존재하지 않습니다."})
}

const deductionIndex = deposit.deductionList.findIndex(deduction => deduction.deductionIdx === parseInt(deductionIdx, 10));
if(deductionIndex === -1){
return res.status(400).send({message : "해당 차감 내역을 찾을 수 없습니다."});
}

//내역 업데이트
const oldDeductedAmount = deposit.deductionList[deductionIndex].deductedAmount;
deposit.deductionList[deductionIndex].deductedAmount = deductedAmount;
deposit.deductionList[deductionIndex].deductionDetail = deductionDetail;

//보증금 업데이트
deposit.updateDeposit(deductedAmount - oldDeductedAmount);

await deposit.save();

res.status(200).send({message : "차감 내역이 성공적으로 수정되었습니다", deductionList : deposit.deductionList});

}catch(error){
res.status(500).send({message : "차감 내역을 수정하는 도중 오류가 발생했습니다.", error});
}
}

//보증금 방어권 사용
exports.useDefend = async(req, res)=>{
try{
Expand Down
42 changes: 42 additions & 0 deletions api/controllers/gradeController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
const Assignment = require('../models/assignment');
const Grade = require('../models/grade');
const User = require('../models/user');


//특정 유저의 과제 점수 수정
exports.updateScore = async(req, res)=>{
try{
const {assignmentId, userId} = req.params;
const {score} = req.body;

//기존의 grade 찾기
const grade = await Grade.findOne({assignment : assignmentId, user: userId});
if(!grade){
return res.status(404).send({message : "점수를 찾을 수 없습니다"});
}

grade.deduction = score;

await grade.save();

res.status(200).send({message : "점수를 성공적으로 업데이트 하였습니다", score : score, userId : userId, assignmentId : assignmentId});
} catch(error){
res.status(500).send({message : "점수 업데이트 중 오류가 발생했습니다", error});
}
}

//특정 유저의 모든 채점 결과 조회
exports.getScore = async(req, res)=>{
try{
const {userId} = req.params;

const grades = await Grade.find({user : userId});
if(!grades.length){
return res.status(404).send({message : "채점 결과를 찾을 수 없습니다"});
}

res.status(200).send({message : "채점 결과를 성공적으로 조회했습니다", grades : grades});
} catch(error){
res.status(500).send({message : "채점 결과를 조회하는 중 오류가 발생했습니다", error});
}
}
6 changes: 4 additions & 2 deletions api/controllers/sessionController.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ exports.getAllSessions = async (req, res) => {
};

// 하나의 세션 조회 + 해당 세션의 모든 출석도 조회
exports.getSessionById = async (req, res) => {
exports.getSessionById = async (req, res, next) => {
try {
const { id } = req.params;

Expand All @@ -94,7 +94,9 @@ exports.getSessionById = async (req, res) => {
}

const attends = await Attend.find({ session: session._id });
res.status(200).send({ session, attends });
req.sessionData = { session, attends, dbState : 1 }; // req 객체에 sessionData 속성 추가
next();
// res.status(200).send({ session, attends });
} catch (error) {
res.status(500).send({ message: "세션을 가져오는 중 오류가 발생했습니다", error });
}
Expand Down
2 changes: 1 addition & 1 deletion api/controllers/userController.js
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ exports.updateUserAttendance = async (req, res) => {
// DB에 업데이트
await attendance.save();

res.status(200).send('성공적으로 데이터를 옮겼습니다.');
res.status(200).send({ message: '성공적으로 데이터를 옮겼습니다.' });
} catch (error) {
console.error('데이터를 옮기는데 실패했습니다', error);
res.status(500).send('데이터를 옮기는데 실패했습니다');
Expand Down
Loading

0 comments on commit 4ffef59

Please sign in to comment.