package storage import ( "git.mstar.dev/mstar/goutils/other" "github.com/rs/zerolog/log" "gorm.io/gorm" "git.mstar.dev/mstar/mstar-webserver/storage/generated" "git.mstar.dev/mstar/mstar-webserver/storage/models" ) func IncrementLinkCounter(link string) error { model, err := generated.Link.Where(generated.Link.Link.Eq(link)).First() switch err { case gorm.ErrRecordNotFound: log.Info().Msg("Creating link counter") err = generated.Link.Create(&models.Link{Link: link, Count: 1}) if err != nil { return other.Error("storage", "failed to create new link entry", err) } else { return nil } case nil: log.Info().Uint64("current", model.Count).Msg("Updating link") _, err = generated.Link.Where(generated.Link.Link.Eq(link)). Update(generated.Link.Count_, model.Count+1) if err != nil { return other.Error("storage", "failed to increment link count", err) } else { return nil } default: return other.Error("storage", "failed to find link", err) } }