forked from tidepool-org/platform
-
Notifications
You must be signed in to change notification settings - Fork 0
/
provider_session.go
137 lines (110 loc) · 4 KB
/
provider_session.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
package v1
import (
"net/http"
"github.com/ant0ine/go-json-rest/rest"
"github.com/tidepool-org/platform/auth"
"github.com/tidepool-org/platform/page"
"github.com/tidepool-org/platform/request"
"github.com/tidepool-org/platform/service/api"
)
func (r *Router) ProviderSessionsRoutes() []*rest.Route {
return []*rest.Route{
rest.Get("/v1/users/:userId/provider_sessions", api.RequireServer(r.ListUserProviderSessions)),
rest.Post("/v1/users/:userId/provider_sessions", api.RequireServer(r.CreateUserProviderSession)),
rest.Get("/v1/provider_sessions/:id", api.RequireServer(r.GetProviderSession)),
rest.Put("/v1/provider_sessions/:id", api.RequireServer(r.UpdateProviderSession)),
rest.Delete("/v1/provider_sessions/:id", api.RequireServer(r.DeleteProviderSession)),
}
}
func (r *Router) ListUserProviderSessions(res rest.ResponseWriter, req *rest.Request) {
responder := request.MustNewResponder(res, req)
userID := req.PathParam("userId")
if userID == "" {
responder.Error(http.StatusBadRequest, request.ErrorParameterMissing("userId"))
return
}
filter := auth.NewProviderSessionFilter()
pagination := page.NewPagination()
if err := request.DecodeRequestQuery(req.Request, filter, pagination); err != nil {
responder.Error(http.StatusBadRequest, err)
return
}
providerSessions, err := r.AuthClient().ListUserProviderSessions(req.Context(), userID, filter, pagination)
if err != nil {
responder.Error(http.StatusInternalServerError, err)
return
}
responder.Data(http.StatusOK, providerSessions)
}
func (r *Router) CreateUserProviderSession(res rest.ResponseWriter, req *rest.Request) {
responder := request.MustNewResponder(res, req)
userID := req.PathParam("userId")
if userID == "" {
responder.Error(http.StatusBadRequest, request.ErrorParameterMissing("userId"))
return
}
create := auth.NewProviderSessionCreate()
if err := request.DecodeRequestBody(req.Request, create); err != nil {
responder.Error(http.StatusBadRequest, err)
return
}
providerSession, err := r.AuthClient().CreateUserProviderSession(req.Context(), userID, create)
if err != nil {
responder.Error(http.StatusInternalServerError, err)
return
}
responder.Data(http.StatusCreated, providerSession)
}
func (r *Router) GetProviderSession(res rest.ResponseWriter, req *rest.Request) {
responder := request.MustNewResponder(res, req)
id := req.PathParam("id")
if id == "" {
responder.Error(http.StatusBadRequest, request.ErrorParameterMissing("id"))
return
}
providerSession, err := r.AuthClient().GetProviderSession(req.Context(), id)
if err != nil {
responder.Error(http.StatusInternalServerError, err)
return
} else if providerSession == nil {
responder.Error(http.StatusNotFound, request.ErrorResourceNotFoundWithID(id))
return
}
responder.Data(http.StatusOK, providerSession)
}
func (r *Router) UpdateProviderSession(res rest.ResponseWriter, req *rest.Request) {
responder := request.MustNewResponder(res, req)
id := req.PathParam("id")
if id == "" {
responder.Error(http.StatusBadRequest, request.ErrorParameterMissing("id"))
return
}
update := auth.NewProviderSessionUpdate()
if err := request.DecodeRequestBody(req.Request, update); err != nil {
responder.Error(http.StatusBadRequest, err)
return
}
providerSession, err := r.AuthClient().UpdateProviderSession(req.Context(), id, update)
if err != nil {
responder.Error(http.StatusInternalServerError, err)
return
} else if providerSession == nil {
responder.Error(http.StatusNotFound, request.ErrorResourceNotFoundWithID(id))
return
}
responder.Data(http.StatusOK, providerSession)
}
func (r *Router) DeleteProviderSession(res rest.ResponseWriter, req *rest.Request) {
responder := request.MustNewResponder(res, req)
id := req.PathParam("id")
if id == "" {
responder.Error(http.StatusBadRequest, request.ErrorParameterMissing("id"))
return
}
err := r.AuthClient().DeleteProviderSession(req.Context(), id)
if err != nil {
responder.Error(http.StatusInternalServerError, err)
return
}
responder.Empty(http.StatusOK)
}