Vou mudar o que tava antes e, em vez de fazer a documentação de todas as funções, vou fazer só dos negócios. Porque são as camadas que cada um tá trabalhando que são mais próximas uma das outras: negócios e fachada.
Implementados até agora, temos
Retorna true
se o cliente com o referido CPF já está cadastrado no nosso repositório e false
caso contrário.
Verifica se o cliente com o referido CPF já existe e:
- se o cliente já existe, lança uma
ClienteJaExisteException()
- caso contrário, tenta realizar o cadastro
- se der erro no cadastro, lança a Exception
Verifica se o cliente com o referido CPF já existe e:
- se o cliente ainda não existe, lança uma
UsuarioNaoEncontradoException()
- caso contrário, pega o usuário com tal CPF do repositório e verifica a sua senha registrada
- se a senha registrada e a senha passada para a função forem as mesmas, retorna
true
- caso contrário, retorna
false
Verifica se o cliente com o referido CPF já existe e:
- se o cliente ainda não existe, lança uma
UsuarioNaoEncontradoException()
- caso contrário, pega o usuário com tal CPF do repositório e adiciona o valor à carteira
- se der erro no processo, lança a Exception
Verifica se o cliente com o referido CPF já existe e:
- se o cliente ainda não existe, lança uma
UsuarioNaoEncontradoException()
- caso contrário, pega o usuário com tal CPF do repositório, verifica o total da sacola e retira da carteira
- se der erro nesse processo, retorna a Exception (pode ser uma genérica ou
SemDinheiroException
) - se não, retorna o valor atual da carteira depois da compra
Verifica se o cliente com o referido CPF já existe e:
- se o cliente ainda não existe, lança uma
UsuarioNaoEncontradoException()
- caso contrário, pega o usuário com tal CPF do repositório e tenta adicionar o item na sacola
- se der erro nesse processo, retorna a Exception
Mesma coisa que o de adicionar, mas para remover.
Mesma coisa que o de remover, mas remove tudo da sacola e reseta todos os valores da sacola.
Verifica se o cliente com o referido CPF já existe e:
- se o cliente ainda não existe, lança uma
UsuarioNaoEncontradoException()
- Retorna todos os pedidos feitos pelo cliente até o momento
- Se der erro, lança uma Exceção
Mesma coisa que a pedidosAntigos
, mas retorna só o pedido feito mais recentemente e que ainda está ativo, ou seja:
- Nenhum gerente autorizou os pedidos
- Falta o(s) gerente(s) de algum(ns) restaurante(s) autorizar algum(ns) pedido(s)
- Se retornar
null
é porque não existe nenhum pedido ativo
Verifica se o cliente com o referido CPF já existe e:
- se o cliente ainda não existe, lança uma
UsuarioNaoEncontradoException()
- caso contrário, tenta verificar o status dos seus pedidos
- se der erro no processo, lança a Exception
- se não, retorna algum destes valores:
- 0 - Nenhum gerente autorizou os pedidos
- 1 - Todos os gerentes autorizaram os pedidos
- 2 - Alguns gerentes já autorizaram seus pedidos mas outros não
A ideia aqui é que o cliente pode adicionar itens de mais de um restaurante em sua sacola. Asism, os gerentes de todos os restaurantes precisam autorizar o pedido. O status do pedido mostra isso. Dá pra usar o método seguinte para ver os gerentes/restaurantes que autorizaram os pedidos ou não:
Verifica se o cliente com o referido CPF já existe e:
- se o cliente ainda não existe, lança uma
UsuarioNaoEncontradoException()
- caso contrário, tenta verificar os gerentes que autorizaram o pedido da Sacola atual
- se der algum erro, lança a Exception
- caso contrário, retorna uma Hashtable com os gerentes e seu status de aprovação:
- 1 - pedido aprovado pelo gerente
- 0 - pedido não aprovado ainda
Verifica se o cliente existe:
- se não existir, lança
NaoEncontradoException
- se existir, verifica o valor
campo : int
passado para o método:- 1: atualizar Nome
- 2: atualizar Senha
- 3: atualizar Endereço
- se
campo : int
não for nenhuma destas opções acima, lança ExceptionOpcaoInvalida
- caso contrário, atualiza o atributo correspondente com
novoValor : String
- retorna o respectivo campo atualizado
Verifica se o cliente existe:
- se não existir, lança
NaoEncontradoException
- retorna o objeto
Sacola()
do cliente ou uma Exception caso dê algum erro
A ideia é utilizar o getSacolaAtual()
ou pedidosAntigos()
para pegar a(s) sacola(s) e aí passar ela(s) para esse método para pegar a lista de itens agrupada por restaurantes (na sacola pode ter itens de mais de um restaurante). O método funciona assim:
- verifica se a Sacola está vazia. Se sim, lança
SacolaVaziaException
- se não, retorna uma
Hashtable
onde as chaves são os Restaurantes de onde os pedidos foram realizados, e os itens são umaArrayList
com os itens que foram comprados do respectivo restaurante. - se der algum erro no processo, lança a Exception.
Mesma coisa que o de cima, mas retorna uma ArrayList
com os itens da Sacola.
Mesma ideia aqui: utilizar o getSacolaAtual()
ou pedidosAntigos()
para pegar a(s) sacola(s) e aí passar ela(s) para esse método para pegar o valor total da sacola. Se a sacola estiver vazia, uma SacolaVaziaException
vai ser lançada.
Retorna true
se o gerente com o referido CPF já está cadastrado no nosso repositório e false
caso contrário.
cadastrarGerente ( nome : String, cpf : String, senha : String, restauranteCnpj : String, restauranteNome : String, NegociosRestaurante : negocioRestaurante ) : void
Verifica se o gerente com o referido CPF já existe e:
- se o gerente já existe, lança uma
JaExisteException()
- caso contrário, tenta realizar o cadastro do gerente e seu respectivo restaurante
- se der erro no cadastro, lança a Exception de erro no cadastro
Verifica se o gerente com o referido CPF já existe e:
- se o gerente ainda não existe, lança uma
UsuarioNaoEncontradoException()
- caso contrário, pega o usuário com tal CPF do repositório e verifica a sua senha registrada
- se a senha registrada e a senha passada para a função forem as mesmas, retorna
true
- caso contrário, retorna
false
Verifica se o gerente com o referido CPF já existe e:
- se o gerente ainda não existe, lança uma
UsuarioNaoEncontradoException()
- caso contrário, pega o usuário com tal CPF e retorna seu respectivo restaurante
Verifica se o restaurante existe e:
- Se não existir, lança
NaoEncontradoException
- Se existir, retorna as categorias únicas no cardápio do restaurante
Abre o restaurante do gerente especificado
Fecha o restaurante do gerente especificado
Tenta aprovar o pedido referente ao gerente na sacola:
- Se ocorrer alguma exceção, lança ela;
- Se não encontrar o gerente, lança a exceção
NãoEncontradoException
- Se não der nenhum problema, retorna
true
se o pedido foi aprovado com sucesso efalse
caso contrário
Tenta encontrar o gerente que corresponde ao restaurante passado. A ideia é usar esse método para encontrar o gerente quando tu só tem o dado do restaurante.
- Se der alguma exceção, lança ela
- Se retornar
null
, não encontrou nenhum gerente com o tal restaurante - Se encontrar, retornar o objeto
Gerente()
do gerente do restaurante
Verifica se o gerente existe:
- se não existir, lança
NaoEncontradoException
- se existir, verifica o valor
campo : int
passado para o método:- 1: atualizar Nome
- 2: atualizar Senha
- se
campo : int
não for nenhuma destas opções acima, lança ExceptionOpcaoInvalida
- caso contrário, atualiza o atributo correspondente com
novoValor : String
. - retorna o respectivo campo atualizado
Verifica se o gerente existe:
- se não existir, lança
NaoEncontradoException
- se existir, retorna uma
Hashtable
em que a chave é umaSacola()
e os elementos são umaArrayList
deItem()
. Assim, dá para utilizar aSacola()
emaprovarPedido()
e mostrar os itens para o Gerente com aArrayList
. - se der algum erro no processo, lança Exception.
Verifica se o restaurante existe, retornando true
ou false
.
Verifica se o restaurante já existe:
- Se o restaurante existir no repositório, lança
JaExisteException
- Caso contrário, tenta cadastrar o restaurante
- Se der alguma Exception, lança Exception
Verifica se o restaurante existe:
- Se não existir, lança
NaoEncontradoException
- Caso contrário, retorna quanto o restaurante vendeu até o momento
inserirProdutoNoCardapio ( restaurante : Restaurante, nome : String, valor : double, categoria : String, descricao : String ) : void
Verifica se o restaurante existe:
- Se não existir, lança
NaoEncontradoException
- Se existir, verifica se o item já existe no cardápio
- Se o item já existe no cardápio, lança uma
JaExisteException
- Se ainda não existir, tenta inserir o item e caso dê algum erro, lança Exception
Mesma coisa do inserirProdutoNoCardapio
, só que pra remover 😛
Se existir mais de 1 restaurante cadastrado, vai retornar uma ArrayList
com os restaurantes abertos no momento.
Se não existir nenhum restaurante cadastrado, retorna null
Verifica se o restaurante existe e:
- Se não existir, lança
NaoEncontradoException
- Se existir, retorna os itens agrupados por categoria em uma
Hashtable< ID : Integer, Item : Item >
A ideia de ter esse método é para quando o cliente abrir um restaurante para visualizar o cardápio, a gente pegar essa Hashtable e exibir na tela os itens agrupados por categorias, tipo no iFood.
Verifica se o restaurante existe e:
- Se não existir, lança
NaoEncontradoException
- Se existir, pesquisa o ID do item no Cardápio do restaurante e retorna o item encontrado.
- Se não encontrar o item, lança Exception.
A ideia é usar essas duas funções para salvar os dados que nós armazenamos em arquivos e depois carregar de volta. Assim, a gente facilita os testes e podemos criar tipo um "banco de dados" meia boca. Cada uma das classes NegociosGerente()
, NegociosCliente()
e NegociosRestaurante()
tem esses dois métodos:
Esse método vai escrever os dados armazenados na respectiva classe de Negócio em um arquivo .ser: NegociosGerente.ser
, NegociosCliente.ser
e NegociosRestaurante.ser
. Isso é feito utilizando a interface Serializable
do java.io
. Se algum erro acontecer no processo, uma Exception é lançada.
Esse método vai ler NegociosGerente.ser
, NegociosCliente.ser
ou NegociosRestaurante.ser
e vai retornar um objeto NegociosGerente()
, NegociosCliente()
ou NegociosRestaurante()
. A ideia é ter um botão na IU para salvar e para carregar os dados e quando o usuário clicar para carregar os dados, a gente substituir a respectiva variável de negócio na Fachada pelo objeto retornado neste método.