package auth import ( "errors" "github.com/google/uuid" "gorm.io/gorm" ) // GormStore : UserStore adossé à PostgreSQL via GORM. type GormStore struct { db *gorm.DB } func NewGormStore(db *gorm.DB) *GormStore { return &GormStore{db: db} } // ByUsername cherche un utilisateur (requête paramétrée : anti-injection). func (s *GormStore) ByUsername(username string) (User, bool) { var u User err := s.db.Where("username = ?", NormalizeUsername(username)).First(&u).Error if errors.Is(err, gorm.ErrRecordNotFound) { return User{}, false } if err != nil { return User{}, false } return u, true } // Create insère un utilisateur (usage seed/admin), mot de passe déjà haché. func (s *GormStore) Create(username, passwordHash string, role Role) (User, error) { u := User{ ID: uuid.NewString(), Username: NormalizeUsername(username), PasswordHash: passwordHash, Role: role, } if role == RoleAdmin { u.TypeAbo = "admin" } if err := s.db.Create(&u).Error; err != nil { return User{}, err } return u, nil }