package db import ( "fmt" "gestion/models" "log" ) func (d *Database) CreateUser(user *models.User) error { if err := d.GDB.Create(user).Error; err != nil { return fmt.Errorf("erreur lors de la création de l'utilisateur: %w", err) } return nil } func (d *Database) GetAllUsers() ([]*models.User, error) { var users []*models.User if err := d.GDB.Order("created_at DESC").Limit(500).Find(&users).Error; err != nil { return nil, fmt.Errorf("erreur lors de la récupération des utilisateurs: %w", err) } return users, nil } func (d *Database) GetAllDeliveryMen() ([]*models.User, error) { var users []*models.User if err := d.GDB.Where("role = ?", "livreur").Limit(100).Find(&users).Error; err != nil { return nil, fmt.Errorf("erreur lors de la récupération des livreurs: %w", err) } return users, nil } func (d *Database) UpdateUser(user *models.User) error { result := d.GDB.Model(user).Updates(models.User{ Username: user.Username, Password: user.Password, Role: user.Role, }) if result.Error != nil { return fmt.Errorf("erreur lors de la mise à jour de l'utilisateur: %w", result.Error) } if result.RowsAffected == 0 { return fmt.Errorf("utilisateur non trouvé") } return nil } func (d *Database) DeleteUser(id int) error { var user models.User if err := d.GDB.First(&user, id).Error; err != nil { if isNotFound(err) { return fmt.Errorf("utilisateur non trouvé") } return fmt.Errorf("erreur lors de la récupération du rôle: %w", err) } _ = d.RevokeAllUserTokens(id, user.Role) result := d.GDB.Delete(&models.User{}, id) if result.Error != nil { return fmt.Errorf("erreur lors de la suppression de l'utilisateur: %w", result.Error) } if result.RowsAffected == 0 { return fmt.Errorf("utilisateur non trouvé") } log.Printf("✅ Utilisateur supprimé (ID: %d, Role: %s)", id, user.Role) return nil } func (d *Database) GetUserByID(id int) (*models.User, error) { var user models.User if err := d.GDB.First(&user, id).Error; err != nil { if isNotFound(err) { return nil, fmt.Errorf("utilisateur non trouvé") } return nil, fmt.Errorf("erreur lors de la récupération de l'utilisateur: %w", err) } return &user, nil } func (d *Database) GetUserByUsername(username string) (*models.User, error) { var user models.User if err := d.GDB.Where("username = ?", username).First(&user).Error; err != nil { if isNotFound(err) { return nil, fmt.Errorf("utilisateur non trouvé") } return nil, fmt.Errorf("erreur lors de la récupération de l'utilisateur: %w", err) } return &user, nil }