---
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: