package repository import ( "gofaster/internal/auth/model" baseModel "gofaster/internal/shared/model" "gofaster/internal/shared/repository" "gorm.io/gorm" ) type RoleRepo struct { repository.BaseRepo } func NewRoleRepo(db *gorm.DB) *RoleRepo { return &RoleRepo{BaseRepo: *repository.NewBaseRepo(db)} } func (r *RoleRepo) Create(role *model.Role) error { return r.DB().Create(role).Error } func (r *RoleRepo) GetByID(id uint) (*model.Role, error) { var role model.Role err := r.DB().Preload("Permissions").First(&role, id).Error return &role, err } func (r *RoleRepo) GetByName(name string) (*model.Role, error) { var role model.Role err := r.DB().Preload("Permissions").Where("name = ?", name).First(&role).Error return &role, err } func (r *RoleRepo) Update(role *model.Role) error { return r.DB().Save(role).Error } func (r *RoleRepo) Delete(id uint) error { return r.DB().Delete(&model.Role{}, id).Error } func (r *RoleRepo) List(page, pageSize int) ([]model.Role, int64, error) { var roles []model.Role var count int64 err := r.DB().Model(&model.Role{}).Count(&count).Error if err != nil { return nil, 0, err } offset := (page - 1) * pageSize err = r.DB().Preload("Permissions").Offset(offset).Limit(pageSize).Find(&roles).Error return roles, count, err } // internal/repository/role_repo.go func (r *RoleRepo) FindByName(name string) (*model.Role, error) { var role model.Role if err := r.DB().Where("name = ?", name).First(&role).Error; err != nil { return nil, err } return &role, nil } func (r *RoleRepo) AssignPermissions(roleID uint, permissions []model.Permission) error { var permissionIDs []uint for _, p := range permissions { permissionIDs = append(permissionIDs, p.ID) } return r.DB().Model(&model.Role{BaseModel: baseModel.BaseModel{ID: roleID}}).Association("Permissions").Replace(permissions) }