Skip to content

Commit 8cb9c52

Browse files
committed
feat: ⭐[ADD] Save user
1 parent 966bb5b commit 8cb9c52

File tree

2 files changed

+32
-9
lines changed

2 files changed

+32
-9
lines changed

domain/users/user_dao.go

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@ import (
44
"fmt"
55

66
"github.com/jgmc3012/bookstore_users-api/datasources/mysql/users_db"
7-
"github.com/jgmc3012/bookstore_users-api/utils/date_utils"
87
"github.com/jgmc3012/bookstore_users-api/utils/errors"
98
)
109

10+
const (
11+
queryInsertUser = "INSERT INTO users(first_name, last_name, email, date_created) VALUES(?, ?, ?, ?);"
12+
)
13+
1114
var (
1215
usersDB = make(map[int64]*User)
1316
)
@@ -24,16 +27,28 @@ func Get(userId int64) (*User, *errors.RestErr) {
2427
}
2528

2629
func (user *User) Save() *errors.RestErr {
27-
current_user := usersDB[user.Id]
28-
if current_user != nil {
29-
if current_user.Email == user.Email {
30-
return errors.NewBadRequestError(fmt.Sprintf("email %s already registered", user.Email))
31-
}
32-
return errors.NewBadRequestError(fmt.Sprintf("user %d already exists", user.Id))
30+
stmt, err := users_db.Client.Prepare(queryInsertUser)
31+
if err != nil {
32+
return errors.NewInternalServerError(err.Error())
33+
}
34+
defer stmt.Close()
35+
36+
insertResult, err := stmt.Exec(user.FirstName, user.LastName, user.Email, user.DateCreated)
37+
if err != nil {
38+
return errors.NewInternalServerError(
39+
fmt.Sprintf("error when trying to save user: %s", err.Error()),
40+
)
3341
}
3442

35-
user.DateCreated = date_utils.GetNowString()
43+
// insertResult, err := users_db.Client.Exec(queryInsertUser, user.FirstName, user.LastName, user.Email, user.DateCreated) // lost performance
44+
45+
userId, err := insertResult.LastInsertId()
46+
if err != nil {
47+
return errors.NewInternalServerError(
48+
fmt.Sprintf("error when trying to save user: %s", err.Error()),
49+
)
50+
}
3651

37-
usersDB[user.Id] = user
52+
user.Id = userId
3853
return nil
3954
}

utils/errors/rest_error.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,11 @@ func NewNotFoundError(message string) *RestErr {
2525
Error: "not_found",
2626
}
2727
}
28+
29+
func NewInternalServerError(message string) *RestErr {
30+
return &RestErr{
31+
Message: message,
32+
Status: http.StatusInternalServerError,
33+
Error: "internal_server_error",
34+
}
35+
}

0 commit comments

Comments
 (0)