Skip to content
This repository was archived by the owner on Oct 8, 2022. It is now read-only.

Commit 148fca4

Browse files
author
C
committed
Add createUser method and route
1 parent de219f4 commit 148fca4

File tree

5 files changed

+26
-5
lines changed

5 files changed

+26
-5
lines changed

auth.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func (s *Server) handleSignin(w http.ResponseWriter, r *http.Request) {
3939
case true:
4040
user, err = s.UserService.GetByEmail(email)
4141
default:
42-
user, err = s.UserService.Create(name, email)
42+
user, err = s.UserService.Create(benchttp.User{Name: name, Email: email})
4343
}
4444

4545
if err != nil {

benchttp/repository.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ type StatsService interface {
2727
type UserService interface {
2828
// Create creates and stores a User in the data layer
2929
// and returns its ID.
30-
Create(name, email string) (User, error)
30+
Create(user User) (User, error)
3131

3232
// GetByID retrieves a User by ID from the data layer.
3333
GetByID(id int) (User, error)

routes.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ func (s *Server) registerRoutes() {
4343
v1.HandleFunc("/token", s.mustAuth(s.handleCreateAccessToken)).Methods("GET")
4444

4545
// Users
46+
v1.HandleFunc("/user/"+idPathVar, s.createUser).Methods("POST")
4647
v1.HandleFunc("/user/"+idPathVar, s.retrieveUserByID).Methods("GET")
4748
v1.HandleFunc("/user-by-email/"+idPathVar, s.retrieveUserByEmail).Methods("GET")
4849
v1.HandleFunc("/check-user-exists/"+idPathVar, s.checkUserExists).Methods("GET")

services/postgresql/user.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,11 @@ func NewUserService(conn Connection) UserService {
1717
return UserService{conn.db}
1818
}
1919

20-
func (s UserService) Create(name, email string) (benchttp.User, error) {
21-
user := benchttp.User{Name: name, Email: email}
20+
func (s UserService) Create(user benchttp.User) (benchttp.User, error) {
2221
stmt := `
2322
INSERT INTO public.users(name, email)
2423
VALUES ($1, $2)`[1:]
25-
result, err := s.db.Exec(stmt, name, email)
24+
result, err := s.db.Exec(stmt, user.Name, user.Email)
2625
if err != nil {
2726
return user, ErrExecutingPreparedStmt
2827
}

users.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,31 @@
11
package server
22

33
import (
4+
"encoding/gob"
45
"net/http"
56
"strconv"
7+
8+
"github.com/benchttp/server/benchttp"
69
)
710

11+
func (s *Server) createUser(w http.ResponseWriter, r *http.Request) {
12+
user := benchttp.User{}
13+
14+
err := gob.NewDecoder(r.Body).Decode(&user)
15+
if err != nil {
16+
writeError(w, &ErrBadRequest)
17+
return
18+
}
19+
20+
userID, err := s.UserService.Create(user)
21+
if err != nil {
22+
writeError(w, &ErrInternal)
23+
return
24+
}
25+
26+
writeJSON(w, userID, 201)
27+
}
28+
829
func (s *Server) retrieveUserByID(w http.ResponseWriter, r *http.Request) {
930
idString, err := pathParam(r, idParam)
1031
if err != nil {

0 commit comments

Comments
 (0)