diff --git a/main.go b/main.go index 041ace5..cfb70b7 100644 --- a/main.go +++ b/main.go @@ -67,7 +67,7 @@ func logCallback(e WrappedError.Error) { // {{{ Month int Day int Time string - Error any + Error error }{now.Year(), int(now.Month()), now.Day(), now.Format("15:04:05"), e} j, _ := json.Marshal(out) diff --git a/schedule.go b/schedule.go index 2966917..3520283 100644 --- a/schedule.go +++ b/schedule.go @@ -192,37 +192,42 @@ func ExpiredSchedules() (schedules []Schedule) { // {{{ func FutureSchedules(userID int) (schedules []Schedule, err error) {// {{{ schedules = []Schedule{} - res, err := service.Db.Conn.Queryx(` + res := service.Db.Conn.QueryRow(` + WITH schedule_events AS ( + SELECT + s.id, + s.user_id, + to_jsonb(n.*) AS node, + s.schedule_uuid, + (time - MAKE_INTERVAL(mins => s.remind_minutes)) AT TIME ZONE u.timezone AS time, + s.description, + s.acknowledged + FROM schedule s + INNER JOIN public.user u ON s.user_id = u.id + INNER JOIN node n ON s.node_id = n.id + WHERE + s.user_id=$1 AND + time >= NOW() AND + NOT acknowledged + ) SELECT - id, - user_id, - node_id, - schedule_uuid, - time, - description - FROM schedule - WHERE - user_id = $1 AND - time >= NOW() AND - NOT acknowledged - ORDER BY - time ASC - `, - userID, + COALESCE(jsonb_agg(s.*), '[]'::jsonb) + FROM schedule_events s + `, + userID, ) + var j []byte + err = res.Scan(&j) if err != nil { - err = werr.Wrap(err).WithCode("002-000B") + err = werr.Wrap(err).WithCode("002-000B").WithData(userID) return } - defer res.Close() - for res.Next() { - s := Schedule{} - if err = res.Scan(&s.ID, &s.UserID, &s.Node.ID, &s.ScheduleUUID, &s.Time, &s.Description); err != nil { - err = werr.Wrap(err).WithCode("002-000C") - return - } - schedules = append(schedules, s) + err = json.Unmarshal(j, &schedules) + if err != nil { + err = werr.Wrap(err).WithCode("002-0010").WithData(string(j)).Log() + return } + return }// }}}