This commit is contained in:
2026-04-18 10:58:00 +03:00
parent 90d027025b
commit 427843f8fc
4 changed files with 62 additions and 7 deletions

View File

@@ -1,6 +1,7 @@
package database
import (
"errors"
"fmt"
"log"
"strings"
@@ -12,6 +13,7 @@ import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
func Connect(cfg config.Config) *gorm.DB {
@@ -74,7 +76,7 @@ func ensureDefaultAdmin(db *gorm.DB, cfg config.Config) {
return
}
if err != gorm.ErrRecordNotFound {
if !errors.Is(err, gorm.ErrRecordNotFound) {
log.Fatalf("failed to check default admin user: %v", err)
}
@@ -88,7 +90,20 @@ func ensureDefaultAdmin(db *gorm.DB, cfg config.Config) {
PasswordHash: string(passwordHash),
IsAdmin: true,
}
if err := db.Create(&user).Error; err != nil {
if err := db.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "email"}},
DoNothing: true,
}).Create(&user).Error; err != nil {
log.Fatalf("failed to create default admin user: %v", err)
}
if err := db.Where("email = ?", email).First(&user).Error; err != nil {
log.Fatalf("failed to load default admin user after bootstrap: %v", err)
}
if !user.IsAdmin {
if err := db.Model(&user).Update("is_admin", true).Error; err != nil {
log.Fatalf("failed to ensure default admin privileges: %v", err)
}
}
}

View File

@@ -4,6 +4,7 @@ import (
"time"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
type User struct {
@@ -17,7 +18,10 @@ type User struct {
}
func (u *User) AfterCreate(tx *gorm.DB) error {
return tx.FirstOrCreate(&UserSocialRating{}, UserSocialRating{
UserID: u.ID,
}).Error
rating := UserSocialRating{UserID: u.ID}
return tx.
Omit(clause.Associations).
Where("user_id = ?", u.ID).
FirstOrCreate(&rating).Error
}