package repository import ( "gofaster/internal/auth/model" baseModel "gofaster/internal/shared/model" "gofaster/internal/shared/repository" "gorm.io/gorm" ) type UserRepo struct { repository.BaseRepo } func NewUserRepo(db *gorm.DB) *UserRepo { return &UserRepo{BaseRepo: *repository.NewBaseRepo(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: baseModel.BaseModel{ID: userID}}).Association("Roles").Replace(roles) }