88 "time"
99
1010 "github.com/go-kit/kit/endpoint"
11+ "github.com/microservices-demo/user/db"
1112 "github.com/microservices-demo/user/users"
1213 "golang.org/x/net/context"
1314)
@@ -22,6 +23,7 @@ type Endpoints struct {
2223 AddressPostEndpoint endpoint.Endpoint
2324 CardGetEndpoint endpoint.Endpoint
2425 CardPostEndpoint endpoint.Endpoint
26+ DeleteEndpoint endpoint.Endpoint
2527 HealthEndpoint endpoint.Endpoint
2628}
2729
@@ -37,6 +39,7 @@ func MakeEndpoints(s Service) Endpoints {
3739 AddressGetEndpoint : MakeAddressGetEndpoint (s ),
3840 AddressPostEndpoint : MakeAddressPostEndpoint (s ),
3941 CardGetEndpoint : MakeCardGetEndpoint (s ),
42+ DeleteEndpoint : MakeDeleteEndpoint (s ),
4043 CardPostEndpoint : MakeCardPostEndpoint (s ),
4144 }
4245}
@@ -54,26 +57,46 @@ func MakeLoginEndpoint(s Service) endpoint.Endpoint {
5457func MakeRegisterEndpoint (s Service ) endpoint.Endpoint {
5558 return func (ctx context.Context , request interface {}) (response interface {}, err error ) {
5659 req := request .(registerRequest )
57- status := s .Register (req .Username , req .Password , req .Email )
58- return statusResponse { Status : status }, err
60+ id , err := s .Register (req .Username , req .Password , req .Email )
61+ return postResponse { ID : id }, err
5962 }
6063}
6164
6265// MakeUserGetEndpoint returns an endpoint via the given service.
6366func MakeUserGetEndpoint (s Service ) endpoint.Endpoint {
6467 return func (ctx context.Context , request interface {}) (response interface {}, err error ) {
6568 req := request .(GetRequest )
66- users , err := s .GetUsers (req .ID )
67- return usersResponse {Users : users }, err
69+ usrs , err := s .GetUsers (req .ID )
70+ if req .ID == "" {
71+ return EmbedStruct {usersResponse {Users : usrs }}, err
72+ }
73+ if len (usrs ) == 0 {
74+ if req .Attr == "addresses" {
75+ return EmbedStruct {addressesResponse {Addresses : make ([]users.Address , 0 )}}, err
76+ }
77+ if req .Attr == "cards" {
78+ return EmbedStruct {cardsResponse {Cards : make ([]users.Card , 0 )}}, err
79+ }
80+ return users.User {}, err
81+ }
82+ user := usrs [0 ]
83+ db .GetUserAttributes (& user )
84+ if req .Attr == "addresses" {
85+ return EmbedStruct {addressesResponse {Addresses : user .Addresses }}, err
86+ }
87+ if req .Attr == "cards" {
88+ return EmbedStruct {cardsResponse {Cards : user .Cards }}, err
89+ }
90+ return user , err
6891 }
6992}
7093
7194// MakeUserPostEndpoint returns an endpoint via the given service.
7295func MakeUserPostEndpoint (s Service ) endpoint.Endpoint {
7396 return func (ctx context.Context , request interface {}) (response interface {}, err error ) {
74- req := request .(userPostRequest )
75- status := s .PostUser (req . User )
76- return statusResponse { Status : status }, err
97+ req := request .(users. User )
98+ id , err := s .PostUser (req )
99+ return postResponse { ID : id }, err
77100 }
78101}
79102
@@ -82,16 +105,22 @@ func MakeAddressGetEndpoint(s Service) endpoint.Endpoint {
82105 return func (ctx context.Context , request interface {}) (response interface {}, err error ) {
83106 req := request .(GetRequest )
84107 adds , err := s .GetAddresses (req .ID )
85- return addressesResponse {Addresses : adds }, err
108+ if req .ID == "" {
109+ return EmbedStruct {addressesResponse {Addresses : adds }}, err
110+ }
111+ if len (adds ) == 0 {
112+ return users.Address {}, err
113+ }
114+ return adds [0 ], err
86115 }
87116}
88117
89118// MakeAddressPostEndpoint returns an endpoint via the given service.
90119func MakeAddressPostEndpoint (s Service ) endpoint.Endpoint {
91120 return func (ctx context.Context , request interface {}) (response interface {}, err error ) {
92121 req := request .(addressPostRequest )
93- status := s .PostAddress (req .Address , req .UserID )
94- return statusResponse { Status : status }, err
122+ id , err := s .PostAddress (req .Address , req .UserID )
123+ return postResponse { ID : id }, err
95124 }
96125}
97126
@@ -100,16 +129,34 @@ func MakeCardGetEndpoint(s Service) endpoint.Endpoint {
100129 return func (ctx context.Context , request interface {}) (response interface {}, err error ) {
101130 req := request .(GetRequest )
102131 cards , err := s .GetCards (req .ID )
103- return cardsResponse {Cards : cards }, err
132+ if req .ID == "" {
133+ return EmbedStruct {cardsResponse {Cards : cards }}, err
134+ }
135+ if len (cards ) == 0 {
136+ return users.Card {}, err
137+ }
138+ return cards [0 ], err
104139 }
105140}
106141
107142// MakeCardPostEndpoint returns an endpoint via the given service.
108143func MakeCardPostEndpoint (s Service ) endpoint.Endpoint {
109144 return func (ctx context.Context , request interface {}) (response interface {}, err error ) {
110145 req := request .(cardPostRequest )
111- status := s .PostCard (req .Card , req .UserID )
112- return statusResponse {Status : status }, err
146+ id , err := s .PostCard (req .Card , req .UserID )
147+ return postResponse {ID : id }, err
148+ }
149+ }
150+
151+ // MakeLoginEndpoint returns an endpoint via the given service.
152+ func MakeDeleteEndpoint (s Service ) endpoint.Endpoint {
153+ return func (ctx context.Context , request interface {}) (response interface {}, err error ) {
154+ req := request .(deleteRequest )
155+ err = s .Delete (req .Entity , req .ID )
156+ if err == nil {
157+ return statusResponse {Status : true }, err
158+ }
159+ return statusResponse {Status : false }, err
113160 }
114161}
115162
@@ -121,18 +168,15 @@ func MakeHealthEndpoint(s Service) endpoint.Endpoint {
121168}
122169
123170type GetRequest struct {
124- ID string
171+ ID string
172+ Attr string
125173}
126174
127175type loginRequest struct {
128176 Username string
129177 Password string
130178}
131179
132- type userPostRequest struct {
133- User users.User `json:"user"`
134- }
135-
136180type userResponse struct {
137181 User users.User `json:"user"`
138182}
@@ -142,33 +186,42 @@ type usersResponse struct {
142186}
143187
144188type addressPostRequest struct {
145- Address users.Address `json:"address"`
146- UserID string `json:"userID"`
189+ users.Address
190+ UserID string `json:"userID"`
147191}
148192
149193type addressesResponse struct {
150194 Addresses []users.Address `json:"address"`
151195}
152196
153197type cardPostRequest struct {
154- Card users.Card `json:"card"`
155- UserID string `json:"userID"`
198+ users.Card
199+ UserID string `json:"userID"`
156200}
157201
158202type cardsResponse struct {
159203 Cards []users.Card `json:"card"`
160204}
161205
162206type registerRequest struct {
163- Username string
164- Password string
165- Email string
207+ Username string `json:"username"`
208+ Password string `json:"password"`
209+ Email string `json:"email"`
166210}
167211
168212type statusResponse struct {
169213 Status bool `json:"status"`
170214}
171215
216+ type postResponse struct {
217+ ID string `json:"id"`
218+ }
219+
220+ type deleteRequest struct {
221+ Entity string
222+ ID string
223+ }
224+
172225type healthRequest struct {
173226 //
174227}
@@ -177,3 +230,7 @@ type healthResponse struct {
177230 Status string `json:"status"`
178231 Time string `json:"time"`
179232}
233+
234+ type EmbedStruct struct {
235+ Embed interface {} `json:"_embedded"`
236+ }
0 commit comments