예제 #1
0
        public string CreateReserva(PedidoReservaDTO reserva)
        {
            var eventName    = EventName.ReservaRecebida.Value;
            var streamId     = Guid.NewGuid().ToString();
            var reservaEvent = new ReservaRecebidaEvent(reserva.utente, reserva.dataInicio, reserva.dataFim, reserva.obra, streamId);
            var json         = JsonConvert.SerializeObject(reservaEvent);

            _eventHandler.SendEvent(_factory, ExchangeName, eventName, json, streamId);

            return(streamId);
        }
예제 #2
0
        public void ValidateReserva(DateTime dataInicio, DateTime dataFim, string obra, string utente, string streamId, List <ObraDTO> obrasAutorizadas, List <ObraDTO> obrasSemEmprestimo)
        {
            var listaReservas = GetReservas(dataInicio, dataFim, obra);

            var routingKey   = EventName.ReservaNaoAceite.Value;
            var reservaEvent = new ReservaRecebidaEvent(utente, dataInicio, dataFim, obra, streamId);
            var json         = JsonConvert.SerializeObject(reservaEvent);

            _logger.LogDebug(" -- obrasAutorizadas {0} -- ", obrasAutorizadas.Count);
            _logger.LogDebug(" -- obrasSemEmprestimo {0} -- ", obrasSemEmprestimo.Count);

            if (listaReservas != null && listaReservas.Count > 0 && IsReservaOfUtente(listaReservas, utente))
            { //Utente já tem o livro reservado
                _eventHandler.SendEvent(_factory, ExchangeName, routingKey, json, streamId);
            }
            else
            {
                var obrasComReservas = new List <ObraDTO>();

                if (listaReservas != null)
                {
                    foreach (var item in listaReservas)
                    {
                        obrasComReservas.Add(item.obra);
                    }
                }
                _logger.LogDebug(" -- obrasComReservas {0} -- ", obrasComReservas.Count);

                var obrasAutorizadasSemEmprestimo = obrasAutorizadas.Intersect(obrasSemEmprestimo).ToList();
                if (obrasAutorizadasSemEmprestimo == null || obrasAutorizadasSemEmprestimo.Count == 0)
                {
                    _eventHandler.SendEvent(_factory, ExchangeName, routingKey, json, streamId);
                }
                else
                {
                    _logger.LogDebug(" -- obrasAutorizadasSemEmprestimo {0} -- ", obrasAutorizadasSemEmprestimo.Count);

                    var obrasAutorizadasSemEmprestimoSemReservas = obrasAutorizadasSemEmprestimo.Where(x => !obrasComReservas.Contains(x)).ToList();
                    if (obrasAutorizadasSemEmprestimoSemReservas == null || obrasAutorizadasSemEmprestimoSemReservas.Count == 0)
                    {
                        _eventHandler.SendEvent(_factory, ExchangeName, routingKey, json, streamId);
                    }
                    else
                    {
                        _logger.LogDebug(" -- obrasAutorizadasSemEmprestimoSemReservas {0} -- ", obrasAutorizadasSemEmprestimoSemReservas.Count);
                        routingKey = EventName.ReservaAceite.Value;
                        var obraReservar = obrasAutorizadasSemEmprestimoSemReservas[0];
                        json = JsonConvert.SerializeObject(new ReservaAceiteEvent(utente, dataInicio, dataFim, obraReservar, streamId));
                        _eventHandler.SendEvent(_factory, ExchangeName, routingKey, json, streamId);
                    }
                }
            }
        }