package repository import ( "zeromesh/internal/database" "zeromesh/internal/model" ) type UserRepo struct { db *database.DB } func NewUserRepo(db *database.DB) *UserRepo { return &UserRepo{db: db} } func (r *UserRepo) FindByUsername(username string) (*model.User, error) { var user model.User err := r.db.Where("username = ?", username).First(&user).Error if err != nil { return nil, err } return &user, nil } func (r *UserRepo) FindByID(id uint) (*model.User, error) { var user model.User err := r.db.First(&user, id).Error if err != nil { return nil, err } return &user, nil } func (r *UserRepo) Create(user *model.User) error { return r.db.Create(user).Error } func (r *UserRepo) Count() (int64, error) { var count int64 err := r.db.Model(&model.User{}).Count(&count).Error return count, err } func (r *UserRepo) HasAdmin() (bool, error) { var count int64 err := r.db.Model(&model.User{}).Where("role = ?", "admin").Count(&count).Error return count > 0, err } func (r *UserRepo) UpdatePassword(id uint, hashed string) error { return r.db.Model(&model.User{}).Where("id = ?", id).Update("password", hashed).Error } func (r *UserRepo) List(offset, limit int) ([]model.User, error) { var users []model.User err := r.db.Offset(offset).Limit(limit).Order("id desc").Find(&users).Error return users, err }