private Result ValidateRequest(Models.Requests.Permissions managerPermissionsRequest) => ValidationHelper.Validate(managerPermissionsRequest, new PermissionsRequestValidator());
public Task <Result <Models.Responses.ManagerContext> > ModifyPermissions(int managerId, Models.Requests.Permissions permissionsRequest) { return(_managerContext.GetManagerRelation() .Ensure(managerRelation => HasManagerChangeManagerPermission(managerRelation), "The manager does not have enough rights") .Ensure(managerRelation => DoesManagerChangeNotHisRights(managerRelation), "The manager cannot change his rights") .Check(managerRelation => ValidateRequest(permissionsRequest)) .Bind(managerRelation => UpdatePermissions(managerRelation.ServiceSupplierId)) .Map(Build)); bool DoesManagerChangeNotHisRights(Common.Models.ManagerServiceSupplierRelation managerRelation) { return(managerRelation.ManagerId != managerId); } async Task <Result <Common.Models.ManagerContext> > UpdatePermissions(int serviceSupplierId) { var managerRelation = await _dbContext.ManagerServiceSupplierRelations .SingleOrDefaultAsync(relation => relation.ManagerId == managerId && relation.ServiceSupplierId == serviceSupplierId); if (managerRelation is null) { return(Result.Failure <Common.Models.ManagerContext>($"Manager with ID {managerId} has no relation with service supplier")); } if (managerRelation.IsMaster) { return(Result.Failure <Common.Models.ManagerContext>("You cannot change the rights of the master manager")); } var manager = await _dbContext.Managers.SingleOrDefaultAsync(manager => manager.Id == managerId); if (manager is null) { return(Result.Failure <Common.Models.ManagerContext>($"Manager with ID {managerId} not found")); } managerRelation.ManagerPermissions = permissionsRequest.ManagerPermissions; _dbContext.ManagerServiceSupplierRelations.Update(managerRelation); await _dbContext.SaveChangesAsync(); var managerContext = CollectManagerContext(manager, managerRelation); return(Result.Success(managerContext)); } }