Files
Gumble-Backend/internal/data/local/service_push.go
Zane Walker 7e940c83a7
Some checks failed
Build & Test / build-test (push) Has been cancelled
Build & Test / swagger-codegen-cli (push) Has been cancelled
CodeQL / Analyze (go) (push) Has been cancelled
(Feat): Initial Commit
2026-07-03 19:41:31 +05:30

76 lines
1.9 KiB
Go

package local
import (
"context"
"database/sql"
"errors"
"allaboutapps.dev/aw/go-starter/internal/api/httperrors"
"allaboutapps.dev/aw/go-starter/internal/data/dto"
"allaboutapps.dev/aw/go-starter/internal/models"
"allaboutapps.dev/aw/go-starter/internal/util"
"allaboutapps.dev/aw/go-starter/internal/util/db"
"github.com/aarondl/sqlboiler/v4/boil"
)
func (s *Service) UpdatePushToken(ctx context.Context, request dto.UpdatePushTokenRequest) error {
log := util.LogFromContext(ctx).With().Str("userID", request.User.ID).Logger()
err := db.WithTransaction(ctx, s.db, func(exec boil.ContextExecutor) error {
tokenExists, err := models.PushTokens(
models.PushTokenWhere.Token.EQ(request.Token),
).Exists(ctx, exec)
if err != nil {
log.Err(err).Msg("Failed to check if token exists")
return err
}
if tokenExists {
log.Debug().Msg("Token already exists")
return httperrors.ErrConflictPushToken
}
newToken := models.PushToken{
UserID: request.User.ID,
Token: request.Token,
Provider: request.Provider,
}
if err := newToken.Insert(ctx, s.db, boil.Infer()); err != nil {
log.Err(err).Msg("Failed to insert new token")
return err
}
if request.ExistingToken.IsZero() {
return nil
}
existingToken, err := models.PushTokens(
models.PushTokenWhere.Token.EQ(request.ExistingToken.String),
models.PushTokenWhere.UserID.EQ(request.User.ID),
).One(ctx, exec)
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
log.Debug().Msg("Existing token not found")
return httperrors.ErrNotFoundOldPushToken
}
log.Err(err).Msg("Failed to find existing token")
return err
}
if _, err := existingToken.Delete(ctx, exec); err != nil {
log.Err(err).Msg("Failed to delete existing token")
return err
}
return nil
})
if err != nil {
log.Debug().Err(err).Msg("Failed to update push token")
return err
}
return nil
}