Skip to content

Commit 4cb9950

Browse files
committed
fix: enhance error handling by adding context to custom error creation for logging
1 parent 41da9fd commit 4cb9950

File tree

5 files changed

+22
-32
lines changed

5 files changed

+22
-32
lines changed

app/users/delivery/http/register_users.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func (h Handler) Register(w http.ResponseWriter, r *http.Request) {
3838
}
3939

4040
if user.Password != user.ConfirmPassword {
41-
err := utils.NewBadRequestError("Confirm password doesn't match", nil)
41+
err := utils.NewBadRequestError(r.Context(), "Confirm password doesn't match", nil)
4242
resp := utils.CustomErrorResponse(err)
4343
utils.Response(resp, w)
4444
return

app/users/usecase/login_users.go

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,19 @@ import (
55

66
"github.com/hammer-code/lms-be/domain"
77
"github.com/hammer-code/lms-be/utils"
8-
"github.com/sirupsen/logrus"
98
"golang.org/x/crypto/bcrypt"
109
)
1110

1211
func (us *usecase) Login(ctx context.Context, userReq domain.Login) (user domain.User, token string, err error) {
1312
err = us.dbTX.StartTransaction(ctx, func(txCtx context.Context) error {
1413
user, err = us.userRepo.FindByEmail(ctx, userReq.Email)
1514
if err != nil {
16-
logrus.Error("us.LoginUser: failed to find user by email", err)
17-
err = utils.NewInternalServerError(err)
15+
err = utils.NewInternalServerError(ctx, err)
1816
return err
1917
}
2018

2119
if err = bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(userReq.Password)); err != nil {
22-
logrus.Error("us.Login: invalid password")
23-
err = utils.NewBadRequestError("Email or Password is invalid", err)
20+
err = utils.NewBadRequestError(ctx, "Email or Password is invalid", err)
2421
return err
2522
}
2623

@@ -29,28 +26,24 @@ func (us *usecase) Login(ctx context.Context, userReq domain.Login) (user domain
2926
token = *tokenPtr
3027

3128
if err != nil {
32-
logrus.Error("us.Login: failed to generate token", err)
33-
err = utils.NewInternalServerError(err)
29+
err = utils.NewInternalServerError(ctx, err)
3430
return err
3531
}
3632

3733
if err = us.userRepo.UnactivateTokenByUser(ctx, user.ID); err != nil {
38-
logrus.Error("us.Login: failed to unactivate token", err)
39-
err = utils.NewInternalServerError(err)
34+
err = utils.NewInternalServerError(ctx, err)
4035
return err
4136
}
4237
if err = us.userRepo.StoreToken(ctx, token, expiredTime, user.ID); err != nil {
43-
logrus.Error("us.Login: failed to store token", err)
44-
err = utils.NewInternalServerError(err)
38+
err = utils.NewInternalServerError(ctx, err)
4539
return err
4640
}
4741

4842
return nil
4943
})
5044

5145
if err != nil {
52-
logrus.Error("us.Login: failed to login", err)
53-
err = utils.NewInternalServerError(err)
46+
err = utils.NewInternalServerError(ctx, err)
5447
return
5548
}
5649

app/users/usecase/logout_users.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,18 @@ import (
44
"context"
55

66
"github.com/hammer-code/lms-be/utils"
7-
"github.com/sirupsen/logrus"
87
)
98

109
func (us *usecase) Logout(ctx context.Context, token string) error {
1110
jwtData, err := us.jwt.VerifyToken(token)
1211
if err != nil {
13-
logrus.Error("us.LogoutUser: failed to varify token", err)
14-
err = utils.NewInternalServerError(err)
12+
err = utils.NewInternalServerError(ctx, err)
1513
return err
1614
}
1715

1816
err = us.userRepo.LogoutUser(ctx, token, jwtData.ExpiresAt.Time)
1917
if err != nil {
20-
logrus.Error("us.LogoutUser: failed to logout", err)
21-
err = utils.NewInternalServerError(err)
18+
err = utils.NewInternalServerError(ctx, err)
2219
return err
2320
}
2421
return err

app/users/usecase/register_users.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"github.com/hammer-code/lms-be/constants"
77
"github.com/hammer-code/lms-be/domain"
88
"github.com/hammer-code/lms-be/utils"
9-
"github.com/sirupsen/logrus"
109
"golang.org/x/crypto/bcrypt"
1110
)
1211

@@ -15,26 +14,23 @@ func (us *usecase) Register(ctx context.Context, userReq domain.User) (domain.Us
1514
err := us.dbTX.StartTransaction(ctx, func(txCtx context.Context) error {
1615
hashPassword, err := bcrypt.GenerateFromPassword([]byte(userReq.Password), bcrypt.DefaultCost)
1716
if err != nil {
18-
logrus.Error("us.Register: failed to hash password", err)
19-
err = utils.NewInternalServerError(err)
17+
err = utils.NewInternalServerError(ctx, err)
2018
return err
2119
}
2220

2321
userReq.Password = string(hashPassword)
2422
userReq.Role = constants.RoleUser
2523
user, err = us.userRepo.CreateUser(ctx, userReq)
2624
if err != nil {
27-
logrus.Error("us.Register: failed to register users. ", err)
28-
err = utils.NewInternalServerError(err)
25+
err = utils.NewInternalServerError(ctx, err)
2926
return err
3027
}
3128
return nil
3229

3330
})
3431

3532
if err != nil {
36-
logrus.Error("us.Register: failed to register users. ", err)
37-
err = utils.NewInternalServerError(err)
33+
err = utils.NewInternalServerError(ctx, err)
3834
return domain.User{}, err
3935
}
4036

utils/costum_error.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package utils
22

33
import (
4+
"context"
45
"fmt"
56
"net/http"
67
"strings"
78

89
"github.com/hammer-code/lms-be/domain"
10+
"github.com/hammer-code/lms-be/pkg/ngelog"
911
)
1012

1113
const (
@@ -27,23 +29,26 @@ func (e *CustomHttpError) Error() string {
2729
return e.Message
2830
}
2931

30-
func NewBadRequestError(msg string, err error) *CustomHttpError {
32+
func NewBadRequestError(ctx context.Context, msg string, err error) *CustomHttpError {
33+
ngelog.Error(ctx, msg, err)
3134
return &CustomHttpError{
3235
Code: http.StatusBadRequest,
3336
Message: msg,
3437
OriginError: err,
3538
}
3639
}
3740

38-
func NewUnauthorizedError(msg string, err error) *CustomHttpError {
41+
func NewUnauthorizedError(ctx context.Context, msg string, err error) *CustomHttpError {
42+
ngelog.Error(ctx, msg, err)
3943
return &CustomHttpError{
4044
Code: http.StatusUnauthorized,
4145
Message: msg,
4246
OriginError: err,
4347
}
4448
}
4549

46-
func NewInternalServerError(err error) *CustomHttpError {
50+
func NewInternalServerError(ctx context.Context, err error) *CustomHttpError {
51+
ngelog.Error(ctx, "Internal server error", err)
4752
return &CustomHttpError{
4853
Code: http.StatusInternalServerError,
4954
Message: "Internal server error",
@@ -62,18 +67,17 @@ func CheckError(errStr, containsStr, message string, code int) (domain.HttpRespo
6267
}
6368

6469
func CustomErrorResponse(err error) domain.HttpResponse {
65-
fmt.Println("YOW", err)
6670
if customErr, ok := err.(*CustomHttpError); ok {
6771
var errStr string
6872
if customErr.OriginError != nil {
6973
errStr = customErr.OriginError.Error()
7074
}
71-
resp, ok := CheckError(errStr, ErrDuplicateEmail, "User already exist", 400)
75+
resp, ok := CheckError(errStr, ErrDuplicateEmail, "User already exist", http.StatusBadRequest)
7276
if ok {
7377
return resp
7478
}
7579

76-
resp, ok = CheckError(errStr, ErrWrongPassword, "Sorry, your password is incorrect", 400)
80+
resp, ok = CheckError(errStr, ErrWrongPassword, "Sorry, your password is incorrect", http.StatusBadRequest)
7781
if ok {
7882
return resp
7983
}

0 commit comments

Comments
 (0)