From 7949a93dcb9fd729b074c001896b23e5e746f499 Mon Sep 17 00:00:00 2001 From: Nimer Farahty Date: Sun, 8 Jun 2025 16:52:49 +0300 Subject: [PATCH] fix null pointer exception --- app/middlewares.go | 7 ------- generate.go | 2 +- gqlgen.yml | 6 ++---- models/models_gen.go | 36 ++++++++++++++++++------------------ models/user.go | 4 ++++ 5 files changed, 25 insertions(+), 30 deletions(-) diff --git a/app/middlewares.go b/app/middlewares.go index 7e8b91e..5bf8ae2 100644 --- a/app/middlewares.go +++ b/app/middlewares.go @@ -23,13 +23,6 @@ func LoaderMiddleware(loaders *Loaders, next http.Handler) http.Handler { // ExpiryMiddleware checks for expired tokens in GraphQL resolvers func ExpiryMiddleware(ctx context.Context, next graphql.ResponseHandler) *graphql.Response { - object := graphql.GetRootFieldContext(ctx) - if object != nil { - println("ExpiryMiddleware: checking token expiry in GraphQL resolver") - } else { - println("ExpiryMiddleware: checking token expiry in HTTP request") - } - if IsTokenExpired(ctx) { return graphql.ErrorResponse(ctx, "token expired") } diff --git a/generate.go b/generate.go index 6f58ea7..c7ff56b 100644 --- a/generate.go +++ b/generate.go @@ -29,7 +29,7 @@ func mutateHook(b *modelgen.ModelBuild) *modelgen.ModelBuild { field.Tag = strings.TrimSuffix(field.Tag, `"`) + `,omitempty" bson:"-"` } } else { - field.Tag = strings.TrimSuffix(field.Tag, `"`) + `" bson:"` + field.Name + `,omitempty"` + field.Tag = strings.TrimSuffix(field.Tag, `"`) + `" bson:"` + strings.ToLower(field.Name) + `,omitempty"` } } } diff --git a/gqlgen.yml b/gqlgen.yml index 6e2850a..7e94add 100644 --- a/gqlgen.yml +++ b/gqlgen.yml @@ -1,12 +1,10 @@ schema: - gql/*.gql - exec: filename: generated/generated.go package: generated - model: filename: models/models_gen.go package: models @@ -26,11 +24,11 @@ autobind: # your liking models: ID: - model: + model: - git.farahty.com/nimer/go-mongo/utils.ObjectID - github.com/99designs/gqlgen/graphql.ID Int: model: - github.com/99designs/gqlgen/graphql.Int - github.com/99designs/gqlgen/graphql.Int64 - - github.com/99designs/gqlgen/graphql.Int32 \ No newline at end of file + - github.com/99designs/gqlgen/graphql.Int32 diff --git a/models/models_gen.go b/models/models_gen.go index 5d0fb02..8ea9178 100644 --- a/models/models_gen.go +++ b/models/models_gen.go @@ -28,18 +28,18 @@ type Category struct { Body []*Translated `json:"body,omitempty" bson:"body,omitempty"` // #bson:ignore Parent *Category `json:"parent,omitempty,omitempty" bson:"-"` - ParentID *primitive.ObjectID `json:"parentId,omitempty" bson:"parentId,omitempty"` - CreatedAt time.Time `json:"createdAt" bson:"createdAt,omitempty"` - UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt,omitempty"` + ParentID *primitive.ObjectID `json:"parentId,omitempty" bson:"parentid,omitempty"` + CreatedAt time.Time `json:"createdAt" bson:"createdat,omitempty"` + UpdatedAt time.Time `json:"updatedAt" bson:"updatedat,omitempty"` // #bson:ignore CreatedBy *User `json:"createdBy,omitempty" bson:"-"` - CreatedByID primitive.ObjectID `json:"createdById" bson:"createdById,omitempty"` + CreatedByID primitive.ObjectID `json:"createdById" bson:"createdbyid,omitempty"` // #bson:ignore UpdatedBy *User `json:"updatedBy,omitempty" bson:"-"` - UpdatedByID primitive.ObjectID `json:"updatedById" bson:"updatedById,omitempty"` + UpdatedByID primitive.ObjectID `json:"updatedById" bson:"updatedbyid,omitempty"` // #bson:ignore Owner *User `json:"owner,omitempty,omitempty" bson:"-"` - OwnerID primitive.ObjectID `json:"ownerId" bson:"ownerId,omitempty"` + OwnerID primitive.ObjectID `json:"ownerId" bson:"ownerid,omitempty"` } func (Category) IsBase() {} @@ -53,7 +53,7 @@ func (this Category) GetOwner() *User { return this.Owner } type CreateCategoryInput struct { Title []*TranslatedInput `json:"title" bson:"title,omitempty"` Body []*TranslatedInput `json:"body,omitempty" bson:"body,omitempty"` - ParentID *primitive.ObjectID `json:"parentId,omitempty" bson:"parentId,omitempty"` + ParentID *primitive.ObjectID `json:"parentId,omitempty" bson:"parentid,omitempty"` } type CreateTodoInput struct { @@ -75,8 +75,8 @@ type LoginInput struct { type LoginResponse struct { User *User `json:"user" bson:"user,omitempty"` - AccessToken string `json:"accessToken" bson:"accessToken,omitempty"` - RefreshToken string `json:"refreshToken" bson:"refreshToken,omitempty"` + AccessToken string `json:"accessToken" bson:"accesstoken,omitempty"` + RefreshToken string `json:"refreshToken" bson:"refreshtoken,omitempty"` } type Mutation struct { @@ -92,17 +92,17 @@ type Todo struct { ID primitive.ObjectID `json:"id,omitempty" bson:"_id,omitempty"` Title *string `json:"title,omitempty" bson:"title,omitempty"` Completed *bool `json:"completed,omitempty" bson:"completed,omitempty"` - CreatedAt time.Time `json:"createdAt" bson:"createdAt,omitempty"` - UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt,omitempty"` + CreatedAt time.Time `json:"createdAt" bson:"createdat,omitempty"` + UpdatedAt time.Time `json:"updatedAt" bson:"updatedat,omitempty"` // #bson:ignore CreatedBy *User `json:"createdBy,omitempty" bson:"-"` - CreatedByID primitive.ObjectID `json:"createdById" bson:"createdById,omitempty"` + CreatedByID primitive.ObjectID `json:"createdById" bson:"createdbyid,omitempty"` // #bson:ignore UpdatedBy *User `json:"updatedBy,omitempty" bson:"-"` - UpdatedByID primitive.ObjectID `json:"updatedById" bson:"updatedById,omitempty"` + UpdatedByID primitive.ObjectID `json:"updatedById" bson:"updatedbyid,omitempty"` // #bson:ignore Owner *User `json:"owner,omitempty,omitempty" bson:"-"` - OwnerID primitive.ObjectID `json:"ownerId" bson:"ownerId,omitempty"` + OwnerID primitive.ObjectID `json:"ownerId" bson:"ownerid,omitempty"` } func (Todo) IsBase() {} @@ -115,13 +115,13 @@ func (this Todo) GetOwner() *User { return this.Owner } type Translated struct { Value string `json:"value" bson:"value,omitempty"` - IsPrimary bool `json:"isPrimary" bson:"isPrimary,omitempty"` + IsPrimary bool `json:"isPrimary" bson:"isprimary,omitempty"` Language string `json:"language" bson:"language,omitempty"` } type TranslatedInput struct { Value string `json:"value" bson:"value,omitempty"` - IsPrimary bool `json:"isPrimary" bson:"isPrimary,omitempty"` + IsPrimary bool `json:"isPrimary" bson:"isprimary,omitempty"` Language string `json:"language" bson:"language,omitempty"` } @@ -132,8 +132,8 @@ type User struct { Type *string `json:"type,omitempty" bson:"type,omitempty"` Status *string `json:"status,omitempty" bson:"status,omitempty"` Verified *bool `json:"verified,omitempty" bson:"verified,omitempty"` - Password *string `json:"-" bson:"Password,omitempty"` - Token *string `json:"-" bson:"Token,omitempty"` + Password *string `json:"-" bson:"password,omitempty"` + Token *string `json:"-" bson:"token,omitempty"` } type Role string diff --git a/models/user.go b/models/user.go index 156260e..2c52ec2 100644 --- a/models/user.go +++ b/models/user.go @@ -11,6 +11,10 @@ func MakeHash(password string) (string, error) { } func (u *User) CheckPassword(password string) bool { + + if u.Password == nil { + return false + } err := bcrypt.CompareHashAndPassword([]byte(*u.Password), []byte(password)) return err == nil }