Skip to content

Commit d8f653e

Browse files
committed
Refactor UserClient
1 parent 0339812 commit d8f653e

File tree

4 files changed

+134
-49
lines changed

4 files changed

+134
-49
lines changed
Lines changed: 127 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,155 @@
11
package user
22

33
import (
4+
"bytes"
45
"context"
6+
"encoding/json"
7+
"fmt"
8+
"io/ioutil"
59
"net/http"
6-
7-
"go-service/pkg/client"
810
)
911

1012
type UserClient struct {
1113
Client *http.Client
1214
Url string
13-
Config *client.LogConfig
14-
Log func(context.Context, string, map[string]interface{})
1515
}
1616

17-
type ResultInfo struct {
18-
Status int64 `mapstructure:"status" json:"status" gorm:"column:status" bson:"status" dynamodbav:"status" firestore:"status"`
19-
Errors []ErrorMessage `mapstructure:"errors" json:"errors,omitempty" gorm:"column:errors" bson:"errors,omitempty" dynamodbav:"errors,omitempty" firestore:"errors,omitempty"`
20-
Message string `mapstructure:"message" json:"message,omitempty" gorm:"column:message" bson:"message,omitempty" dynamodbav:"message,omitempty" firestore:"message,omitempty"`
21-
}
22-
type ErrorMessage struct {
23-
Field string `mapstructure:"field" json:"field,omitempty" gorm:"column:field" bson:"field,omitempty" dynamodbav:"field,omitempty" firestore:"field,omitempty"`
24-
Code string `mapstructure:"code" json:"code,omitempty" gorm:"column:code" bson:"code,omitempty" dynamodbav:"code,omitempty" firestore:"code,omitempty"`
25-
Param string `mapstructure:"param" json:"param,omitempty" gorm:"column:param" bson:"param,omitempty" dynamodbav:"param,omitempty" firestore:"param,omitempty"`
26-
Message string `mapstructure:"message" json:"message,omitempty" gorm:"column:message" bson:"message,omitempty" dynamodbav:"message,omitempty" firestore:"message,omitempty"`
17+
func NewUserClient(client *http.Client, url string) *UserClient {
18+
return &UserClient{Client: client, Url: url}
2719
}
2820

29-
func NewUserClient(config client.ClientConfig, log func(context.Context, string, map[string]interface{})) (*UserClient, error) {
30-
c, _, conf, err := client.InitializeClient(config)
21+
func (c *UserClient) Load(ctx context.Context, id string) (*User, error) {
22+
requestURL := fmt.Sprintf("%s/%s", c.Url, id)
23+
24+
req, err := http.NewRequest("GET", requestURL, nil)
3125
if err != nil {
32-
return nil, err
26+
panic(err)
27+
}
28+
resp, err := c.Client.Do(req)
29+
if err != nil {
30+
panic(err)
3331
}
34-
return &UserClient{Client: c, Url: config.Endpoint.Url, Config: conf, Log: log}, nil
35-
}
3632

37-
func (c *UserClient) Load(ctx context.Context, id string) (*User, error) {
38-
url := c.Url + "/" + id
39-
var user User
40-
err := client.Get(ctx, c.Client, url, &user, c.Config, c.Log)
41-
return &user, err
33+
defer resp.Body.Close()
34+
35+
body, err := ioutil.ReadAll(resp.Body)
36+
if err != nil {
37+
panic(err)
38+
}
39+
40+
var res User
41+
err = json.Unmarshal(body, &res)
42+
if err != nil {
43+
panic(err)
44+
}
45+
46+
return &res, err
4247
}
4348

4449
func (c *UserClient) Create(ctx context.Context, user *User) (int64, error) {
45-
var res ResultInfo
46-
err := client.Post(ctx, c.Client, c.Url, user, &res, c.Config, c.Log)
47-
return res.Status, err
50+
requestURL := c.Url
51+
52+
data, err := json.Marshal(user)
53+
req, err := http.NewRequest("POST", requestURL, bytes.NewBuffer(data))
54+
if err != nil {
55+
panic(err)
56+
}
57+
58+
resp, err := c.Client.Do(req)
59+
if err != nil {
60+
panic(err)
61+
}
62+
63+
defer resp.Body.Close()
64+
65+
if err != nil {
66+
panic(err)
67+
}
68+
69+
if resp.StatusCode == 201 {
70+
return 1, err
71+
} else {
72+
return 0, err
73+
}
4874
}
4975

50-
func (c *UserClient) Update(ctx context.Context, user *User) (int64, error) {
51-
url := c.Url + "/" + user.Id
52-
var res ResultInfo
53-
err := client.Put(ctx, c.Client, url, user, &res, c.Config, c.Log)
54-
return res.Status, err
76+
func (c *UserClient) Update(ctx context.Context, user *User, id string) (int64, error) {
77+
requestURL := fmt.Sprintf("%s/%s", c.Url, id)
78+
79+
data, err := json.Marshal(user)
80+
req, err := http.NewRequest("PUT", requestURL, bytes.NewBuffer(data))
81+
if err != nil {
82+
panic(err)
83+
}
84+
85+
resp, err := c.Client.Do(req)
86+
if err != nil {
87+
panic(err)
88+
}
89+
90+
defer resp.Body.Close()
91+
92+
if err != nil {
93+
panic(err)
94+
}
95+
96+
if resp.StatusCode == 200 {
97+
return 1, err
98+
} else {
99+
return 0, err
100+
}
55101
}
56102

57-
func (c *UserClient) Patch(ctx context.Context, id string, user map[string]interface{}) (int64, error) {
58-
url := c.Url + "/" + id
59-
var res ResultInfo
60-
err := client.Patch(ctx, c.Client, url, user, &res, c.Config, c.Log)
61-
return res.Status, err
103+
func (c *UserClient) Patch(ctx context.Context, user map[string]interface{}) (int64, error) {
104+
id := user["id"]
105+
requestURL := fmt.Sprintf("%s/%s", c.Url, id)
106+
107+
data, err := json.Marshal(user)
108+
req, err := http.NewRequest("PATCH", requestURL, bytes.NewBuffer(data))
109+
if err != nil {
110+
panic(err)
111+
}
112+
113+
resp, err := c.Client.Do(req)
114+
if err != nil {
115+
panic(err)
116+
}
117+
118+
defer resp.Body.Close()
119+
120+
if err != nil {
121+
panic(err)
122+
}
123+
124+
if resp.StatusCode == 200 {
125+
return 1, err
126+
} else {
127+
return 0, err
128+
}
62129
}
63130

64131
func (c *UserClient) Delete(ctx context.Context, id string) (int64, error) {
65-
url := c.Url + "/" + id
66-
var res int64
67-
err := client.Delete(ctx, c.Client, url, &res, c.Config, c.Log)
68-
return res, err
132+
requestURL := fmt.Sprintf("%s/%s", c.Url, id)
133+
134+
req, err := http.NewRequest("DELETE", requestURL, nil)
135+
if err != nil {
136+
panic(err)
137+
}
138+
139+
resp, err := c.Client.Do(req)
140+
if err != nil {
141+
panic(err)
142+
}
143+
144+
defer resp.Body.Close()
145+
146+
if err != nil {
147+
panic(err)
148+
}
149+
150+
if resp.StatusCode == 200 {
151+
return 1, err
152+
} else {
153+
return 0, err
154+
}
69155
}

internal/usecase/user/user_handler.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,12 @@ func (h *userHandler) Update(w http.ResponseWriter, r *http.Request) {
9191
JSON(w, res)
9292
}
9393
func (h *userHandler) Patch(w http.ResponseWriter, r *http.Request) {
94-
id := sv.GetRequiredParam(w, r)
9594
var user User
9695
r, json, er1 := sv.BuildMapAndCheckId(w, r, &user, h.Keys, h.Indexes)
9796
if er1 == nil {
9897
errors, er2 := h.Validate(r.Context(), &user)
9998
if !sv.HasError(w, r, errors, er2, *h.Status.ValidationError, h.Error, h.Log, h.Resource, h.Action.Patch) {
100-
res, er3 := h.service.Patch(r.Context(), id, json)
99+
res, er3 := h.service.Patch(r.Context(), json)
101100
sv.HandleResult(w, r, json, res, er3, h.Status, h.Error, h.Log, h.Resource, h.Action.Patch)
102101
}
103102
}

internal/usecase/user/user_repository.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ type UserRepository interface {
1111
Load(ctx context.Context, id string) (*User, error)
1212
Create(ctx context.Context, user *User) (int64, error)
1313
Update(ctx context.Context, user *User) (int64, error)
14-
Patch(ctx context.Context, id string, user map[string]interface{}) (int64, error)
14+
Patch(ctx context.Context, user map[string]interface{}) (int64, error)
1515
Delete(ctx context.Context, id string) (int64, error)
1616
}
1717

@@ -64,9 +64,9 @@ func (r *userRepository) Update(ctx context.Context, user *User) (int64, error)
6464
return result.RowsAffected()
6565
}
6666

67-
func (r *userRepository) Patch(ctx context.Context, id string, user map[string]interface{}) (int64, error) {
67+
func (r *userRepository) Patch(ctx context.Context, user map[string]interface{}) (int64, error) {
6868
updateClause := "update users set"
69-
whereClause := fmt.Sprintf("where id='%s'", id)
69+
whereClause := fmt.Sprintf("where id='%s'", user["id"])
7070

7171
setClause := make([]string, 0)
7272
if user["username"] != nil {

internal/usecase/user/user_service.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ type UserService interface {
66
Load(ctx context.Context, id string) (*User, error)
77
Create(ctx context.Context, user *User) (int64, error)
88
Update(ctx context.Context, user *User) (int64, error)
9-
Patch(ctx context.Context, id string, user map[string]interface{}) (int64, error)
9+
Patch(ctx context.Context, user map[string]interface{}) (int64, error)
1010
Delete(ctx context.Context, id string) (int64, error)
1111
}
1212

@@ -31,8 +31,8 @@ func (s *userService) Create(ctx context.Context, user *User) (int64, error) {
3131
func (s *userService) Update(ctx context.Context, user *User) (int64, error) {
3232
return s.repository.Update(ctx, user)
3333
}
34-
func (s *userService) Patch(ctx context.Context, id string, user map[string]interface{}) (int64, error) {
35-
return s.repository.Patch(ctx, id, user)
34+
func (s *userService) Patch(ctx context.Context, user map[string]interface{}) (int64, error) {
35+
return s.repository.Patch(ctx, user)
3636
}
3737
func (s *userService) Delete(ctx context.Context, id string) (int64, error) {
3838
return s.repository.Delete(ctx, id)

0 commit comments

Comments
 (0)