---
tags: Orcestra, PT-2022/2
---
# Comunidade para Cinéfilos (PT 2022/2)
## Objetivos
Este é **projeto final** do segundo processo trainee de 2022 da Empresa Junior Orc'estra Gamificação, que contempla todos os ensinamentos aprendidos no bootcamp Javascript. E 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
*"Jorge gosta muito de filmes, toda semana vai ao cinema e adora principalmente filmes de terror, mas sempre tem um problema, as vezes está assistindo a um filme em sua casa, quando chega no meio ele percebe que já assistiu ao filme :face_palm:. Muitas vezes não sabe qual filme recomendar para amigos, pois já assistiu a tantos! E agora, quem poderá nos defender?"*
Precisamos ajudar cinéfilos, como o Jorginho, com sua paixão cinematográfica! Dessa forma, o **projeto final deve ser um site/app na *web* com a temática de Comunidade para cinéfilos.**
Para isso e como restrição para esse projeto, o site deve consumir a **API TheMoviesDB**. Mais informações sobre o funcionamento da API podem ser encontradas nesse [**link**](https://developers.themoviedb.org/3/getting-started/introduction).
Tudo que deve conter no projeto final estão no requisitos elicitados logo abaixo:
## Requisitos não-funcionais (restrições)
| Código | Descrição |
|:------:|:------------------------------------------------------------------------------------------------ |
| RN01 | Este projeto deve consumir a API do TheMoviesDB. |
| RN02 | Este projeto deve ser desenvolvido na linguagem Javascript/Typescript utilizando React e NodeJs. |
| RN03 | Todos os Requisitos funcionais dentro da sessão "Obrigatório" devem ser desenvolvidos. |
| RN04 | O projeto **NÃO DEVE** ter auxílio de IA (ex.: *chatGPT*, *Github co-pilot*). |
## Requisitos funcionais
### Obrigatórios
#### Conta
| Código | Descrição |
|:------:| ------------------------------------------------------------------------------------------------------- |
| RF01 | Um usuário deve ser capaz de criar uma nova conta no site. |
| RF02 | Um usuário deve ser capaz de logar na sua conta e visualizar seus dados cadastrados |
| RF03 | Um usuário deve ser capaz de editar os dados cadastrais |
| RF04 | Um usuário deve ser capaz de excluir sua conta. |
| RF05 | Ao excluir uma conta, todas as listas e tarefas associadas a mesma devem ser excluidas . |
#### Filmes
| Código | Descrição |
|:------:|:---------------------------------------------------------------------------------------------------- |
| RF06 | Qualquer usuário deve ser capaz de visualizar os filmes mais populares do momento |
| RF07 | Qualquer usuário deve poder buscar filmes pelo nome |
| RF08 | Qualquer usuário deve ser capaz de filtrar por filmes no site (mínimo de 1 filtro) |
| RF09 | Qualquer usuário deve ser capaz de visualizar informações sobre um filme |
| RF10 | Cada filme deve ter **no mínimo**: título do filme, sinopse, avaliação média e imagem do poster do filme |
| RF11 | Um usuário logado deve ser capaz de favoritar/desfavoritar um filme |
| RF12 | Um usuário logado deve ser capaz de visualizar sua lista de favoritos |
| RF13 | Um usuário logado deve ser capaz de marcar/desmarcar um filme como já assistido |
| RF14 | Filmes já assistidos devem ser mostrados de forma diferente para o usuário logado |
| RF15 | Um usuário logado deve ser capaz de visualizar uma lista de seus filmes já assistidos |
#### Avaliação:
| Código | Descrição |
| :----: | ------------------------------------------------------------ |
| RF16 | Um usuário logado deve ser capaz de avaliar (dar nota para) um filme |
| RF17 | Um usuário logado deve ser capaz de criar uma postagem (*review*) sobre um filme |
| RF18 | Um usuário logado deve ser capaz de editar uma postagem feita sobre um filme |
| RF19 | Um usuário logado deve ser capaz de excluir uma postagem feita sobre um filme |
| RF20 | Qualquer usuário deve ser capaz de visualizar postagens feitas sobre um filme |
### Extras
#### Autenticação:
| Código | Descrição |
|:------:| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| RF21 | O usuário logado deve ser capaz de visualizar dados **somente** de sua própria conta (favoritos, filmes já assistidos, suas avaliações). |
| RF22 | Caso o usuário logado tente acessar os dados de outro, ele deve receber uma mensagem de erro "Não autorizado". |
| RF23 | Um usuário logado que ficar muito tempo sem acessar a aplicação deve receber o erro "Login expirado". |
#### Filmes +
| Código | Descrição |
|:------:| -------------------------------------------------------------------------------------------- |
| RF24 | Qualquer usuário deve ser capaz de visualizar os filmes que estão em cartaz nos cinemas |
| RF25 | Qualquer usuário deve ser capaz de visualizar os filmes que vão estrear em breve nos cinemas |
| RF26 | Qualquer usuário deve ser capaz de visualizar os filmes relacionados a um filme selecionado |
#### Lista de Filmes
| Código | Descrição |
|:------:| ----------------------------------------------------------------------------------------- |
| RF27 | Um usuário logado deve ser capaz de criar uma lista de filmes, com um título para a lista |
| RF28 | Um usuário logado deve ser capaz de visualizar suas listas de filmes criadas |
| RF29 | Um usuário logado deve ser capaz de adicionar/remover filmes a uma lista |
| RF30 | Um usuário logado deve ser capaz de editar o título de uma lista de filmes |
| RF31 | Um usuário logado deve ser capaz de excluir uma lista de filmes criada |
#### Séries e Seriados
A API selecionada para o projeto proporciona outros tipos de entretenimento além de filmes, como séries e seriados. Assim, esse módulo extra tem a finalidade de adicionar essa outra parte ao projeto:
Os requisitos de RF06 a RF20 devem ser implementados também para séries e seriados, e um novo requisito abaixo:
| Código | Descrição |
|:------:| ----------------------------------------------------------------------------------------- |
| RF32 | Qualquer usuário deve ser capaz de visualizar a temporada e os episódios dessa temporada de uma série/seriado |
## 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 RN04 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) Alguns requisitos permitem que qualquer usuário da aplicação consiga acessar, enquanto outros restrigem que o usuário esteja logado. Para implementar isso no app deve-se ter o entendimento do que são **rotas públicas e rotas privadas**!
5) Os membros da **Diproj** estarão a disposição para auxiliar em dúvidas e auxílio a respeito do projeto. :purple_heart: