schedule.controller.js 11.9 KB
Newer Older
Kim, Subin's avatar
Kim, Subin committed
1
2
import { KU, Schedule } from "../db/index.js";
import sequelize from 'sequelize';
3

Kim, Subin's avatar
Kim, Subin committed
4
5
6
7
8
const { Op } = sequelize

const findbyId = async (req, res, next) => {
    try {
        const id = req.scheduleId
Kim, Subin's avatar
context    
Kim, Subin committed
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
        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 }
                }
Kim, Subin's avatar
Kim, Subin committed
34
35
36
37
38
39
40
41
42
            }
            next()
        } else next()
    } catch (error) {
        return res.status(500).send(error.message || "일정 가져오는 중 에러 발생")
    }
}

const findbyDate = async (req, res, next) => {
43
    try {
Kim, Subin's avatar
Kim, Subin committed
44
45
        if (req.date || req.month) {
            let date = ""
Kim, Subin's avatar
context    
Kim, Subin committed
46
            let findList = null
Kim, Subin's avatar
Kim, Subin committed
47
48
            if (req.date) {
                date = new Date(req.date)
Kim, Subin's avatar
context    
Kim, Subin committed
49
50
51
52
53
54
55
56
57
58
59
60
                if (req.userId === "ku") {
                    findList = await KU.findAll({
                        where: {
                            [Op.and]: [
                                {
                                    start: {
                                        [Op.lte]: date
                                    }
                                }, {
                                    end: {
                                        [Op.gte]: date
                                    }
Kim, Subin's avatar
Kim, Subin committed
61
                                }
Kim, Subin's avatar
context    
Kim, Subin committed
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
                            ]
                        }, 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
                                    }
Kim, Subin's avatar
Kim, Subin committed
81
                                }
Kim, Subin's avatar
context    
Kim, Subin committed
82
83
84
85
                            ]
                        }, order: [['updatedAt', 'DESC']]
                    })
                }
Kim, Subin's avatar
Kim, Subin committed
86
87
88
89
            } else {
                date = new Date(req.month)
                const year = dateToString(date, "year")
                const month = dateToString(date, "month")
Kim, Subin's avatar
context    
Kim, Subin committed
90
                const findKUList = await KU.findAll({
Kim, Subin's avatar
Kim, Subin committed
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
                    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']]
                })
Kim, Subin's avatar
context    
Kim, Subin committed
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
                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 }
                }
Kim, Subin's avatar
Kim, Subin committed
144
145
146
147
148
149
150
151
            }
            req.scheduleList = findList
            next()
        } else next()
    } catch (error) {
        return res.status(500).send(error.message || "일정 가져오는 중 에러 발생")
    }
}
152

Kim, Subin's avatar
Kim, Subin committed
153
154
155
const create = async (req, res) => {
    try {
        let newSchedule = null
Kim, Subin's avatar
context    
Kim, Subin committed
156
157
        let start = null
        let end = null
Kim, Subin's avatar
Kim, Subin committed
158
159
160
        const userId = req.userId
        if (userId === "ku") {
            const { title, startDate, endDate, memo } = req.body
Kim, Subin's avatar
context    
Kim, Subin committed
161
162
            start = new Date(startDate)
            end = new Date(endDate)
Kim, Subin's avatar
Kim, Subin committed
163
164
165
            newSchedule = await KU.create({ title: title, start: start, end: end, memo: memo })
        } else {
            const { title, startDate, endDate, startTime, endTime, allDay, location, memo } = req.body
Kim, Subin's avatar
context    
Kim, Subin committed
166
167
168
169
170
171
172
173
            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 })
Kim, Subin's avatar
Kim, Subin committed
174
175
        }
        return res.json(newSchedule)
176
177
178
179
180
181
182
    } catch (error) {
        return res.status(500).send(error.message || "일정 등록 중 에러 발생")
    }
}

const edit = async (req, res) => {
    try {
Kim, Subin's avatar
Kim, Subin committed
183
        let updated = null
Kim, Subin's avatar
context    
Kim, Subin committed
184
185
        let start = null
        let end = null
Kim, Subin's avatar
Kim, Subin committed
186
187
188
189
        const userId = req.userId
        const { scheduleId } = req.query
        if (userId === "ku") {
            const { title, startDate, endDate, memo } = req.body
Kim, Subin's avatar
context    
Kim, Subin committed
190
191
192
            start = new Date(startDate)
            end = new Date(endDate)
            updated = await KU.update({ title: title, start: start, end: end, memo: memo }, { where: { id: scheduleId } })
Kim, Subin's avatar
Kim, Subin committed
193
194
        } else {
            const { title, startDate, endDate, startTime, endTime, allDay, location, memo } = req.body
Kim, Subin's avatar
context    
Kim, Subin committed
195
196
197
198
199
200
201
202
203
            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 }] } })
Kim, Subin's avatar
Kim, Subin committed
204
205
206
        }
        if (!updated) throw new Error("해당 일정의 일부 정보를 수정하는데 실패하였습니다.")
        else return res.send(200)
207
208
209
210
211
212
213
    } catch (error) {
        return res.status(500).send(error.message || "일정 수정 중 에러 발생")
    }
}

const remove = async (req, res) => {
    try {
Kim, Subin's avatar
Kim, Subin committed
214
215
216
217
        let deleted = null
        const userId = req.userId
        const { scheduleId } = req.query
        if (userId === "ku") deleted = await KU.destroy({ where: { id: scheduleId } })
Kim, Subin's avatar
context    
Kim, Subin committed
218
        else deleted = await Schedule.destroy({ where: { [Op.and]: [{ id: scheduleId }, { userId: userId }] } })
Kim, Subin's avatar
Kim, Subin committed
219
220
        if (!deleted) throw new Error("해당 일정을 삭제하는데 실패하였습니다.")
        else return res.send(200)
221
222
223
224
225
    } catch (error) {
        return res.status(500).send(error.message || "일정 삭제 중 에러 발생")
    }
}

Kim, Subin's avatar
Kim, Subin committed
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
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()
Kim, Subin's avatar
context    
Kim, Subin committed
263
264
    const hour = dateObj.getHours()
    const minute = dateObj.getMinutes()
Kim, Subin's avatar
Kim, Subin committed
265

Kim, Subin's avatar
context    
Kim, Subin committed
266
267
268
269
270
271
272
273
274
275
276
277
278
279
    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
    }
Kim, Subin's avatar
Kim, Subin committed
280
281
}

282
export default {
Kim, Subin's avatar
Kim, Subin committed
283
284
    findbyId,
    findbyDate,
285
286
    create,
    edit,
Kim, Subin's avatar
Kim, Subin committed
287
288
289
290
    remove,
    getParams,
    querySeparation,
    send
291
}