35 lines
997 B
Go
35 lines
997 B
Go
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)
|
|
}
|
|
}
|