@Post
  @Path("/sessao/{sessaoId}/reserva")
  public void reserva(Long sessaoId, final Integer quantidade) {
    Sessao sessao = agenda.sessao(sessaoId);
    if (sessao == null) {
      result.notFound();
      return;
    }

    if (quantidade < 1) {
      validator.add(new SimpleMessage("", "Você deve escolher um lugar ou mais"));
    }

    if (!sessao.podeReservar(quantidade)) {
      validator.add(new SimpleMessage("", "Não existem ingressos disponíveis"));
    }

    // em caso de erro, redireciona para a lista de sessao
    validator.onErrorRedirectTo(this).sessao(sessao.getId());

    BigDecimal precoTotal = CalculadoraDePrecos.calcula(sessao, quantidade);

    sessao.reserva(quantidade);

    result.include("message", "Sessão reservada com sucesso por " + CURRENCY.format(precoTotal));

    result.redirectTo(IndexController.class).index();
  }
 @IncludeParameters
 public void adiciona(@Valid Usuario usuario) {
   validator.onErrorRedirectTo(this).form();
   usuario.setCriado(LocalDateTime.now());
   usuario.setCriadoPor(usuario.getUsuarioId().toString());
   usuarioDao.adiciona(usuario);
   result.redirectTo(this).lista();
 }
  @Post("/espetaculos")
  public void adiciona(Espetaculo espetaculo) {
    // aqui eh onde fazemos as varias validacoes
    // se nao tiver nome, avisa o usuario
    // se nao tiver descricao, avisa o usuario
    if (Strings.isNullOrEmpty(espetaculo.getNome())) {
      validator.add(new SimpleMessage("", "Nome do espetáculo não pode estar em branco"));
    }
    if (Strings.isNullOrEmpty(espetaculo.getDescricao())) {
      validator.add(new SimpleMessage("", "Descrição do espetáculo não pode estar em branco"));
    }
    validator.onErrorRedirectTo(this).lista();

    agenda.cadastra(espetaculo);
    result.redirectTo(this).lista();
  }