public bool IsValidEvent(EventBase ev) { var currentProposal = _repo.GetById(ev.ProposalId); if (currentProposal == null && ev is ProposalCreatedEvent) { return(true); } if (currentProposal == null) { return(false); } if (currentProposal.Events.Any(e => e.Id == ev.Id && e.Action == ev.Action)) { return(false); } if (currentProposal.Events.Any(e => e.Timestamp > ev.Timestamp)) { return(false); } return(true); }
// # Essa função recebe uma lista de mensagens, por exemplo: // # // # [ // # "72ff1d14-756a-4549-9185-e60e326baf1b,proposal,created,2019-11-11T14:28:01Z,80921e5f-4307-4623-9ddb-5bf826a31dd7,1141424.0,240", // # "af745f6d-d5c0-41e9-b04f-ee524befa425,warranty,added,2019-11-11T14:28:01Z,80921e5f-4307-4623-9ddb-5bf826a31dd7,31c1dd83-8fb7-44ff-8cb7-947e604f6293,3245356.0,DF", // # "450951ee-a38d-475c-ac21-f22b4566fb29,warranty,added,2019-11-11T14:28:01Z,80921e5f-4307-4623-9ddb-5bf826a31dd7,c8753500-1982-4003-8287-3b46c75d4803,3413113.45,DF", // # "66882b68-baa4-47b1-9cc7-7db9c2d8f823,proponent,added,2019-11-11T14:28:01Z,80921e5f-4307-4623-9ddb-5bf826a31dd7,3f52890a-7e9a-4447-a19b-bb5008a09672,Ismael Streich Jr.,42,62615.64,true" // # ] // # // # Complete a função para retornar uma string com os IDs das propostas válidas no seguinte formato (separado por vírgula): // # "52f0b3f2-f838-4ce2-96ee-9876dd2c0cf6,51a41350-d105-4423-a9cf-5a24ac46ae84,50cedd7f-44fd-4651-a4ec-f55c742e3477" public string ProcessMessages(IEnumerable <string> messages) { IDictionary <Guid, Proposal> proposals = new Dictionary <Guid, Proposal>(); foreach (var message in messages) { EventBase ev = Parse(message); if (!_consumer.IsValidEvent(ev)) { continue; } _consumer.Consume(ev); var proposal = _repo.GetById(ev.ProposalId); proposals[proposal.Id] = proposal; } var validProposals = proposals .Where(p => p.Value.IsValid()) .Select(p => p.Key.ToString()); return(string.Join(',', validProposals)); }
public async Task <ProposalModel> GetById(int id) { return(await proposalRepository.GetById(id)); }