From df8648f99c6f8e05ccd1b3fc15f9a0fdf7b85c31 Mon Sep 17 00:00:00 2001 From: Ross Savage Date: Fri, 30 Sep 2022 21:46:37 +0200 Subject: [PATCH] Update pending notifications when user device token changes --- go.mod | 2 +- go.sum | 4 ++ graph/resolver/resolve.go | 97 ++++++++++++++++++++------------------- graph/resolver/user.go | 22 +++++++-- 4 files changed, 74 insertions(+), 51 deletions(-) diff --git a/go.mod b/go.mod index f58f638..584f2e2 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/golang-jwt/jwt v3.2.2+incompatible github.com/google/uuid v1.3.0 github.com/joho/godotenv v1.4.0 - github.com/satimoto/go-datastore v0.3.1-0.20220925151125-2d2c9cc98c16 + github.com/satimoto/go-datastore v0.3.1-0.20220930074556-db0579f24964 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/vektah/gqlparser/v2 v2.4.0 ) diff --git a/go.sum b/go.sum index 09e083f..0d85332 100644 --- a/go.sum +++ b/go.sum @@ -673,6 +673,10 @@ github.com/satimoto/go-datastore v0.3.1-0.20220925132216-fbe63357eab3 h1:vGsymg0 github.com/satimoto/go-datastore v0.3.1-0.20220925132216-fbe63357eab3/go.mod h1:SvM8losYPwH6hJgUKLkjNtQwVv06lZgCMWl8cGdllCM= github.com/satimoto/go-datastore v0.3.1-0.20220925151125-2d2c9cc98c16 h1:IpBGZ/IvdJqV6PUUe2TkP3i8dTE6zSAmmWbG4JS/X/U= github.com/satimoto/go-datastore v0.3.1-0.20220925151125-2d2c9cc98c16/go.mod h1:SvM8losYPwH6hJgUKLkjNtQwVv06lZgCMWl8cGdllCM= +github.com/satimoto/go-datastore v0.3.1-0.20220930070309-395f616e2a91 h1:e+LIjjaJ3D7c5/1CA79DO4hsGz8ehPT0fCkN1A6s0hY= +github.com/satimoto/go-datastore v0.3.1-0.20220930070309-395f616e2a91/go.mod h1:SvM8losYPwH6hJgUKLkjNtQwVv06lZgCMWl8cGdllCM= +github.com/satimoto/go-datastore v0.3.1-0.20220930074556-db0579f24964 h1:1aLa8xIbL5YzND31angYkvdLoOm2RXNqKNhfajglvKA= +github.com/satimoto/go-datastore v0.3.1-0.20220930074556-db0579f24964/go.mod h1:SvM8losYPwH6hJgUKLkjNtQwVv06lZgCMWl8cGdllCM= github.com/satimoto/go-ferp v0.1.1-0.20220908195810-ff288d2a2a2f h1:emb13r6KZW3+8sUySFsfdK63+r6MVyoF+uvX+9KzsLQ= github.com/satimoto/go-ferp v0.1.1-0.20220908195810-ff288d2a2a2f/go.mod h1:GQdhGMwlWYwyFMO/cLhl1dRrHbKhQxKeuiPs35amvV4= github.com/satimoto/go-lsp v0.1.1-0.20220908195954-f81b0c6a2c31 h1:qm/yJ4sCgHdRcIxKwDDbu/LwYHbLw5eBbkKM2hPtC2E= diff --git a/graph/resolver/resolve.go b/graph/resolver/resolve.go index d2aa0de..6378938 100644 --- a/graph/resolver/resolve.go +++ b/graph/resolver/resolve.go @@ -22,6 +22,7 @@ import ( "github.com/satimoto/go-datastore/pkg/location" "github.com/satimoto/go-datastore/pkg/node" "github.com/satimoto/go-datastore/pkg/openingtime" + "github.com/satimoto/go-datastore/pkg/pendingnotification" "github.com/satimoto/go-datastore/pkg/promotion" "github.com/satimoto/go-datastore/pkg/referral" "github.com/satimoto/go-datastore/pkg/session" @@ -40,29 +41,30 @@ type Repository interface{} type Resolver struct { Repository - FerpService ferp.Ferp - OcpiService ocpi.Ocpi - Emailer email.Emailer - AuthenticationResolver *authentication.AuthenticationResolver - BusinessDetailRepository businessdetail.BusinessDetailRepository - ChannelRequestRepository channelrequest.ChannelRequestRepository - CountryAccountResolver *countryaccount.CountryAccountResolver - DisplayTextRepository displaytext.DisplayTextRepository - EmailSubscriptionRepository emailsubscription.EmailSubscriptionRepository - EnergyMixRepository energymix.EnergyMixRepository - EvseRepository evse.EvseRepository - ImageRepository image.ImageRepository - InvoiceRequestRepository invoicerequest.InvoiceRequestRepository - LocationRepository location.LocationRepository - NodeRepository node.NodeRepository - OpeningTimeRepository openingtime.OpeningTimeRepository - ReferralRepository referral.ReferralRepository - PromotionRepository promotion.PromotionRepository - SessionRepository session.SessionRepository - TariffRepository tariff.TariffRepository - TokenResolver *token.TokenResolver - UserRepository user.UserRepository - defaultTaxPercent float64 + FerpService ferp.Ferp + OcpiService ocpi.Ocpi + Emailer email.Emailer + AuthenticationResolver *authentication.AuthenticationResolver + BusinessDetailRepository businessdetail.BusinessDetailRepository + ChannelRequestRepository channelrequest.ChannelRequestRepository + CountryAccountResolver *countryaccount.CountryAccountResolver + DisplayTextRepository displaytext.DisplayTextRepository + EmailSubscriptionRepository emailsubscription.EmailSubscriptionRepository + EnergyMixRepository energymix.EnergyMixRepository + EvseRepository evse.EvseRepository + ImageRepository image.ImageRepository + InvoiceRequestRepository invoicerequest.InvoiceRequestRepository + LocationRepository location.LocationRepository + NodeRepository node.NodeRepository + OpeningTimeRepository openingtime.OpeningTimeRepository + ReferralRepository referral.ReferralRepository + PendingNotificationRepository pendingnotification.PendingNotificationRepository + PromotionRepository promotion.PromotionRepository + SessionRepository session.SessionRepository + TariffRepository tariff.TariffRepository + TokenResolver *token.TokenResolver + UserRepository user.UserRepository + defaultTaxPercent float64 } func NewResolver(repositoryService *db.RepositoryService) *Resolver { @@ -78,30 +80,31 @@ func NewResolverWithServices(repositoryService *db.RepositoryService, ferpServic defaultTaxPercent := util.GetEnvFloat64("DEFAULT_TAX_PERCENT", 19) return &Resolver{ - Repository: repo, - FerpService: ferpService, - OcpiService: ocpiService, - Emailer: emailer, - AuthenticationResolver: authentication.NewResolver(repositoryService), - BusinessDetailRepository: businessdetail.NewRepository(repositoryService), - ChannelRequestRepository: channelrequest.NewRepository(repositoryService), - CountryAccountResolver: countryaccount.NewResolver(repositoryService), - DisplayTextRepository: displaytext.NewRepository(repositoryService), - EmailSubscriptionRepository: emailsubscription.NewRepository(repositoryService), - EnergyMixRepository: energymix.NewRepository(repositoryService), - EvseRepository: evse.NewRepository(repositoryService), - ImageRepository: image.NewRepository(repositoryService), - InvoiceRequestRepository: invoicerequest.NewRepository(repositoryService), - LocationRepository: location.NewRepository(repositoryService), - NodeRepository: node.NewRepository(repositoryService), - OpeningTimeRepository: openingtime.NewRepository(repositoryService), - PromotionRepository: promotion.NewRepository(repositoryService), - ReferralRepository: referral.NewRepository(repositoryService), - SessionRepository: session.NewRepository(repositoryService), - TariffRepository: tariff.NewRepository(repositoryService), - TokenResolver: token.NewResolver(repositoryService), - UserRepository: user.NewRepository(repositoryService), - defaultTaxPercent: defaultTaxPercent, + Repository: repo, + FerpService: ferpService, + OcpiService: ocpiService, + Emailer: emailer, + AuthenticationResolver: authentication.NewResolver(repositoryService), + BusinessDetailRepository: businessdetail.NewRepository(repositoryService), + ChannelRequestRepository: channelrequest.NewRepository(repositoryService), + CountryAccountResolver: countryaccount.NewResolver(repositoryService), + DisplayTextRepository: displaytext.NewRepository(repositoryService), + EmailSubscriptionRepository: emailsubscription.NewRepository(repositoryService), + EnergyMixRepository: energymix.NewRepository(repositoryService), + EvseRepository: evse.NewRepository(repositoryService), + ImageRepository: image.NewRepository(repositoryService), + InvoiceRequestRepository: invoicerequest.NewRepository(repositoryService), + LocationRepository: location.NewRepository(repositoryService), + NodeRepository: node.NewRepository(repositoryService), + OpeningTimeRepository: openingtime.NewRepository(repositoryService), + PendingNotificationRepository: pendingnotification.NewRepository(repositoryService), + PromotionRepository: promotion.NewRepository(repositoryService), + ReferralRepository: referral.NewRepository(repositoryService), + SessionRepository: session.NewRepository(repositoryService), + TariffRepository: tariff.NewRepository(repositoryService), + TokenResolver: token.NewResolver(repositoryService), + UserRepository: user.NewRepository(repositoryService), + defaultTaxPercent: defaultTaxPercent, } } diff --git a/graph/resolver/user.go b/graph/resolver/user.go index 0631f4d..965f6ca 100644 --- a/graph/resolver/user.go +++ b/graph/resolver/user.go @@ -51,18 +51,20 @@ func (r *mutationResolver) CreateUser(ctx context.Context, input graph.CreateUse } referralCode := r.generateReferralCode(ctx) - - user, err := r.UserRepository.CreateUser(ctx, db.CreateUserParams{ + createUserParams := db.CreateUserParams{ CommissionPercent: dbUtil.GetEnvFloat64("DEFAULT_COMMISSION_PERCENT", 7), DeviceToken: input.DeviceToken, LinkingPubkey: auth.LinkingPubkey.String, Pubkey: input.Pubkey, ReferralCode: dbUtil.SqlNullString(referralCode), CircuitUserID: dbUtil.SqlNullInt64(circuitUserId), - }) + } + + user, err := r.UserRepository.CreateUser(ctx, createUserParams) if err != nil { dbUtil.LogOnError("API018", "User already exists", err) + log.Printf("API018: Params=%#v", createUserParams) return nil, gqlerror.Errorf("User already exists") } @@ -84,9 +86,23 @@ func (r *mutationResolver) UpdateUser(ctx context.Context, input graph.UpdateUse if err != nil { dbUtil.LogOnError("API020", "Error updating user", err) + log.Printf("API020: Params=%#v", updateUserParams) return nil, gqlerror.Errorf("Error updating user") } + updatePendingNotificationByUserParams := db.UpdatePendingNotificationsByUserParams{ + DeviceToken: input.DeviceToken, + UserID: user.ID, + } + + err = r.PendingNotificationRepository.UpdatePendingNotificationsByUser(ctx, updatePendingNotificationByUserParams) + + if err != nil { + dbUtil.LogOnError("API027", "Error updating pending notifications", err) + log.Printf("API027: Params=%#v", updatePendingNotificationByUserParams) + return nil, gqlerror.Errorf("Error updating pending notifications") + } + return &updatedUser, nil }