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 if (id) { const findSchedule = await KU.findOne({ where: { id: id } }) if (!findSchedule) throw new Error("해당 일정을 찾지 못했습니다.") else { const { title, start, end, memo } = findSchedule const startDate = dateToString(start, "full") const endDate = dateToString(end, "full") req.schedule = { title, startDate: startDate, endDate: endDate, 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 = [] if (req.date) { date = new Date(req.date) 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 { date = new Date(req.month) const year = dateToString(date, "year") const month = dateToString(date, "month") findList = 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']] }) // console.log("list==",findList) findList.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' }) } req.scheduleList = findList next() } else next() } catch (error) { return res.status(500).send(error.message || "일정 가져오는 중 에러 발생") } } const create = async (req, res) => { try { let newSchedule = null const userId = req.userId if (userId === "ku") { const { title, startDate, endDate, memo } = req.body const start = new Date(startDate) const 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 newSchedule = await Schedule.create({ title: title, location: location, memo: memo }) } return res.json(newSchedule) } catch (error) { return res.status(500).send(error.message || "일정 등록 중 에러 발생") } } const edit = async (req, res) => { try { let updated = null const userId = req.userId const { scheduleId } = req.query if (userId === "ku") { const { title, startDate, endDate, memo } = req.body updated = await KU.update({ title: title, start: startDate, end: endDate, memo: memo }, { where: { id: scheduleId } }) } else { const { title, startDate, endDate, startTime, endTime, allDay, location, memo } = req.body updated = await Schedule.update({ title: title, memo: memo }, { where: { id: scheduleId } }) } 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: { id: scheduleId } }) 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() if (method === "full") return [year, (month > 9 ? "" : "0") + month, (date > 9 ? "" : "0") + date].join("-") else if (method === "twoYear") return [year_disit, (month > 9 ? "" : "0") + month, (date > 9 ? "" : "0") + date].join("-") else if (method === "year") return year else return month } export default { findbyId, findbyDate, create, edit, remove, getParams, querySeparation, send }