diff --git a/routes/autoCreateExamPhase.js b/routes/autoCreateExamPhase.js new file mode 100644 index 00000000..a8c9c667 --- /dev/null +++ b/routes/autoCreateExamPhase.js @@ -0,0 +1,32 @@ +import express from 'express' +import { createNewSemester } from './semester.js' +import { countCourse } from './course.js' +import { createExamPhases } from './examPhase' +import { DataResponse } from '../common/reponses.js' + +const router = express.Router() + + +router.get('/', async (req, res) => { + try { + let numCou + await countCourse().then(value => numCou = value) + + let semesterId + await createNewSemester().then(value => semesterId = value) + + + let examPhaseList + await createExamPhases(numCou, semesterId).then(value => examPhaseList = value) + + res.json(DataResponse({ + phaseList: examPhaseList, + numCourse: numCou + })); + } catch (error) { + console.error(error); + res.status(500).json({ error: 'Internal Server Error' }); + } +}); + +export default router \ No newline at end of file diff --git a/routes/autoCreateExamRooms.js b/routes/autoCreateExamRooms.js new file mode 100644 index 00000000..83bc1fd6 --- /dev/null +++ b/routes/autoCreateExamRooms.js @@ -0,0 +1,178 @@ +import express from 'express' +import { MessageResponse } from '../common/reponses.js' +import { requireRole } from '../middlewares/auth.js' +import ExamPhase from '../models/ExamPhase.js' +import TimeSlot from '../models/TimeSlot.js' +import ExamSlot from '../models/ExamSlot.js' +import SubInSlot from '../models/SubInSlot.js' +import fs from 'fs' +import ExamRoom from '../models/ExamRoom.js' +import RoomLogTime from '../models/RoomLogTime.js' +import { courseByPhase } from './course.js' +import { randomRoom } from './room.js' + +const router = express.Router() + +router.get('/', async (req, res) => { + + const examPhaseList = await ExamPhase.findAll( + { + order: [ + ['startDay', 'ASC'], + ] + } + )//Đảm bảo thứ tự của ExamPhase từ ngày sớm nhất đến trễ nhất + + const slotList = await TimeSlot.findAll() + + for (const key in examPhaseList) { + let course + await courseByPhase(examPhaseList[key]).then(val => course = val) + //Lấy ra danh sách các Course trong Examphase tương ứng + + /*TestFile-NewPhase + // let dataT = "----------------------" + // fs.appendFileSync("test.txt", dataT + "\n"); + // let dataT1 = "----------------------" + // fs.appendFileSync("test1.txt", dataT1 + "\n"); + // console.log("----------------------"); + */ + + const startDay = new Date(examPhaseList[key].startDay) + const endDay = new Date(examPhaseList[key].endDay) + const diffInMs = Math.abs(endDay - startDay); + const dayLength = diffInMs / (1000 * 60 * 60 * 24) + //Lấy ra khoảng thời gian giữa 2 ngày start và end của 1 examPhase + + let dayList = [] + + for (let i = 0; i <= dayLength; i++) { + let day = new Date(startDay); + if (i !== 0) { + day.setDate(startDay.getDate() + i); + } + dayList.push(day) + }//Add day vào danh sách dayList của 1 examPhase + + let roomSlot = 0 + let dayCount = 0 + let slotCount = 0 + + let examSlot = await ExamSlot.create({ + ePId: examPhaseList[key].id, + day: dayList[0], + timeSlotId: slotList[0].id + })//Khởi tạo ExamSlot mặc định + + for (let i = 0; i < course.length; i++) { //Duyệt danh sách Môn Thi + + /*TestFile-NewCouse + // let msg = "New Course" + // fs.appendFileSync("test.txt", msg + "\n"); + */ + + let daySlot = dayList[dayCount] + let slot = slotList[slotCount].id + + if (roomSlot > process.env.NUMBER_OF_FLOOR * process.env.NUMBER_OF_ROOM_IN_FLOOR) { + roomSlot = 0 + slotCount++; + if (slotCount <= process.env.NUMBER_OF_SLOT - 1) { + slot = slotList[slotCount].id + examSlot = await ExamSlot.create({ + ePId: examPhaseList[key].id, + day: daySlot, + timeSlotId: slot + }) + }// Cộng thêm 1 Slot mỗi khi không đủ phòng thi + + + if (slotCount > process.env.NUMBER_OF_SLOT - 1) { + slotCount = 0 + dayCount++; + if (slotCount <= process.env.NUMBER_OF_SLOT - 1) { + slot = slotList[slotCount].id + daySlot = dayList[dayCount] + examSlot = await ExamSlot.create({ + ePId: examPhaseList[key].id, + day: daySlot, + timeSlotId: slot + }) + + } + }// Cộng thêm 1 Day mỗi khi không đủ phòng thi + } + + const val = course[i]; + + let NumRoomOfCourse = Math.ceil(val.numOfStu / process.env.NUMBER_OF_STUDENT_IN_ROOM); + + /* TestFile-CurrentSlot-NumRoomOfCourse + //let currentSlot = "Current Slot: " + slotCount + //fs.appendFileSync("test.txt", currentSlot + "\n"); + //let roomCourseData = "roomCourse của môn: " + roomCourse + //fs.appendFileSync("test.txt", roomCourseData + "\n"); + */ + + roomSlot += NumRoomOfCourse + + /* TestFile-RoomSlot + // let roomSlotData = "RoomSlot sau khi add: " + roomSlot + // fs.appendFileSync("test.txt", roomSlotData + "\n"); + */ + + if (roomSlot <= process.env.NUMBER_OF_FLOOR * process.env.NUMBER_OF_ROOM_IN_FLOOR) { + + //Tạo mới 1 SubjectInSlot + let subjectInSlot = await SubInSlot.create({ + courId: val.id, + exSlId: examSlot.id + }) + + /* TestFile-subID--examSlotID + // let data = subjectInSlot.courId + "--" + subjectInSlot.exSlId + // fs.appendFileSync("test1.txt", data + "\n"); + */ + + for (let i = 0; i < NumRoomOfCourse; i++) { + let room + let roomCheck + do { + room = await randomRoom().then(val => room = val) + roomCheck = {} + roomCheck = await RoomLogTime.findOne({ + where: { + roomId: room.id, + day: daySlot, + timeSlotId: slot + } + }) + } while (roomCheck); + + /*TestFile-subID--examSlotID + // let data = val.id + ".." + val.numOfStu + ".." + daySlot.getDate() + ".." + slot + // let data1 = dayCount + "---" + slotCount + // fs.appendFileSync("test.txt", data1 + "\n"); + // fs.appendFileSync("test.txt", data + "\n"); + */ + console.log(room.id); + await ExamRoom.create({ + sSId: subjectInSlot.id, + roomId: room.id + }) + await RoomLogTime.create({ + roomId: room.id, + day: daySlot, + timeSlotId: slot + }) + } + } else { + i-- + } + } + } + + res.json(MessageResponse("Create ExamRooms Successfully !")) +}) + +export default router \ No newline at end of file diff --git a/routes/examPhase.js b/routes/examPhase.js index 1684087d..d93ef642 100644 --- a/routes/examPhase.js +++ b/routes/examPhase.js @@ -89,28 +89,6 @@ router.delete('/', async (req, res) => { // Delete Exam Phase } }) -router.get('/generateExamPhaseByCourse', async (req, res) => { - try { - let numCou - await countCourse().then(value => numCou = value) - - let semesterId - await createNewSemester().then(value => semesterId = value) - - - let examPhaseList - await createExamPhases(numCou, semesterId).then(value => examPhaseList = value) - - res.json(DataResponse({ - phaseList: examPhaseList, - numCourse: numCou - })); - } catch (error) { - console.error(error); - res.status(500).json({ error: 'Internal Server Error' }); - } -}); - router.put('/updatePhase', async (req, res) => { try { const examPhaseId = req.body.examPhaseId diff --git a/routes/examSlot.js b/routes/examSlot.js index 7079ebbc..1a97ac07 100644 --- a/routes/examSlot.js +++ b/routes/examSlot.js @@ -4,12 +4,6 @@ import { requireRole } from '../middlewares/auth.js' import ExamPhase from '../models/ExamPhase.js' import TimeSlot from '../models/TimeSlot.js' import ExamSlot from '../models/ExamSlot.js' -import SubInSlot from '../models/SubInSlot.js' -import fs from 'fs' -import ExamRoom from '../models/ExamRoom.js' -import RoomLogTime from '../models/RoomLogTime.js' -import { courseByPhase } from './course.js' -import { randomRoom } from './room.js' const router = express.Router() @@ -69,182 +63,4 @@ router.delete('/', async (req, res) => { } }) -router.get('/', async (req, res) => { - - const examPhaseList = await ExamPhase.findAll( - { - order: [ - ['startDay', 'ASC'], - ] - } - )//Đảm bảo thứ tự của ExamPhase từ ngày sớm nhất đến trễ nhất - - const slotList = await TimeSlot.findAll() - - for (const key in examPhaseList) { - let course - await courseByPhase(examPhaseList[key]).then(val => course = val) - //Lấy ra danh sách các Course trong Examphase tương ứng - - /*TestFile-NewPhase - // let dataT = "----------------------" - // fs.appendFileSync("test.txt", dataT + "\n"); - // let dataT1 = "----------------------" - // fs.appendFileSync("test1.txt", dataT1 + "\n"); - // console.log("----------------------"); - */ - - const startDay = new Date(examPhaseList[key].startDay) - const endDay = new Date(examPhaseList[key].endDay) - const diffInMs = Math.abs(endDay - startDay); - const dayLength = diffInMs / (1000 * 60 * 60 * 24) - //Lấy ra khoảng thời gian giữa 2 ngày start và end của 1 examPhase - - let dayList = [] - - for (let i = 0; i <= dayLength; i++) { - let day = new Date(startDay); - if (i !== 0) { - day.setDate(startDay.getDate() + i); - } - dayList.push(day) - }//Add day vào danh sách dayList của 1 examPhase - - let roomSlot = 0 - let dayCount = 0 - let slotCount = 0 - - let examSlot = await ExamSlot.create({ - ePId: examPhaseList[key].id, - day: dayList[0], - timeSlotId: slotList[0].id - })//Khởi tạo ExamSlot mặc định - - for (let i = 0; i < course.length; i++) { //Duyệt danh sách Môn Thi - - /*TestFile-NewCouse - // let msg = "New Course" - // fs.appendFileSync("test.txt", msg + "\n"); - */ - - let daySlot = dayList[dayCount] - let slot = slotList[slotCount].id - - if (roomSlot > process.env.NUMBER_OF_FLOOR * process.env.NUMBER_OF_ROOM_IN_FLOOR) { - roomSlot = 0 - slotCount++; - if (slotCount <= process.env.NUMBER_OF_SLOT - 1) { - slot = slotList[slotCount].id - examSlot = await ExamSlot.create({ - ePId: examPhaseList[key].id, - day: daySlot, - timeSlotId: slot - }) - }// Cộng thêm 1 Slot mỗi khi không đủ phòng thi - - - if (slotCount > process.env.NUMBER_OF_SLOT - 1) { - slotCount = 0 - dayCount++; - if (slotCount <= process.env.NUMBER_OF_SLOT - 1) { - slot = slotList[slotCount].id - daySlot = dayList[dayCount] - examSlot = await ExamSlot.create({ - ePId: examPhaseList[key].id, - day: daySlot, - timeSlotId: slot - }) - - } - }// Cộng thêm 1 Day mỗi khi không đủ phòng thi - } - - const val = course[i]; - - let NumRoomOfCourse = Math.ceil(val.numOfStu / process.env.NUMBER_OF_STUDENT_IN_ROOM); - - /* TestFile-CurrentSlot-NumRoomOfCourse - //let currentSlot = "Current Slot: " + slotCount - //fs.appendFileSync("test.txt", currentSlot + "\n"); - //let roomCourseData = "roomCourse của môn: " + roomCourse - //fs.appendFileSync("test.txt", roomCourseData + "\n"); - */ - - roomSlot += NumRoomOfCourse - - /* TestFile-RoomSlot - // let roomSlotData = "RoomSlot sau khi add: " + roomSlot - // fs.appendFileSync("test.txt", roomSlotData + "\n"); - */ - - if (roomSlot <= process.env.NUMBER_OF_FLOOR * process.env.NUMBER_OF_ROOM_IN_FLOOR) { - - //Tạo mới 1 SubjectInSlot - let subjectInSlot = await SubInSlot.create({ - courId: val.id, - exSlId: examSlot.id - }) - - /* TestFile-subID--examSlotID - // let data = subjectInSlot.courId + "--" + subjectInSlot.exSlId - // fs.appendFileSync("test1.txt", data + "\n"); - */ - - for (let i = 0; i < NumRoomOfCourse; i++) { - let room - let roomCheck - do { - room = await randomRoom().then(val => room = val) - roomCheck = {} - roomCheck = await RoomLogTime.findOne({ - where: { - roomId: room.id, - day: daySlot, - timeSlotId: slot - } - }) - } while (roomCheck); - - /*TestFile-subID--examSlotID - // let data = val.id + ".." + val.numOfStu + ".." + daySlot.getDate() + ".." + slot - // let data1 = dayCount + "---" + slotCount - // fs.appendFileSync("test.txt", data1 + "\n"); - // fs.appendFileSync("test.txt", data + "\n"); - */ - console.log(room.id); - await ExamRoom.create({ - sSId: subjectInSlot.id, - roomId: room.id - }) - await RoomLogTime.create({ - roomId: room.id, - day: daySlot, - timeSlotId: slot - }) - } - } else { - i-- - } - } - } - - res.json('hihi') -}) - -export async function createExamSlot() { - try { - const examPhaseList = await ExamPhase.findAll( - { - order: [ - ['startDay', 'ASC'], - ] - } - ) - - } catch (error) { - console.log(err) - res.json(InternalErrResponse()); - } -} - export default router \ No newline at end of file diff --git a/server.js b/server.js index 6b2cfb3d..07b8aca4 100644 --- a/server.js +++ b/server.js @@ -27,6 +27,8 @@ import subInSlotRouter from './routes/subInSlot.js' import examRoomRouter from './routes/examRoom.js' import studentExamRouter from './routes/studentExam.js' import authenticateRouter from './routes/authenticate.js' +import autoCreateExamPhasesRouter from './routes/autoCreateExamPhase.js' +import autoCreateExamRoomsRouter from './routes/autoCreateExamRooms.js' import overwriteResponseJSON from './middlewares/overwriteResponseJSON.js' @@ -73,9 +75,8 @@ server.use('/subInSlots', subInSlotRouter) server.use('/examRooms', examRoomRouter) server.use('/studentExams', studentExamRouter) server.use('/auth', authenticateRouter) -//tanBE test - -// khoaBE test +server.use('/autoCreateExamPhases', autoCreateExamPhasesRouter) +server.use('/autoCreateExamRooms', autoCreateExamRoomsRouter) server.listen(PORT, () => { console.log(`Server is listening at PORT=${PORT}`)