--- tags: Orcestra, PT-2023/2 --- # Orc'food (PT 2023.2) ## Objetivos Este é **projeto final** do segundo processo trainee de 2023 da Empresa Junior Orc'estra Gamificação, que contempla todos os ensinamentos aprendidos até aqui. Neste documento se encontram as instruções para realizar o projeto final, além de estarem detalhados os requisitos não-funcionais (restrições) e funcionais (que devem ser desenvolvidos pelos trainees). ## Introdução Chico é dono de um restaurante local, e para aumentar as vendas do seu comércio, decidiu entrar no mercado online de delivery, onde seus clientes através do seu computador ou celular possam verificar o cardápio do restaurante e realizar seus pedidos. Para tornar o sonho de Chico realidade e aumentar suas vendas, nesse projeto final, vamos desenvolver uma **aplicação web de cardápio e delivery de pedidos para o seu restaurante!** ## Usuários A aplicação deve contemplar dois tipos de usuários que utilizarão a aplicação. O primeiro usuário é o **Administrador** e o segundo é o **Cliente**, e seus papéis estão descritos abaixo: - **Administrador**: É o lado do restaurante na aplicação, queremos que esse usuário possa manipular o cardápio que será apresentado, além de poder ver os pedidos que são feitos na aplicação de forma fácil e completa. - **Cliente**: O cliente do restaurante tem que ser capaz de ver todo o cardápio do restaurante, além de poder fazer pedidos na aplicação. Os requisitos que serão descritos mais abaixo detalham como cada usuário interage na aplicação. Caso esteja constando no requisito o nome "**Usuário**", os dois perfis de usuário da aplicação devem ser contemplados. ## Requisitos não-funcionais (restrições) Requisitos não funcionais descrevem características e qualidades do sistema ou produto. Eles estão relacionados a aspectos como desempenho, confiabilidade, segurança, usabilidade e compatibilidade. | Código | Descrição | |:------:|:------------------------------------------------------------------------------------------------------------------------- | | RN01 | Este projeto deverá ser desenvolvido na linguagem Javascript/Typescript utilizando o ecossistema React e NodeJs. | | RN02 | Para este projeto deverá haver um banco de dados contendo os dados da aplicação, que deverá ser desenvolvido com o MongoDB. | | RN03 | O projeto deverá ser responsivo para dispositivos web e mobile. | | RN04 | Todos os Requisitos funcionais dentro da sessão "Obrigatório" deverão ser desenvolvidos. | | RN05 | O usuário Cliente **não deverá** ser capaz de acessar as funcionalidades do Administrador. | | RN06 | O projeto **NÃO DEVERÁ** ter auxílio de IA (ex.: *chatGPT*, *Github co-pilot*). | ## Requisitos funcionais Requisitos funcionais descrevem as funcionalidades e as ações que um sistema ou produto deve ser capaz de executar. Eles detalham as tarefas específicas que este produto deve realizar para atender às necessidades do usuário. ### Obrigatórios #### Autenticação de Administrador | Código | Descrição | |:------:| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | RF01 | O Administrador deverá ser capaz de acessar a aplicação por um caminho diferente do Cliente. | | RF02 | O Administrador deverá inserir uma senha para conseguir acessar a aplicação | | RF03 | O sistema deverá mostrar uma mensagem de erro caso seja digitada uma senha errada do Administrador. | | RF04 | O Administrador deverá ser capaz de sair (deslogar) da aplicação | | RF05 | O sistema deverá apresentar uma mensagem de "Não Autorizado" caso um Cliente ou um Administrador não logado tentar acessar alguma funcionalidade de Administrador. | #### Cardápio | Código | Descrição | |:------:| ------------------------------------------------------------------------------------------------------------------------------- | | RF06 | Cada item do cardápio deve conter no **mínimo**: nome, descrição, preço e categoria (por exemplo: bebida, massas, prato feito…) | | RF07 | O Usuário deve ser capaz de visualizar todos os itens do cardápio. | | RF08 | O Usuário deve ser capaz de buscar um item do cardápio pelo nome. | | RF09 | O Administrador deve ser capaz de incluir itens no cardápio. | | RF10 | O Administrador deve ser capaz de remover itens do cardápio. | | RF11 | O Administrador deve ser capaz de editar os itens do cardápio. | | RF12 | O Cliente deve ser capaz de selecionar um item do cardápio e adicioná-lo no carrinho de compras. | #### Carrinho de Compras | Código | Descrição | |:------:|:------------------------------------------------------------------------------------------------ | | RF13 | O Cliente deverá ser capaz de adicionar quantos itens quiser no carrinho de compras. * | | RF14 | O Cliente deverá ser capaz de visualizar todos os itens presentes no carrinho. | | RF15 | O Cliente deverá ser capaz excluir qualquer item presente no carrinho. | | RF16 | O Cliente deverá visualizar uma mensagem de "carrinho vazio" quando não houver itens no carrinho | | RF17 | O Cliente deverá ser capaz de visualizar o total de itens no carrinho. | | RF18 | O Cliente deverá ser capaz de visualizar o total de faz me rir do carrinho | "* No caso obrigatório não será exigido ter controle da **quantidade** de um mesmo item no carrinho (Nos Extras do Carrinho de Compras essa parte é detalhada). Dessa forma, será permitido ter itens repetidos do cardápio no carrinho de compras." #### Pedidos | Código | Descrição | |:------:|:--------------------------------------------------------------------------------------------- | | RF19 | O Cliente deve ser capaz de realizar um pedido dos itens adicionados ao carrinho. | | RF20 | Ao realizar o pedido, o sistema deverá solicitar o nome e o endereço do Cliente. | | RF21 | O Administrador deve ser capaz de visualizar todos os pedidos realizados dentro da aplicação. | ### Extras #### Cardápio | Código | Descrição | |:------:|:------------------------------------------------------------------------------------------------------ | | RF22 | Cada item do cardápio deve conter foto, descrição detalhada e quantas pessoas serve. | | RF23 | O Sistema deve fornecer mais detalhes do item para o Usuário que selecioná-lo | | RF24 | O Usuário deve ser capaz de filtrar os itens do cardápio por categoria, preço e quantas pessoas serve. | #### Carrinho de Compras | Código | Descrição | |:------:|:---------------------------------------------------------------------------------------- | | RF25 | O Cliente deverá ser capaz de visualizar a quantidade de um item no carrinho | | RF26 | Caso o Cliente selecione itens repetidos no cardápio, o sistema deverá **somente** aumentar a quantidade do item no carrinho * | | RF27 | O Cliente deverá ser capaz de aumentar ou diminuir a quantidade de um item do carrinho | | RF28 | Caso o Cliente diminua a quantidade de um item a 0, o item deve ser excluído do carrinho | | RF29 | O Cliente deverá ser capaz de visualizar o total de faz me rir de cada item no carrinho | "* Esse requisito faz com que o sistema **não** possibilite mais colocar itens repetidos do cardápio no carrinho!" #### Pedidos | Código | Descrição | |:------:|:------------------------------------------------------------------------------------------------------------------------------------------------------- | | RF30 | O Administrador deverá ser capaz de visualizar os pedidos separados em 4 *status* diferentes: *pendentes*, *em andamento*, *concluídos* e *cancelados* *. | | RF31 | O Administrador deverá ser capaz de alterar o *status* de um pedido *pendente* para *em andamento* | | RF32 | O Administrador deverá ser capaz de alterar o *status* de um pedido *em andamento* para *concluído* | "* Note que a parte de *cancelados* exige que o RFE seja feito,e, caso contrário, pode-se ignorar o *status* de *cancelados* deste requisito. " #### Conta de Cliente (Autenticação) | Código | Descrição | |:------:|:----------------------------------------------------------------------------------------- | | RF33 | O Cliente deverá ser capaz de criar uma conta na aplicação | | RF34 | A conta de um Cliente deverá ter, no **mínimo**: nome do cliente, email e senha de acesso | | RF35 | O Cliente deverá ser capaz de visualizar seus dados na aplicação | | RF36 | O Cliente deverá ser capaz de editar os dados da sua conta | | RF37 | O Cliente deverá ser capaz de excluir sua conta da aplicação | #### Pedido do Cliente | Código | Descrição | |:------:|:------------------------------------------------------------------------------------------------ | | RF38 | O Cliente logado deverá ser capaz de visualizar seus pedidos realizados na aplicação. | | RF39 | O Cliente logado deverá ser capaz de visualizar detalhes sobre um pedido feito. | | RF40 | O Cliente logado deverá ser capaz de visualizar o *status* dos seus pedidos na aplicação. | | RF41 | O Cliente logado deverá ser capaz de cancelar pedidos com *status* *pendentes* ou *em andamento* | | RF42 | O sistema deverá ser capaz de salvar o endereço de um Cliente logado ao realizar um pedido para compras futuras | ## Observações 1) Todos os requisitos funcionais [**Obrigatórios**](#Obrigatórios) devem estar implementados de alguma forma na aplicação, enquanto que os [**Extras**](#Extras) não precisam necessariamente serem implementados, mas somam muito tanto no portfólio de vocês, como na **avaliação do projeto**. 2) **O RN deve ser seguido a risca**, pois terá verificação de utilização de IA na correção e caso seja identificado ocorrerá a eliminação imediata do trainee. 3) O README do repositório do projeto final deve conter todas **as instruções necessárias para executar a aplicação** desenvolvida. 4) Os membros da **Diproj** estarão a disposição para auxiliar em dúvidas e auxílio a respeito do projeto. :purple_heart: