github.com/oinume/lekcije@v0.0.0-20231017100347-5b4c5eb6ab24/backend/interface/graphql/resolver/viewer.resolvers.go (about)

     1  package resolver
     2  
     3  // This file will be automatically regenerated based on the schema, any resolver implementations
     4  // will be copied through when generating and any unknown code will be moved to the end.
     5  // Code generated by github.com/99designs/gqlgen version v0.17.34
     6  
     7  import (
     8  	"context"
     9  	"fmt"
    10  
    11  	"github.com/morikuni/failure"
    12  	"github.com/oinume/lekcije/backend/context_data"
    13  	lerrors "github.com/oinume/lekcije/backend/errors"
    14  	"github.com/oinume/lekcije/backend/interface/graphql/model"
    15  	"github.com/oinume/lekcije/backend/model2"
    16  )
    17  
    18  // UpdateViewer is the resolver for the updateViewer field.
    19  func (r *mutationResolver) UpdateViewer(ctx context.Context, input model.UpdateViewerInput) (*model.User, error) {
    20  	user, err := authenticateFromContext(ctx, r.userUsecase)
    21  	if err != nil {
    22  		return nil, err
    23  	}
    24  	if input.Email == nil {
    25  		return toGraphQLUser(user), nil
    26  	}
    27  
    28  	email := *input.Email
    29  	if !r.userUsecase.IsValidEmail(email) {
    30  		// TODO: i18n
    31  		return nil, failure.New(lerrors.InvalidArgument, failure.Messagef("正しいメールアドレスを入力してください。"))
    32  	}
    33  	duplicate, err := r.userUsecase.IsDuplicateEmail(ctx, email)
    34  	if err != nil {
    35  		return nil, err
    36  	}
    37  	if duplicate {
    38  		// TODO: i18n
    39  		return nil, failure.New(lerrors.InvalidArgument, failure.Messagef("メールアドレスはすでに登録されています。"))
    40  	}
    41  
    42  	if err := r.userUsecase.UpdateEmail(ctx, user.ID, email); err != nil {
    43  		return nil, err
    44  	}
    45  	user.Email = email
    46  
    47  	go func() {
    48  		if err := r.gaMeasurementUsecase.SendEvent(
    49  			ctx,
    50  			context_data.MustGAMeasurementEvent(ctx),
    51  			model2.GAMeasurementEventCategoryUser,
    52  			"update",
    53  			fmt.Sprint(user.ID),
    54  			0,
    55  			uint32(user.ID),
    56  		); err != nil {
    57  			panic(err) // TODO: Better error handling
    58  		}
    59  	}()
    60  
    61  	return toGraphQLUser(user), nil
    62  }
    63  
    64  // Viewer is the resolver for the viewer field.
    65  func (r *queryResolver) Viewer(ctx context.Context) (*model.User, error) {
    66  	user, err := authenticateFromContext(ctx, r.userUsecase)
    67  	if err != nil {
    68  		return nil, err
    69  	}
    70  	return toGraphQLUser(user), nil
    71  }