Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        //   # 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));
        }
Exemplo n.º 3
0
 public async Task <ProposalModel> GetById(int id)
 {
     return(await proposalRepository.GetById(id));
 }