DSMovie é uma aplicação web full-stack desenvolvida para que os usuários possam visualizar uma lista de filmes e avaliá-los. O projeto consiste em um backend robusto construído com Java e Spring Boot, e um frontend interativo desenvolvido com React e TypeScript, oferecendo uma experiência completa de visualização e avaliação de filmes.
- Catálogo de Filmes: 🍿 Exibe uma lista de filmes com seus títulos, imagens e informações de avaliação.
- Avaliação de Filmes: ⭐️ Usuários podem atribuir uma nota (de 1 a 5 estrelas) a um filme específico.
- Média de Avaliações: Calcula e exibe a média das notas e o número total de avaliações para cada filme.
- Paginação: 📄 Navegação entre as páginas do catálogo de filmes para uma melhor experiência de usuário.
- Segurança (Backend): 🔐 Implementação de segurança para proteger as rotas da API.
- Formulário de Avaliação: Um formulário dedicado para que os usuários insiram suas notas.
Este projeto é um exemplo de aplicação full-stack, utilizando as seguintes tecnologias:
- React: Biblioteca JavaScript para construção da interface de usuário.
- TypeScript: Superset do JavaScript que adiciona tipagem estática, melhorando a robustez e manutenibilidade do código.
- Axios: Cliente HTTP baseado em Promises para comunicação com o backend.
- React Router DOM: Para roteamento no lado do cliente, gerenciando a navegação entre as páginas.
- CSS: Para estilização dos componentes.
- Java: Linguagem de programação principal.
- Spring Boot: Framework para o desenvolvimento rápido de aplicações Java, com foco em microsserviços e APIs REST.
- Spring Data JPA: Para acesso a dados de forma simplificada, utilizando o Hibernate como ORM.
- Spring Security: Para implementar mecanismos de autenticação e autorização, protegendo os endpoints da API.
- PostgreSQL: Banco de dados relacional para persistência dos dados (também configurado para H2 em ambiente de desenvolvimento/teste).
- Maven: Ferramenta de automação de build e gerenciamento de dependências.
- JPA (Java Persistence API): Padrão para mapeamento objeto-relacional.
O projeto está dividido em duas partes principais: backend
e frontend
.
├── backend/ # Código-fonte do backend (API REST) ☕
│ ├── .mvn/ # Wrappers Maven
│ ├── src/main/java/ # Código Java principal
│ │ └── com/devsuperior/dsmovie/
│ │ ├── config/ # Configurações (ex: segurança)
│ │ ├── controllers/ # Controladores REST para filmes e avaliações
│ │ ├── dto/ # Objetos de Transferência de Dados (DTOs)
│ │ ├── entities/ # Entidades JPA (Movie, Score, User)
│ │ ├── repositories/ # Repositórios Spring Data JPA
│ │ └── services/ # Lógica de negócio e serviços
│ ├── src/main/resources/ # Arquivos de configuração (application.properties, import.sql)
│ ├── pom.xml # Configurações do projeto Maven
│ └── ... # Outros arquivos do backend
└── frontend/ # Código-fonte do frontend (Aplicação React) 🌐
├── public/ # Arquivos públicos (index.html, manifest.json)
├── src/ # Código-fonte React/TypeScript
│ ├── assets/img/ # Imagens e ícones
│ ├── components/ # Componentes React (MovieCard, Navbar, Pagination, FormCard, etc.) 🧩
│ ├── pages/ # Páginas da aplicação (Listing, Form)
│ ├── types/ # Definições de tipos TypeScript
│ ├── utils/ # Funções utilitárias (chamadas de API)
│ ├── App.tsx # Componente principal
│ ├── index.tsx # Ponto de entrada da aplicação
│ └── index.css # Estilos globais
├── package.json # Dependências do projeto Node.js
├── yarn.lock # Bloqueio de versões de dependências
└── tsconfig.json # Configurações do TypeScript
Para rodar o projeto completo em sua máquina local, siga os passos abaixo para configurar e executar tanto o backend quanto o frontend.
- Java Development Kit (JDK): Versão 11 ou superior.
- Node.js: Versão 14 ou superior (inclui npm).
- Yarn (recomendado) ou npm.
- Maven: Já incluso no projeto através do
mvnw
(Maven Wrapper). - Banco de Dados: PostgreSQL (para ambiente de produção ou local) ou H2 (para testes e desenvolvimento rápido).
-
Navegue até o diretório
backend
:cd dsmovie/backend
-
Configure o Banco de Dados:
- Abra
src/main/resources/application-dev.properties
(para desenvolvimento) ouapplication-prod.properties
(para produção). - Atualize as configurações de conexão com o seu banco de dados PostgreSQL (username, password, URL do banco).
- Exemplo para PostgreSQL:
spring.datasource.url=jdbc:postgresql://localhost:5432/dsmoviedb spring.datasource.username=seu_usuario_postgres spring.datasource.password=sua_senha_postgres spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true
- Se for usar H2 em memória para testes, as configurações padrão já devem funcionar.
- Abra
-
Execute o Backend:
./mvnw spring-boot:run
Ou, no Windows:
mvnw spring-boot:run
O backend será iniciado em
http://localhost:8080
.
- Abra um novo terminal e navegue até o diretório
frontend
:cd dsmovie/frontend
- Instale as dependências:
yarn install # ou npm install
- Execute o Frontend:
O frontend será iniciado em
yarn start # ou npm start
http://localhost:3000
. Certifique-se de que o backend esteja rodando para que os dados sejam carregados.
GET /movies
: Retorna uma lista paginada de filmes.GET /movies/{id}
: Retorna os detalhes de um filme específico.PUT /scores
: Permite que um usuário avalie um filme.
- Heroku
- Netilify
Contribuições são bem-vindas! Se você tiver sugestões de melhorias, detetar bugs ou quiser adicionar novas funcionalidades, sinta-se à vontade para:
- Abrir uma Issue para discutir a proposta.
- Criar um Pull Request com suas alterações.
Email-me: gustavo-mmello@hotmail.com Conecte-se comigo em LinkedIn
Este projeto é de código aberto.