33 lines
648 B
Go
33 lines
648 B
Go
package repository
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/ascyii/qrank/src/utils"
|
|
)
|
|
|
|
func EnsureUniqueUsernameAndSlug(u *User) error {
|
|
baseU := u.Username
|
|
baseS := utils.Slugify(u.Username)
|
|
for i := range 5 {
|
|
candU := baseU
|
|
candS := baseS
|
|
if i > 0 {
|
|
suffix := "-" + utils.MustRandToken(1)
|
|
candU = baseU + suffix
|
|
candS = baseS + suffix
|
|
}
|
|
var cnt int64
|
|
db.Model(&User{}).Where("username = ?", candU).Count(&cnt)
|
|
if cnt == 0 {
|
|
db.Model(&User{}).Where("slug = ?", candS).Count(&cnt)
|
|
if cnt == 0 {
|
|
u.Username = candU
|
|
u.Slug = candS
|
|
return nil
|
|
}
|
|
}
|
|
}
|
|
return errors.New("cannot create unique username/slug")
|
|
}
|