---
# System prepended metadata

title: Orc'food (PT 2023.2)
tags: [PT-2023/2, PT, Orcestra]

---

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