Equipes de, no máximo, 3 integrantes!
O projeto deste semestre será em um sistema de compra-e-venda. O DegasBay™ é um lugar onde se pode comprar e vender todas as coisas.
O sistema DegaBay™ possui uma fachada, onde se pode solicitar os serviços disponíveis. Esta fachada é uma importante decisão estratégica, pois permite que diferentes front-ends possam acessar o sistema. Pode ser acessado, inclusive, por front-ends de terceiros, ou que funcionam em aparelhos celulares, tablets, smartphones, etc.
Para desenvolver um front-end e acessar o DegasBay™, é necessário apenas que se conheça as funcionalidades disponíveis e se configure corretamente a conexão via rede.
As funcionalidades disponíveis são as seguintes:
1. addUser. Deve-se passar como parâmetros (para simplifcar) o nome e o país de um usuário, e o sistema responde com a confirmação de sua inclusão (ou uma mensagem de erro, caso não funcione).
2. addProduct. Deve-se informar o nome de um usuário, o id e a descrição do produto e o preço desejado (que, naturalmente, deve ser um pedido aos céus, pois as ofertas sempre serão com um valor mais baixo).
3. sendOffer. Com os seguintes parâmetros: usuário, o id do produto e o valor. Ao usar esta função, o sistema cadastra uma nova oferta para um produto específico.
4. sellProduct. Um usuário, após vender seu produto, informa isso ao sistema DegasBay™, que o exclui de seu catálogo.
5. listOffers. Um pedido de todas as ofertas feitas por um determinado produto retorna uma String com esta listagem. No front end esta String pode ser colocada num relatório, num arquivo-texto, numa página etc.
Você está PROIBIDO de acrescentar, alterar ou excluir qualquer destas funcionalidades.
Ocorre, porém, que o sistema não está pronto. O servidor está funcionando corretamente, e está disponível com testes de unidade e com documentação em html (veja na pasta doc).
Mas ele ainda não está preparado para atender a todos os clientes do serviço DegasBay™. Faltam serem implementadas duas características importantes: o servidor precisa ser acessível remotamente, e quando isso acontecer o servidor precisa cuidar dos acessos concorrentes.
Pergunte-se o seguinte: o que pode acontecer se um usuário solicitar a lista de ofertas do produto que ele anunciou ao mesmo tempo em que outro usuário está tentando incluir a sua própria oferta para o mesmo produto? O que pode acontecer se um usuário fizer uma oferta para um produto que, ao mesmo tempo, já está sendo vendido?
O projeto, com bugs corrigidos por Wildson e Silas, a quem segue agradecimento, pode ser baixado aqui.