/
schedule_handlers.go
157 lines (136 loc) · 4.02 KB
/
schedule_handlers.go
1
2
3
4
5
6
7
8
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
package handlers
import (
"encoding/json"
"fmt"
"net/http"
"github.com/gorilla/mux"
"github.com/khulnasoft/meshplay/server/models"
)
// swagger:route POST /api/user/schedules SchedulesAPI idPostSchedules
// Handle POST request for Schedules
//
// Save schedule using the current provider's persistence mechanism
// responses:
// 200: singleScheduleResponseWrapper
// SaveScheduleHandler will save schedule using the current provider's persistence mechanism
func (h *Handler) SaveScheduleHandler(
rw http.ResponseWriter,
r *http.Request,
_ *models.Preference,
_ *models.User,
provider models.Provider,
) {
defer func() {
_ = r.Body.Close()
}()
var parsedBody *models.Schedule
if err := json.NewDecoder(r.Body).Decode(&parsedBody); err != nil {
rw.WriteHeader(http.StatusBadRequest)
//failed to read request body
//fmt.Fprintf(rw, ErrRequestBody(err).Error(), err)
h.log.Error(ErrRequestBody(err))
http.Error(rw, ErrRequestBody(err).Error(), http.StatusInternalServerError)
return
}
token, err := provider.GetProviderToken(r)
if err != nil {
//failed to get user token
h.log.Error(ErrRetrieveUserToken(err))
http.Error(rw, ErrRetrieveUserToken(err).Error(), http.StatusInternalServerError)
return
}
resp, err := provider.SaveSchedule(token, parsedBody)
if err != nil {
obj := "schedule"
//Failed to save the schedule
h.log.Error(ErrFailToSave(err, obj))
http.Error(rw, ErrFailToSave(err, obj).Error(), http.StatusInternalServerError)
return
}
rw.Header().Set("Content-Type", "application/json")
fmt.Fprint(rw, string(resp))
}
// swagger:route GET /api/user/schedules SchedulesAPI idGetSchedules
// Handle GET request for Schedules
//
// # Returns the list of all the schedules saved by the current user
//
// ```?order={field}``` orders on the passed field
//
// ```?page={page-number}``` Default page number is 0
//
// ```?pagesize={pagesize}``` Default pagesize is 10
// responses:
//
// 200: schedulesResponseWrapper
func (h *Handler) GetSchedulesHandler(
rw http.ResponseWriter,
r *http.Request,
_ *models.Preference,
_ *models.User,
provider models.Provider,
) {
q := r.URL.Query()
resp, err := provider.GetSchedules(r, q.Get("page"), q.Get("pagesize"), q.Get("order"))
if err != nil {
obj := "schedules"
//unable to get schedules
h.log.Error(ErrQueryGet(obj))
http.Error(rw, ErrQueryGet(obj).Error(), http.StatusInternalServerError)
return
}
rw.Header().Set("Content-Type", "application/json")
fmt.Fprint(rw, string(resp))
}
// swagger:route DELETE /api/user/schedules/{id} SchedulesAPI idDeleteSchedules
// Handle DELETE request for Schedules
//
// Deletes a schedule with the given id
// responses:
// 200: schedulesResponseWrapper
// DeleteScheduleHandler deletes a schedule with the given id
func (h *Handler) DeleteScheduleHandler(
rw http.ResponseWriter,
r *http.Request,
_ *models.Preference,
_ *models.User,
provider models.Provider,
) {
ScheduleID := mux.Vars(r)["id"]
resp, err := provider.DeleteSchedule(r, ScheduleID)
if err != nil {
obj := "schedule"
//unable to delete schedules
h.log.Error(ErrFailToDelete(err, obj))
http.Error(rw, ErrFailToDelete(err, obj).Error(), http.StatusInternalServerError)
return
}
rw.Header().Set("Content-Type", "application/json")
fmt.Fprint(rw, string(resp))
}
// swagger:route GET /api/user/schedules/{id} SchedulesAPI idGetSingleSchedule
// Handle GET request for Schedules
//
// Fetches and returns the schedule with the given id
// responses:
// 200: singleScheduleResponseWrapper
// GetScheduleHandler fetches the schedule with the given id
func (h *Handler) GetScheduleHandler(
rw http.ResponseWriter,
r *http.Request,
_ *models.Preference,
_ *models.User,
provider models.Provider,
) {
ScheduleID := mux.Vars(r)["id"]
resp, err := provider.GetSchedule(r, ScheduleID)
if err != nil {
obj := "schedule"
//failed to get schedules
h.log.Error(ErrQueryGet(obj))
http.Error(rw, ErrQueryGet(obj).Error(), http.StatusInternalServerError)
return
}
rw.Header().Set("Content-Type", "application/json")
fmt.Fprint(rw, string(resp))
}