import { KU, Schedule } from "../db/index.js"; import sequelize from 'sequelize'; const { Op } = sequelize const findbyId = async (req, res, next) => { try { const id = req.scheduleId const userId = req.userId let findSchedule = null let startDate = null let endDate = null if (id && userId) { if (userId === "ku") { findSchedule = await KU.findOne({ where: { id: id } }) if (!findSchedule) throw new Error("해당 일정을 찾지 못했습니다.") else { const { id, title, start, end, memo } = findSchedule startDate = dateToString(start, "full") endDate = dateToString(end, "full") req.schedule = { id, title, startDate: startDate, endDate: endDate, memo } } } else { findSchedule = await Schedule.findOne({ where: { [Op.and]: [{ id: id }, { userId: userId }] } }) if (!findSchedule) throw new Error("해당 일정을 찾지 못했습니다.") else { const { id, title, start, end, location, memo } = findSchedule startDate = dateToString(start, "full") endDate = dateToString(end, "full") const startTime = dateToString(start, "time") const endTime = dateToString(end, "time") req.schedule = { id, title, startDate, endDate, startTime, endTime, location, memo } } } next() } else next() } catch (error) { return res.status(500).send(error.message || "일정 가져오는 중 에러 발생") } } const findbyDate = async (req, res, next) => { try { if (req.date || req.month) { let date = "" let findList = null if (req.date) { date = new Date(req.date) if (req.userId === "ku") { findList = await KU.findAll({ where: { [Op.and]: [ { start: { [Op.lte]: date } }, { end: { [Op.gte]: date } } ] }, order: [['updatedAt', 'DESC']] }) findList.forEach(schedule => { schedule.dataValues.start = dateToString(schedule.start, "twoYear") schedule.dataValues.end = dateToString(schedule.end, "twoYear") }) } else { findList = await Schedule.findAll({ where: { [Op.and]: [ { start: { [Op.lte]: date } }, { end: { [Op.gte]: date } } ] }, order: [['updatedAt', 'DESC']] }) } } else { date = new Date(req.month) const year = dateToString(date, "year") const month = dateToString(date, "month") const findKUList = await KU.findAll({ where: { [Op.or]: [ { [Op.and]: [ sequelize.where(sequelize.fn('date_part', 'year', sequelize.col('start')), year), sequelize.where(sequelize.fn('date_part', 'month', sequelize.col('start')), month) ] }, { [Op.and]: [ sequelize.where(sequelize.fn('date_part', 'year', sequelize.col('end')), year), sequelize.where(sequelize.fn('date_part', 'month', sequelize.col('end')), month) ] } ] }, attributes: ['id', 'title', 'start', 'end'] , order: [['start']] }) if (req.userId === "ku") { // console.log("list==",findList) findKUList.forEach(schedule => { // const find = findList.find(el => { // if (el.dataValues.start <= schedule.dataValues.start) { // if (el.dataValues.end >= schedule.dataValues.start) return el // } else if (el.dataValues.start <= schedule.dataValues.end) return el // }) // console.log("find==",find.dataValues) if (dateToString(schedule.start, "full") !== dateToString(schedule.end, "full")) schedule.dataValues.end = schedule.dataValues.end.setDate(schedule.dataValues.end.getDate() + 1) schedule.dataValues.allDay = true schedule.dataValues.className = 'text' }) findList = findKUList } else { const findIndividualList = await Schedule.findAll({ where: { [Op.or]: [ { [Op.and]: [ sequelize.where(sequelize.fn('date_part', 'year', sequelize.col('start')), year), sequelize.where(sequelize.fn('date_part', 'month', sequelize.col('start')), month) ] }, { [Op.and]: [ sequelize.where(sequelize.fn('date_part', 'year', sequelize.col('end')), year), sequelize.where(sequelize.fn('date_part', 'month', sequelize.col('end')), month) ] } ] }, attributes: ['id', 'title', 'start', 'end'] , order: [['start']] }) console.log("개인 일정 찾기", findIndividualList) findList = { KU: findKUList, individual: findIndividualList } } } req.scheduleList = findList next() } else next() } catch (error) { return res.status(500).send(error.message || "일정 가져오는 중 에러 발생") } } const create = async (req, res) => { try { let newSchedule = null let start = null let end = null const userId = req.userId if (userId === "ku") { const { title, startDate, endDate, memo } = req.body start = new Date(startDate) end = new Date(endDate) newSchedule = await KU.create({ title: title, start: start, end: end, memo: memo }) } else { const { title, startDate, endDate, startTime, endTime, allDay, location, memo } = req.body if (allDay === "on") { start = new Date(startDate) end = new Date(endDate) } else { start = new Date(startDate + " " + startTime) end = new Date(endDate + " " + endTime) } newSchedule = await Schedule.create({ title: title, start: start, end: end, location: location, memo: memo, userId: userId }) } return res.json(newSchedule) } catch (error) { return res.status(500).send(error.message || "일정 등록 중 에러 발생") } } const edit = async (req, res) => { try { let updated = null let start = null let end = null const userId = req.userId const { scheduleId } = req.query if (userId === "ku") { const { title, startDate, endDate, memo } = req.body start = new Date(startDate) end = new Date(endDate) updated = await KU.update({ title: title, start: start, end: end, memo: memo }, { where: { id: scheduleId } }) } else { const { title, startDate, endDate, startTime, endTime, allDay, location, memo } = req.body if (allDay === "on") { start = new Date(startDate) end = new Date(endDate) } else { start = new Date(startDate + " " + startTime) end = new Date(endDate + " " + endTime) } updated = await Schedule.update({ title: title, start: start, end: end, location: location, memo: memo }, { where: { [Op.and]: [{ id: scheduleId }, { userId: userId }] } }) } if (!updated) throw new Error("해당 일정의 일부 정보를 수정하는데 실패하였습니다.") else return res.send(200) } catch (error) { return res.status(500).send(error.message || "일정 수정 중 에러 발생") } } const remove = async (req, res) => { try { let deleted = null const userId = req.userId const { scheduleId } = req.query if (userId === "ku") deleted = await KU.destroy({ where: { id: scheduleId } }) else deleted = await Schedule.destroy({ where: { [Op.and]: [{ id: scheduleId }, { userId: userId }] } }) if (!deleted) throw new Error("해당 일정을 삭제하는데 실패하였습니다.") else return res.send(200) } catch (error) { return res.status(500).send(error.message || "일정 삭제 중 에러 발생") } } const getParams = async (req, res, next) => { try { const { userId } = req.params console.log("getParams", userId) req.userId = userId next() } catch (error) { return res.status(500).send(error.message || "일정 가져오는 중 에러 발생") } } const querySeparation = async (req, res, next) => { try { const { scheduleId, date, dateMonth } = req.query req.scheduleId = scheduleId req.date = date req.month = dateMonth next() } catch (error) { return res.status(500).send(error.message || "일정 가져오는 중 에러 발생") } } const send = async (req, res) => { try { const result = req.schedule || req.scheduleList return res.json(result) } catch (error) { return res.status(500).send(error.message || "일정 가져오는 중 에러 발생") } } function dateToString(dateObj, method) { const year = dateObj.getFullYear() const year_disit = String(year).substring(2, 4) const month = dateObj.getMonth() + 1 const date = dateObj.getDate() const hour = dateObj.getHours() const minute = dateObj.getMinutes() switch (method) { case "full": return [year, (month > 9 ? "" : "0") + month, (date > 9 ? "" : "0") + date].join("-") case "twoYear": return [year_disit, (month > 9 ? "" : "0") + month, (date > 9 ? "" : "0") + date].join("-") // case "dateTime": // return [year, (month > 9 ? "" : "0") + month, (date > 9 ? "" : "0") + date, ].join("-") case "time": return [(hour > 9 ? "" : "0") + hour, (minute > 9 ? "" : "0") + minute].join(":") case "year": return year case "month": return month } } export default { findbyId, findbyDate, create, edit, remove, getParams, querySeparation, send }