@@ -10,13 +10,17 @@ import (
10
10
"github.com/DoWithLogic/golang-clean-architecture/internal/users/dtos"
11
11
"github.com/DoWithLogic/golang-clean-architecture/internal/users/entities"
12
12
usecases "github.com/DoWithLogic/golang-clean-architecture/internal/users/usecase"
13
+ "github.com/DoWithLogic/golang-clean-architecture/pkg/middleware"
13
14
"github.com/DoWithLogic/golang-clean-architecture/pkg/otel/zerolog"
15
+ "github.com/DoWithLogic/golang-clean-architecture/pkg/utils/response"
14
16
"github.com/labstack/echo/v4"
15
17
)
16
18
17
19
type (
18
20
Handlers interface {
21
+ Login (c echo.Context ) error
19
22
CreateUser (c echo.Context ) error
23
+ UserDetail (c echo.Context ) error
20
24
UpdateUser (c echo.Context ) error
21
25
UpdateUserStatus (c echo.Context ) error
22
26
}
@@ -40,107 +44,106 @@ func NewHandlers(uc usecases.Usecase, log *zerolog.Logger) Handlers {
40
44
return & handlers {uc , log }
41
45
}
42
46
47
+ func (h * handlers ) Login (c echo.Context ) error {
48
+ var (
49
+ request dtos.UserLoginRequest
50
+ )
51
+
52
+ if err := c .Bind (& request ); err != nil {
53
+ return c .JSON (http .StatusBadRequest , response .NewResponseError (http .StatusBadRequest , response .MsgFailed , err .Error ()))
54
+ }
55
+
56
+ if err := request .Validate (); err != nil {
57
+ return c .JSON (http .StatusBadRequest , response .NewResponseError (http .StatusBadRequest , response .MsgFailed , err .Error ()))
58
+ }
59
+
60
+ authData , httpCode , err := h .uc .Login (c .Request ().Context (), request )
61
+ if err != nil {
62
+ return c .JSON (httpCode , response .NewResponseError (httpCode , response .MsgFailed , err .Error ()))
63
+ }
64
+
65
+ return c .JSON (httpCode , response .NewResponse (httpCode , response .MsgSuccess , authData ))
66
+ }
67
+
43
68
func (h * handlers ) CreateUser (c echo.Context ) error {
44
69
var (
45
70
ctx , cancel = context .WithTimeout (c .Request ().Context (), time .Duration (30 * time .Second ))
46
- payload dtos.CreateUserPayload
71
+ payload dtos.CreateUserRequest
47
72
)
48
73
defer cancel ()
49
74
50
75
if err := c .Bind (& payload ); err != nil {
51
76
h .log .Z ().Err (err ).Msg ("[handlers]CreateUser.Bind" )
52
77
53
- return c .JSON (http .StatusBadRequest , dtos .NewResponseError (
78
+ return c .JSON (http .StatusBadRequest , response .NewResponseError (
54
79
http .StatusBadRequest ,
55
- dtos .MsgFailed ,
80
+ response .MsgFailed ,
56
81
err .Error ()),
57
82
)
58
83
}
59
84
60
85
if err := payload .Validate (); err != nil {
61
86
h .log .Z ().Err (err ).Msg ("[handlers]CreateUser.Validate" )
62
87
63
- return c .JSON (http .StatusBadRequest , dtos .NewResponseError (
88
+ return c .JSON (http .StatusBadRequest , response .NewResponseError (
64
89
http .StatusBadRequest ,
65
- dtos .MsgFailed ,
90
+ response .MsgFailed ,
66
91
err .Error ()),
67
92
)
68
93
}
69
94
70
- argsCreateUser := entities.CreateUser {
71
- FullName : payload .FullName ,
72
- PhoneNumber : payload .PhoneNumber ,
73
- }
74
-
75
- createdData , err := h .uc .CreateUser (ctx , argsCreateUser )
95
+ userID , httpCode , err := h .uc .Create (ctx , payload )
76
96
if err != nil {
77
- return c .JSON (http . StatusInternalServerError , dtos .NewResponseError (
78
- http . StatusInternalServerError ,
79
- dtos .MsgFailed ,
97
+ return c .JSON (httpCode , response .NewResponseError (
98
+ httpCode ,
99
+ response .MsgFailed ,
80
100
err .Error ()),
81
101
)
82
102
}
83
103
84
- return c .JSON (http .StatusOK , dtos .NewResponse (http .StatusOK , dtos .MsgSuccess , createdData ))
104
+ return c .JSON (http .StatusOK , response .NewResponse (http .StatusOK , response .MsgSuccess , map [string ]int64 {"id" : userID }))
105
+ }
106
+
107
+ func (h * handlers ) UserDetail (c echo.Context ) error {
108
+ ctx , cancel := context .WithTimeout (c .Request ().Context (), time .Duration (30 * time .Second ))
109
+ defer cancel ()
110
+
111
+ userID := c .Get ("identity" ).(* middleware.CustomClaims ).UserID
112
+
113
+ data , code , err := h .uc .Detail (ctx , userID )
114
+ if err != nil {
115
+ return c .JSON (code , response .NewResponseError (code , response .MsgFailed , err .Error ()))
116
+ }
117
+
118
+ return c .JSON (code , response .NewResponse (code , response .MsgSuccess , data ))
85
119
}
86
120
87
121
func (h * handlers ) UpdateUser (c echo.Context ) error {
88
122
var (
89
123
ctx , cancel = context .WithTimeout (c .Request ().Context (), time .Duration (30 * time .Second ))
90
- payload dtos.UpdateUserPayload
124
+ request dtos.UpdateUserRequest
91
125
)
92
126
defer cancel ()
93
127
94
- h .log .Z ().Info ().Msg ("[handlers]UpdateUser" )
95
-
96
- userID , err := strconv .ParseInt (c .Param ("id" ), 10 , 64 )
97
- if err != nil {
98
- h .log .Z ().Err (err ).Msg ("[handlers]UpdateUser.ParseParam" )
99
-
100
- return c .JSON (http .StatusBadRequest , dtos .NewResponseError (
101
- http .StatusBadRequest ,
102
- dtos .MsgFailed ,
103
- err .Error ()),
104
- )
105
- }
128
+ request .UserID = c .Get ("identity" ).(entities.Identity ).UserID
106
129
107
- if err := c .Bind (& payload ); err != nil {
130
+ if err := c .Bind (& request ); err != nil {
108
131
h .log .Z ().Err (err ).Msg ("[handlers]UpdateUser.Bind" )
109
132
110
- return c .JSON (http .StatusBadRequest , dtos .NewResponseError (
111
- http .StatusBadRequest ,
112
- dtos .MsgFailed ,
113
- err .Error ()),
114
- )
133
+ return c .JSON (http .StatusBadRequest , response .NewResponseError (http .StatusBadRequest , response .MsgFailed , err .Error ()))
115
134
}
116
135
117
- if err := payload .Validate (); err != nil {
136
+ if err := request .Validate (); err != nil {
118
137
h .log .Z ().Err (err ).Msg ("[handlers]UpdateUser.Validate" )
119
138
120
- return c .JSON (http .StatusBadRequest , dtos .NewResponseError (
121
- http .StatusBadRequest ,
122
- dtos .MsgFailed ,
123
- err .Error ()),
124
- )
139
+ return c .JSON (http .StatusBadRequest , response .NewResponseError (http .StatusBadRequest , response .MsgFailed , err .Error ()))
125
140
}
126
141
127
- argsUpdateUser := entities.UpdateUsers {
128
- UserID : userID ,
129
- Fullname : payload .Fullname ,
130
- PhoneNumber : payload .PhoneNumber ,
131
- UserType : payload .UserType ,
132
- }
133
-
134
- err = h .uc .UpdateUser (ctx , argsUpdateUser )
135
- if err != nil {
136
- return c .JSON (http .StatusBadRequest , dtos .NewResponseError (
137
- http .StatusInternalServerError ,
138
- dtos .MsgFailed ,
139
- err .Error ()),
140
- )
142
+ if err := h .uc .PartialUpdate (ctx , request ); err != nil {
143
+ return c .JSON (http .StatusBadRequest , response .NewResponseError (http .StatusInternalServerError , response .MsgFailed , err .Error ()))
141
144
}
142
145
143
- return c .JSON (http .StatusOK , dtos .NewResponse (http .StatusOK , dtos .MsgSuccess , nil ))
146
+ return c .JSON (http .StatusOK , response .NewResponse (http .StatusOK , response .MsgSuccess , nil ))
144
147
}
145
148
146
149
func (h * handlers ) UpdateUserStatus (c echo.Context ) error {
@@ -154,9 +157,9 @@ func (h *handlers) UpdateUserStatus(c echo.Context) error {
154
157
if err != nil {
155
158
h .log .Z ().Err (err ).Msg ("[handlers]UpdateUser.ParseParam" )
156
159
157
- return c .JSON (http .StatusBadRequest , dtos .NewResponseError (
160
+ return c .JSON (http .StatusBadRequest , response .NewResponseError (
158
161
http .StatusBadRequest ,
159
- dtos .MsgFailed ,
162
+ response .MsgFailed ,
160
163
err .Error ()),
161
164
)
162
165
}
@@ -167,26 +170,18 @@ func (h *handlers) UpdateUserStatus(c echo.Context) error {
167
170
case BooleanTextTrue :
168
171
payload .IsActive = true
169
172
default :
170
- return c .JSON (http .StatusBadRequest , dtos .NewResponseError (
171
- http .StatusBadRequest ,
172
- dtos .MsgFailed ,
173
- ErrInvalidIsActive .Error ()),
174
- )
173
+ return c .JSON (http .StatusBadRequest , response .NewResponseError (http .StatusBadRequest , response .MsgFailed , ErrInvalidIsActive .Error ()))
175
174
}
176
175
177
176
argsUpdateUserStatus := entities.UpdateUserStatus {
178
177
UserID : userID ,
179
178
IsActive : payload .IsActive ,
180
179
}
181
180
182
- err = h .uc .UpdateUserStatus (ctx , argsUpdateUserStatus )
181
+ err = h .uc .UpdateStatus (ctx , argsUpdateUserStatus )
183
182
if err != nil {
184
- return c .JSON (http .StatusBadRequest , dtos .NewResponseError (
185
- http .StatusInternalServerError ,
186
- dtos .MsgFailed ,
187
- err .Error ()),
188
- )
183
+ return c .JSON (http .StatusBadRequest , response .NewResponseError (http .StatusInternalServerError , response .MsgFailed , err .Error ()))
189
184
}
190
185
191
- return c .JSON (http .StatusOK , dtos .NewResponse (http .StatusOK , dtos .MsgSuccess , nil ))
186
+ return c .JSON (http .StatusOK , response .NewResponse (http .StatusOK , response .MsgSuccess , nil ))
192
187
}
0 commit comments