Skip to content

Commit a506c12

Browse files
committed
feat(service): implement user service
1 parent 1f00a06 commit a506c12

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

services/user/routes.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package user
2+
3+
import (
4+
"fmt"
5+
"net/http"
6+
7+
"github.com/go-playground/validator/v10"
8+
"github.com/gorilla/mux"
9+
"github.com/wardvisual/go-store-api/types"
10+
"github.com/wardvisual/go-store-api/utils"
11+
)
12+
13+
type Handler struct {
14+
store types.UserStore
15+
}
16+
17+
func NewHandler(store types.UserStore) *Handler {
18+
return &Handler{store}
19+
}
20+
21+
func (h *Handler) RegisterRoutes(router *mux.Router) {
22+
router.HandleFunc("/register", h.handleRegister).Methods("POST")
23+
}
24+
25+
func (h *Handler) handleRegister(w http.ResponseWriter, r *http.Request) {
26+
var user types.RegisterUserPayload
27+
28+
if err := utils.ParseJSON(r, &user); err != nil {
29+
utils.WriteError(w, http.StatusBadRequest, err)
30+
return
31+
}
32+
33+
if err := utils.Validate.Struct(user); err != nil {
34+
errors := err.(validator.ValidationErrors)
35+
utils.WriteError(w, http.StatusBadRequest, fmt.Errorf("invalid payload: %v", errors))
36+
}
37+
38+
// TODO: Check if user exists
39+
// ...
40+
41+
hashedPassword, err := utils.HashPassword(user.Password)
42+
if err != nil {
43+
utils.WriteError(w, http.StatusInternalServerError, err)
44+
return
45+
}
46+
47+
err = h.store.Create(types.User{
48+
FirstName: user.FirstName,
49+
LastName: user.LastName,
50+
Email: user.Email,
51+
Password: hashedPassword,
52+
})
53+
54+
if err != nil {
55+
utils.WriteError(w, http.StatusInternalServerError, err)
56+
return
57+
}
58+
59+
utils.WriteJSON(w, http.StatusCreated, nil)
60+
}

0 commit comments

Comments
 (0)