protected virtual TagTargetOpResult PerformTagOperation(IList <Target> targets, IList <Tag> tags, bool IsAssignOperation = true) { IList <Target> resultTargets = new List <Target>(); IList <Tag> resultTags = new List <Tag>(); foreach (var target in targets) { //Target queriedTarget = targetRepository.GetAll().Include("TagTargets.Tag").FirstOrDefault(t => t.Id == target.Id); Target queriedTarget = targetRepository.FirstOrDefault(t => t.Id == target.Id); //ICollection<Tag> assignedTags = queriedTarget.AssignedTags; foreach (var tag in tags) { //Tag queriedTag = tagRepository.GetAll().Include("TagTargets.Target").FirstOrDefault(t => t.Id == tag.Id); Tag queriedTag = tagRepository.FirstOrDefault(t => t.Id == tag.Id); //ICollection<Target> taggedTargets = queriedTag.TaggedTargets; if (IsAssignOperation) { if (queriedTag.HasTarget(queriedTarget)) { continue; } //queriedTarget.AppendTag(queriedTag); queriedTag.AssignToTarget(queriedTarget); } else { if (!queriedTarget.HasTag(queriedTag)) { continue; } //queriedTarget.RemoveTag(queriedTag); queriedTag.DismissTarget(queriedTarget); } tagRepository.Update(queriedTag); if (!resultTags.Contains(queriedTag)) { resultTags.Add(queriedTag); } } //targetRepository.Update(queriedTarget); if (!resultTargets.Contains(queriedTarget)) { resultTargets.Add(queriedTarget); } } return(new TagTargetOpResult() { Targets = resultTargets, Tags = resultTags }); }
public async Task <CommandResult <FirewallRuleDto> > Handle(Command message, CancellationToken cancellationToken) { var target = await _targetRepository.FirstOrDefault(s => s.Id == message.FirewallRule.TargetId); if (target == null) { return(new CommandResult <FirewallRuleDto>() { IsSucceeded = true, Message = "Target not found!" }); } message.FirewallRule.Id = Guid.NewGuid(); message.FirewallRule.CreatedAt = DateTime.UtcNow; var firewallRule = _mapper.Map <Infrastructure.Entity.FirewallRule>(message.FirewallRule); var expr = _parser.GetRules(firewallRule.Expression); if (expr.Item2 && expr.Item1?.Any() == true) { foreach (var item in expr.Item1) { if (item.Action == null) { continue; } item.Action.Phase = firewallRule.RuleFor == Infrastructure.Entity.RuleFor.Request ? 1 : 3; } } else { return(new CommandResult <FirewallRuleDto>() { IsSucceeded = false, Message = "Can't parse given rule!", Result = _mapper.Map <FirewallRuleDto>(firewallRule) }); } firewallRule.SerializedExpression = JsonConvert.SerializeObject(expr); await _repository.Add(firewallRule); return(new CommandResult <FirewallRuleDto>() { IsSucceeded = true, Message = "Firewall rule successfully created!", Result = _mapper.Map <FirewallRuleDto>(firewallRule) }); }