O objetivo deste desafio é avaliar a tua capacidade de trabalhar num projeto fullstack, com foco na organização do código, utilização de bibliotecas externas, consumo de APIs públicas e persistência de dados.
Construir uma mini-aplicação com as seguintes funcionalidades:
- Listagem de Linhas — Consumir a API pública da Carris Metropolitana (https://api.carrismetropolitana.pt/v2/lines) e obter a lista de linhas disponíveis.
- Visualização de Linhas — Apresentar as linhas numa interface visual simples (lista, grelha ou outro formato) utilizando pelo menos 1 componente da UI Library da TML (
<Button/>
,<Title/>
, etc.). - Favoritar/Desfavoritar Linhas — Permitir que o utilizador possa adicionar/remover linhas dos seus favoritos.
- Navegação para o site da CM — Ao clicar numa linha, redirecionar o utilizador para a página correspondente no site da Carris Metropolitana.
A aplicação deve cumprir os seguintes critérios:
- Utilizar pelo menos 1 componente da biblioteca de UI da TML: @tmlmobilidade/ui
- Utilizar a biblioteca de utils da TML: @tmlmobilidade/utils, nomeadamente a funcionalidade
Dates
. - Persistir os favoritos numa base de dados MongoDB
- Criar uma instância MongoDB via Docker (see
compose.yml
) - Cada favorito deve ser um objeto único na base de dados, e cada um deve ter como propriedades o valor da data de criação em UnixTimestamp e OperationalDate.
- Ter uma separação clara entre o
api
e ofrontend
- Escrever código organizado, legível e modular, com componentes bem definidos e responsabilidades únicas.
- A aparência da aplicação fica ao teu critério, desde que seja utilizado pelo menos 1 componente da UI da TML.
- Disponibilizamos o esqueleto do frontend já com as bibliotecas instaladas e com os providers de UI prontos. Nota: não mexer no
layout.tsx
. - Este teste está montado com Turborepo. Para iniciar o projeto, basta correr
npm run dev
que ele irá correr as duas aplicações em simultâneo (api
efrontend
).
Por favor entrega o teu projeto num Pull Request a este repositório, com uma breve explicação das decisões tomadas num ficheiro DECISOES.md
.