package repository import ( "gofaster/internal/model" "gorm.io/gorm" ) type UserRepo struct { BaseRepo } func NewUserRepo(db *gorm.DB) *UserRepo { return &UserRepo{BaseRepo{db: db}} } func (r *UserRepo) Create(user *model.User) error { return r.db.Create(user).Error } func (r *UserRepo) GetByID(id uint) (*model.User, error) { var user model.User err := r.db.Preload("Roles.Permissions").First(&user, id).Error return &user, err } func (r *UserRepo) GetByUsername(username string) (*model.User, error) { var user model.User err := r.db.Preload("Roles.Permissions").Where("username = ?", username).First(&user).Error return &user, err } func (r *UserRepo) Update(user *model.User) error { return r.db.Save(user).Error } func (r *UserRepo) Delete(id uint) error { return r.db.Delete(&model.User{}, id).Error } func (r *UserRepo) List(page, pageSize int) ([]model.User, int64, error) { var users []model.User var count int64 err := r.db.Model(&model.User{}).Count(&count).Error if err != nil { return nil, 0, err } offset := (page - 1) * pageSize err = r.db.Preload("Roles").Offset(offset).Limit(pageSize).Find(&users).Error return users, count, err } func (r *UserRepo) AssignRole(userID uint, roleIDs []uint) error { var roles []model.Role if err := r.db.Find(&roles, roleIDs).Error; err != nil { return err } return r.db.Model(&model.User{BaseModel: model.BaseModel{ID: userID}}).Association("Roles").Replace(roles) }