public async Task Handle(EventoDeLancamentoFinanceiroProcessado evento, CancellationToken cancellationToken) { var lancamento = evento.Lancamento; try { var fluxo = await repositorioDeFluxoDeCaixa.ObtemFluxoDeCaixa(lancamento.Data); if (lancamento.Tipo == TipoDeLancamento.Pagamento) { fluxo.AdicionaSaida(lancamento); } else { fluxo.AdicionaEntrada(lancamento); } await repositorioDeFluxoDeCaixa.Atualiza(fluxo); } catch (EntityNotFoundException <FluxoDeCaixa> ex) { var _ = ex.Message; var fluxo = new FluxoDeCaixa { Data = lancamento.Data }; if (lancamento.Tipo == TipoDeLancamento.Pagamento) { fluxo.AdicionaSaida(lancamento); } else { fluxo.AdicionaEntrada(lancamento); } await repositorioDeFluxoDeCaixa.Adiciona(fluxo); } catch (Exception ex) { var _ = ex.Message; throw; } }
public async Task Adiciona(FluxoDeCaixa fluxoDeCaixa) { var document = new BsonDocument { { "_id", ObjectId.GenerateNewId(fluxoDeCaixa.Data) }, { "data", fluxoDeCaixa.Data }, { "entradas", new BsonArray(fluxoDeCaixa.Entradas.Select(entrada => new BsonDocument { { "data", entrada.Data }, { "valor", entrada.Valor } })) }, { "saidas", new BsonArray(fluxoDeCaixa.Saidas.Select(entrada => new BsonDocument { { "data", entrada.Data }, { "valor", entrada.Valor } })) }, { "encargos", new BsonArray(fluxoDeCaixa.Encargos.Select(entrada => new BsonDocument { { "data", entrada.Data }, { "valor", entrada.Valor } })) }, { "total", fluxoDeCaixa.Total }, { "posicao_do_dia", fluxoDeCaixa.PosicaoDoDia }, }; await collection.InsertOneAsync(document); }
public async Task Atualiza(FluxoDeCaixa fluxoDeCaixa) { var filter = Builders <BsonDocument> .Filter.Eq("_id", ObjectId.Parse(fluxoDeCaixa.Id)); var document = new BsonDocument { { "entradas", new BsonArray(fluxoDeCaixa.Entradas.Select(entrada => new BsonDocument { { "data", entrada.Data }, { "valor", entrada.Valor } })) }, { "saidas", new BsonArray(fluxoDeCaixa.Saidas.Select(entrada => new BsonDocument { { "data", entrada.Data }, { "valor", entrada.Valor } })) }, { "encargos", new BsonArray(fluxoDeCaixa.Encargos.Select(entrada => new BsonDocument { { "data", entrada.Data }, { "valor", entrada.Valor } })) }, { "data", fluxoDeCaixa.Data }, { "total", fluxoDeCaixa.Total }, { "posicao_do_dia", fluxoDeCaixa.PosicaoDoDia }, }; await collection.ReplaceOneAsync(filter, document); }