-
1. Descrição do Projeto
Term-Tracker é uma API Restful construída com as melhores práticas de desenvolvimento, utilizando as tecnologias TypeScript e NodeJS, juntamente com o framework NestJS, Class Validator, MongoDB, Mongoose, Redis e JWT. A API oferece funcionalidades para gerenciamento de usuários, autenticação, consulta de palavras em um dicionário, favoritos e histórico de palvras acessadas.
-
2. Tecnologias Utilizadas
Linguagem:
TypeScriptFramework:
NestJSBanco de Dados:
MongoDBORM:
MongooseCache:
RedisAutenticação:
JWTValidação:
Class ValidatorDocumentação:
Open API 3.0 e SwaggerUI -
3. Instalação e Uso
-
3.1 Pré-requisitos
Node.js 16 ou superior npm ou yarn instalado globalmente Docker instalado
-
3.2 Clonando o Repositório
git clone https://github.com/<seu-usuario>/fullstack-challenge-dictionary.git cd fullstack-challenge-dictionary
-
3.3 Instalação das Dependências
npm install || yarn install
-
3.4 Configuração do Docker
O projeto utiliza Docker para facilitar o deploy e a execução em diferentes ambientes. Para iniciar o ambiente de desenvolvimento, execute o seguinte comando:
docker-compose up -d
-
3.5 Acessando a API
A API estará disponível por padrão na seguinte URL:
-
3.6 Documentação da API
A documentação da API está disponível em formato Open API 3.0 na seguinte URL:
-
-
4. Roteiros da API
-
4.1 Autenticação
-
[POST] /auth/signup
Descrição: Cadastra um novo usuário.
Requisição:
{ "name": "Jhon Doe", "email": "jhondoe@email.com", "password": "123456" }
Resposta:
{ "id": "f3a10cec013ab2c1380acef", "name": "Jhon Doe", "token": "Bearer JWT.Token" }
-
[POST] /auth/signin
Descrição: Autentica um usuário existente.
Requisição:
{ "email": "example@email.com", "password": "test" }
Resposta:
{ "id": "f3a10cec013ab2c1380acef", "name": "User 1", "token": "Bearer JWT.Token" }
-
-
4.2 Dicionário
-
[GET] /entries/en
Descrição: Lista as palavras do dicionário, com paginação e suporte a busca.
Parâmetros:
search
: Termo de busca (opcional).limit
: Quantidade de resultados por página (opcional, padrão 10).page
: Página a ser exibida (opcional, padrão 1).
Resposta:
{ "results": ["fire", "firefly", "fireplace", "fireman"], "totalDocs": 20, "page": 1, "totalPages": 5, "hasNext": true, "hasPrev": false }
-
[GET] /entries/en/:word
Descrição: Retorna as informações da palavra especificada e registra o histórico de acesso.
Parâmetros:
word
: Palavra a ser consultada.
Resposta:
{ "word": "fire", "definition": "A burning of something, especially wood or other fuel, that produces flames and heat.", "examples": [ "The fire spread quickly through the forest.", "He built a fire to keep warm.", "The firefighters battled the blaze for hours." ], "userId": "f3a10cec013ab2c1380acef", "added": "2024-06-04T13:31:00.000Z" }
-
[POST] /entries/en/:word/favorite
Descrição: Salva a palavra na lista de favoritas do usuário.
Requisição:
- Deve ser enviada com o token de autenticação no header.
Resposta:
- Sucesso (código 204)
-
[DELETE] /entries/en/:word/unfavorite Descrição: Remove a palavra da lista de favoritas do usuário.
Requisição:
- Deve ser enviada com o token de autenticação no header.
Resposta:
- Sucesso (código 204)
-
-
4.3 Usuário
-
[GET] /user/me Descrição: Retorna o perfil do usuário autenticado.
Requisição:
- Deve ser enviada com o token de autenticação no header.
Resposta:
{ "id": "f3a10cec013ab2c1380acef", "name": "Jhon Doe", "email": "jhondoe@email.com" }
-
[GET] /user/me/history
-
Descrição: Lista o histórico de palavras acessadas pelo usuário.
-
Parâmetros:
limit
: Quantidade de resultados por página (opcional, padrão 10).page
: Página a ser exibida (opcional, padrão 1).
-
Resposta:
{ "results": [ { "word": "fire", "added": "2024-06-04T13:31:00.000Z" }, { "word": "fireman", "added": "2024-06-04T13:31:00.000Z" } ], "totalDocs": 2, "page": 1, "totalPages": 1, "hasNext": false, "hasPrev": false }
-
-
[GET] /user/me/favorites Descrição: Lista as palavras favoritas do usuário autenticado.
Parâmetros:
limit
: Quantidade de resultados por página (opcional, padrão 10).page
: Página a ser exibida (opcional, padrão 1).
Resposta:
{ "results": [], "totalDocs": 0, "page": 1, "totalPages": 0, "hasNext": false, "hasPrev": false }
-
-
5. Cache A API utiliza Redis para cachear o resultado de algumas requisições, como a listagem de palavras do dicionário. As respostas da API conterão os seguintes headers para informar a utilização do cache:
x-cache
: Indica se a resposta foi obtida do cache (HIT
) ou do banco de dados (MISS
).x-response-time
: Tempo de duração da requisição em milissegundos.
-
6. Diferencial 1 - Documentação Open API 3.0
A documentação da API está disponível em formato Open API 3.0 e pode ser acessada em:
-
7. Diferencial 3 - Configuração Docker
O projeto utiliza Docker para facilitar o deploy da API. Para mais informações sobre a configuração do Docker, consulte o arquivo
docker-compose.yml
eDockerfile
. -
8. .gitignore
O projeto utiliza o arquivo
.gitignore
para ignorar arquivos e pastas desnecessários no versionamento do código. -
9. Projeto Pessoal no Github
Este projeto foi desenvolvido como um desafio proposto pela plataforma Coodesh. Caso esteja utilizando um repositório pessoal no Github, lembre-se de mencionar o desafio na descrição do projeto.
This is a challenge by Coodesh
-
10. Licença
Este projeto ainda não possui uma licença definida.
-
11. Considerações Finais
O Fullstack Challenge - Dictionary é um projeto completo e robusto que demonstra habilidades em diversas áreas do desenvolvimento web. A API oferece funcionalidades avançadas para gerenciamento de usuários, autenticação, consulta de palavras em um dicionário, favoritos e histórico de acessos, além de utilizar as melhores práticas de desenvolvimento e tecnologias modernas.
-
12. Próximos Passos
O projeto pode ser aprimorado de diversas maneiras, como:
Implementar endpoints para adicionar e remover palavras do dicionário. Integrar com APIs externas, como APIs de tradução ou de definições de palavras. Implementar recursos de gamificação para incentivar o aprendizado de idiomas. Criar uma interface web para facilitar o uso da API. 13. Agradecimentos
Agradeço a Coders por ter me proposto este desafio e por me proporcionar a oportunidade de desenvolver este projeto.
-
14. Contribuições
Este projeto é de código aberto e qualquer pessoa pode contribuir com sugestões, correções de bugs ou novas funcionalidades. Para contribuir, basta criar um pull request no repositório Github.
-
15. Contato
Para dúvidas, sugestões ou contribuições, entre em contato comigo pelo e-mail thiago.barreto.oliveira@gmail.com.
generated from coodesh/backend-dictionary
-
Notifications
You must be signed in to change notification settings - Fork 0
Term-Tracker is a Restful API built with the best development practices, using TypeScript and NodeJS technologies, along with the NestJS framework, Class Validator, MongoDB, Mongoose, Redis and JWT. The API offers functionalities for managing users, authentication, looking up words in a dictionary, favorites and a history of words accessed.
BOThiago/TermTracker
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
About
Term-Tracker is a Restful API built with the best development practices, using TypeScript and NodeJS technologies, along with the NestJS framework, Class Validator, MongoDB, Mongoose, Redis and JWT. The API offers functionalities for managing users, authentication, looking up words in a dictionary, favorites and a history of words accessed.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published