Este projeto é uma API construída com Fastify (quase totalmente por IA) que utiliza a API do TMDB e AniList para buscar informações sobre animes, episódios e temporadas. Ele também utiliza Knex.js para gerenciar o banco de dados.
- Visão Geral
- Tecnologias Usadas
- Pré-requisitos
- Instalação
- Rotas
- Banco de Dados documentação do banco em construção
- Lógica no Front-end
- Observações
- Contribuindo
- Licença
-
Rotas Inserção Títulos via API
- Implementar endpoints para inserir títulos utilizando a API.
-
Rotas Inserção Animes (descrição, temporadas, etc.) via ID na API
- Implementar rotas para busca e inserção de detalhes de animes utilizando o ID fornecido pela API.
-
Permissões de Usuários e Middleware
- Criar middleware para controle de permissões.
- Configurar diferentes níveis de acesso baseados em funções.
-
Seeds para Permissões
- Adicionar seeds para popular o banco de dados com permissões padrão.
-
Rotas de Configuração de Preferências
- Criar endpoints para permitir que usuários personalizem suas preferências.
-
Rotas Editar Comentários
- Implementar funcionalidades para que usuários possam editar seus comentários.
-
Rota Listar Animes Seguidos
- Criar rota para listar todos os animes seguidos pelo usuário.
-
Rota Para listar Notificações
- Criar rota para listar as notificações do usuário.
-
Rota Marcar Notificação como Lida
- Criar rota para ler notificações do usuário.
-
Rota Marcar Solicitação como Lida
- Permitir que administradores ou usuários responsáveis possam marcar solicitações como lidas.
-
Rota de Reportar (qualquer conteúdo)
- Implementar sistema de reporte para conteúdos inadequados ou suspeitos.
-
Rota para Listar Temporadas(URGENTE)
- Rota que consulta nome, quantidade e outras informações das temporadas do anime.
-
Ajuste README Routes
- Ajuste nas Rotas como Videos, returning series e etc.
-
Template para E-mail
- Criação de um template personalizado para envio de emails de recuperação de senha e etc.
- Itens concluídos: 9/14
- Itens pendentes: 4/14
Este projeto visa integrar informações da API AniList junto da API TMDB para construção de funcionalidades como:
- Busca de animes, episódios e temporadas.
- Armazenamento e gerenciamento de dados em um banco de dados relacional.
Este projeto tem como objetivo final ser uma plataforma completa para discussão sobre animes em Portugues(BR). (não havera como assistir, pelo menos ate o momento sem planos)
- Fastify: Framework web para Node.js utilizado para construção da API.
- Knex.js: Query builder para interagir com o banco de dados relacional.
- PostgreSQL: Banco de dados relacional usado para persistência de dados.
- Axios: Cliente HTTP usado para requisições, como à API AniList.
- GraphQL Request: Cliente leve para realizar requisições GraphQL.
- Argon2: Biblioteca para hashing de senhas.
- jsonwebtoken: Utilizado para autenticação baseada em tokens JWT.
- dotenv: Gerenciamento de variáveis de ambiente.
- Nodemon: Ferramenta para reiniciar automaticamente o servidor em desenvolvimento.
- Node.js: Ambiente de execução JavaScript.
- pg: Driver para conectar ao PostgreSQL.
Certifique-se de ter as seguintes ferramentas instaladas:
- Node.js (v16 ou superior)
- PostgreSQL (v12 ou superior)
-
Clone este repositório:
git clone https://github.com/polixter/anilist-api-fastify.git cd anilist-api-fastify
-
Instale as dependências:
npm install
-
Configure o banco de dados:
- Crie o banco:
createdb anilist_db
- Execute as migrations:
npm run migrate
- Execute as seeds:
npm run seed
- Crie o banco:
-
Inicie o servidor:
npm run dev
A documentação detalhada das rotas foi movida para o README de routes
para manter a organização do projeto. Acesse o link para conferir todas as informações sobre as rotas disponíveis.
A lógica no front-end segue uma série de etapas. Antes de começar, é fundamental rodar as migrations e seeds, como descrito na seção de instalação.
-
Popular animes iniciais
Primeiramente, devemos popular a base com os animes mais famosos e lançamentos atuais (através das rotas). Isso garantirá uma página inicial adequada para começar. Após essa etapa, a população da base de animes será feita pelos próprios usuários, também utilizando as rotas disponíveis.Iremos usar a rota
/animes/returning-series
para exibir informações dos animes que estão em lançamento, assim poderemos ter uma pagina inicial decente. -
Busca e inserção de títulos
- O sistema contará com uma barra de pesquisa na navbar ou na página inicial.
- Quando o usuário realizar uma busca, utilizaremos inicialmente a rota de busca local para listar os títulos disponíveis na base local.
- Caso o título desejado não esteja presente, aparecerá a opção "carregar mais", que acionará a rota de busca na API. Essa rota buscará o título na API e o inserirá na base local para consultas futuras.
- Dessa forma, a base local será enriquecida gradualmente com os títulos buscados, reduzindo a necessidade de futuras consultas na API. Este processo será similar para animes.
-
Detalhes do anime
- Ao selecionar um título, usaremos seu ID para consultar as informações detalhadas do anime através da rota de informações de um anime.
- Essa rota verificará inicialmente se as informações já estão na base local. Caso contrário, fará uma busca na API.
- Durante essa etapa, além das informações básicas do anime, também serão inseridas as temporadas e a quantidade de episódios disponíveis.
-
Vídeos do anime
- Na página do anime, utilizaremos a rota de vídeos para exibir conteúdos adicionais, como aberturas, encerramentos e outros vídeos oficiais.
As etapas fundamentais incluem:
- Busca de títulos na base local ou na API.
- Consulta de informações detalhadas do anime usando o ID.
Essas ações são essenciais para inserir temporadas e IDs necessários para o funcionamento das rotas subsequentes.
As migrations foram configuradas para funcionar no Postgres. Como alguns bancos, como o MySQL, oferecem menos suporte para certos tipos de dados, é possível que ocorram erros ao tentar usar outro banco de dados. No entanto, as migrations e seeds foram testadas e funcionam tranquilamente no Postgres.
A chave do Anilist é fácil de encontrar diretamente na página deles. Já a do TMDB exige cadastro e aprovação, mas geralmente isso não é um problema. O limite de requisições no TMDB é bem maior e já traz os dados em português, o que facilita bastante. Um ponto de atenção é que, no caso de animes com várias temporadas, o TMDB agrupa tudo em uma única entrada, enquanto o Anilist separa por temporada. Isso permite ter capas, banners e descrições diferentes para cada temporada. Pretendo revisar esse aspecto no futuro.
O repositório ficará público, já que utilizo para estudos e acredito que contribuições (se houver) são sempre bem-vindas. Como todo o projeto foi desenvolvido com a ajuda de IA (ChatGPT), é normal que existam falhas e redundâncias no código. Vou corrigindo e melhorando conforme avanço nos estudos.
Contribuições são bem-vindas! Para contribuir:
- Crie um fork do repositório.
- Crie uma branch para sua feature ou correção de bug.
- Envie um pull request com suas alterações.
Este projeto está licenciado sob a MIT License.