Skip to content

Commit

Permalink
Add error constant and adjust error case
Browse files Browse the repository at this point in the history
  • Loading branch information
JJnvn committed Jun 30, 2024
1 parent c25b571 commit 470ecaa
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 29 deletions.
8 changes: 8 additions & 0 deletions constant/checkin.constant.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package constant

const InternalServerErrorMessage = "Internal error"
const DatabaseConnectionErrorMessage = "Database connection error"
const InvalidDataErrorMessage = "Invalid data"
const ArgumentEmptyErrorMessage = "Argument cannot be empty"
const RequestCancelledErrorMessage = "Request canceled by the client"
const AlreadyCheckinErrorMessage = "Already check in"
43 changes: 14 additions & 29 deletions internal/checkin/checkin.service.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"errors"

"github.com/isd-sgcu/rpkm67-checkin/constant"
proto "github.com/isd-sgcu/rpkm67-go-proto/rpkm67/checkin/checkin/v1"
"github.com/isd-sgcu/rpkm67-model/model"

Expand Down Expand Up @@ -38,23 +39,23 @@ func (s *serviceImpl) Create(_ context.Context, req *proto.CreateCheckInRequest)
err := s.repo.FindByUserId(req.UserId, &checkin_userIds)
if err != nil {
s.log.Named("Create").Error("Create: ", zap.Error(err))
return nil, status.Error(codes.Internal, "internal error")
return nil, status.Error(codes.Internal, constant.InternalServerErrorMessage)
}
for _, v := range checkin_userIds {
if v.Event == req.Event && v.UserID == req.UserId {
return nil, status.Error(codes.AlreadyExists, "already checked in")
return nil, status.Error(codes.AlreadyExists, constant.AlreadyCheckinErrorMessage)
}
}
err = s.repo.Create(checkin)
if err != nil {
s.log.Named("Create").Error("Create: ", zap.Error(err))
if errors.Is(err, gorm.ErrInvalidDB) {
return nil, status.Error(codes.Internal, "database connection error")
return nil, status.Error(codes.Internal, constant.DatabaseConnectionErrorMessage)
}
if errors.Is(err, gorm.ErrInvalidData) {
return nil, status.Error(codes.InvalidArgument, "invalid data")
return nil, status.Error(codes.InvalidArgument, constant.InvalidDataErrorMessage)
}
return nil, status.Error(codes.Internal, "internal error")
return nil, status.Error(codes.Internal, constant.InternalServerErrorMessage)
}

return &proto.CreateCheckInResponse{
Expand All @@ -65,28 +66,20 @@ func (s *serviceImpl) Create(_ context.Context, req *proto.CreateCheckInRequest)
func (s *serviceImpl) FindByEmail(_ context.Context, req *proto.FindByEmailCheckInRequest) (*proto.FindByEmailCheckInResponse, error) {
if req.Email == "" {
s.log.Named("FindByUserEmail").Error("FindByUserEmail: invalid user ID")
return nil, status.Error(codes.InvalidArgument, "email cannot be empty")
return nil, status.Error(codes.InvalidArgument, constant.ArgumentEmptyErrorMessage)
}

var checkins []*model.CheckIn
err := s.repo.FindByEmail(req.Email, &checkins)
if err != nil {
s.log.Named("FindByEmail").Error("FindByEmail: ", zap.Error(err))
if errors.Is(err, context.Canceled) {
return nil, status.Error(codes.Canceled, "request canceled by the client")
return nil, status.Error(codes.Canceled, constant.RequestCancelledErrorMessage)
}
if errors.Is(err, gorm.ErrInvalidDB) {
return nil, status.Error(codes.Internal, "database connection error")
return nil, status.Error(codes.Internal, constant.DatabaseConnectionErrorMessage)
}
if errors.Is(err, context.DeadlineExceeded) {
return nil, status.Error(codes.DeadlineExceeded, "request timed out")
}
return nil, status.Error(codes.Internal, "internal error")
}

if len(checkins) == 0 {
s.log.Named("FindByUserEmail").Error("email not found")
return nil, status.Error(codes.NotFound, "email not found")
return nil, status.Error(codes.Internal, constant.InternalServerErrorMessage)
}

return &proto.FindByEmailCheckInResponse{
Expand All @@ -97,28 +90,20 @@ func (s *serviceImpl) FindByEmail(_ context.Context, req *proto.FindByEmailCheck
func (s *serviceImpl) FindByUserId(_ context.Context, req *proto.FindByUserIdCheckInRequest) (*proto.FindByUserIdCheckInResponse, error) {
if req.UserId == "" {
s.log.Named("FindByUserId").Error("FindByUserId: invalid user ID")
return nil, status.Error(codes.InvalidArgument, "user ID cannot be empty")
return nil, status.Error(codes.InvalidArgument, constant.ArgumentEmptyErrorMessage)
}

var checkins []*model.CheckIn
err := s.repo.FindByUserId(req.UserId, &checkins)
if err != nil {
s.log.Named("FindByUserId").Error("FindByUserId: ", zap.Error(err))
if errors.Is(err, context.Canceled) {
return nil, status.Error(codes.Canceled, "request canceled by the client")
return nil, status.Error(codes.Canceled, constant.RequestCancelledErrorMessage)
}
if errors.Is(err, gorm.ErrInvalidDB) {
return nil, status.Error(codes.Internal, "database connection error")
return nil, status.Error(codes.Internal, constant.DatabaseConnectionErrorMessage)
}
if errors.Is(err, context.DeadlineExceeded) {
return nil, status.Error(codes.DeadlineExceeded, "request timed out")
}
return nil, status.Error(codes.Internal, "internal error")
}

if len(checkins) == 0 {
s.log.Named("FindByUserId").Error("user not found")
return nil, status.Error(codes.NotFound, "user not found")
return nil, status.Error(codes.Internal, constant.InternalServerErrorMessage)
}

return &proto.FindByUserIdCheckInResponse{
Expand Down

0 comments on commit 470ecaa

Please sign in to comment.