public HttpResponseMessage Post(EventoModel input)
        {
            Evento evento;
            try
            {
                evento = CriarEvento(input);
                agenda.Agendar(evento);

                input.Id = evento.Id;
            }
            catch (Exception ex)
            {
                if (ex is DbCException
                    || ex is LocalReservadoException
                    || ex is EventoParoquialExistenteException)
                {
                    return Request.CreateResponse<string>(HttpStatusCode.InternalServerError, ex.Message.Replace(Environment.NewLine, "<br/>"));
                }
                else
                {
                    throw;
                }
            }
            return Request.CreateResponse<EventoModel>(HttpStatusCode.Created, input);
        }
 private Evento CriarEvento(EventoModel input)
 {
     Evento evento = new Evento(
         input.Nome,
         input.Descricao,
         input.DataInicio.GetValueOrDefault(),
         input.DataFim.GetValueOrDefault(),
         GrupoLogado,
         ((TipoEventoEnum)input.Tipo)
     );
     foreach (var reserva in input.Reservas)
     {
         var local = RavenSession.ObterLocais().First(l => l.Id == reserva.LocalId);
         evento.Reservar(local, reserva.Data.GetValueOrDefault(), reserva.Hora);
     }
     return evento;
 }
        private Evento MapearEvento(Evento evento, EventoModel input)
        {
            evento.Alterar(input.Nome, input.Descricao, input.DataInicio.GetValueOrDefault(), input.DataFim.GetValueOrDefault(), GrupoLogado, ((TipoEventoEnum)input.Tipo));
            var reservas = new List<Reserva>();
            foreach (var reserva in input.Reservas)
            {
                var local = RavenSession.ObterLocais().First(l => l.Id == reserva.LocalId);
                reservas.Add(new Reserva(local, reserva.Data.GetValueOrDefault(), reserva.Hora));
            }
            evento.AlterarReservasDeLocais(reservas);

            return evento;
        }
 public HttpResponseMessage Put(string id, EventoModel input)
 {
     Evento evento = RavenSession.Load<Evento>(input.Id);
     try
     {
         MapearEvento(evento, input);
         agenda.Agendar(evento);
     }
     catch (Exception ex)
     {
         DoNotCallSaveChanges = true;
         if (ex is DbCException
             || ex is LocalReservadoException
             || ex is EventoParoquialExistenteException)
         {
             return Request.CreateResponse<string>(HttpStatusCode.InternalServerError, ex.Message.Replace(Environment.NewLine, "<br/>"));
         }
         else
         {
             throw;
         }
     }
     return Request.CreateResponse(HttpStatusCode.NoContent);
 }