O CineList é uma aplicação full stack desenvolvida para gerenciar listas de filmes, permitindo que os usuários cadastrem, atualizem, visualizem e removam filmes de suas listas. O sistema foi desenvolvido com uma arquitetura moderna utilizando Java e Spring Boot no backend e React no frontend, com um banco de dados MySQL. A interface inicial é oferecida através de uma API documentada via Swagger.
Desenvolver uma aplicação web responsiva para gerenciar listas de filmes, permitindo aos usuários adicionar, editar e avaliar filmes com recursos personalizados, como notas e comentários.
Identificou-se a necessidade de personalização, navegação simples e acessibilidade, garantindo compatibilidade com leitores de tela e design adequado para diferentes dispositivos e inclusivo.
Funcionalidades principais: gerenciamento de listas, avaliação com estrelas e campos de comentários. Design e navegação: interface adaptável e fluida com React e React Router. Integração: suporte a APIs REST para manter os dados sincronizados com o banco de dados. Esse planejamento focou na criação de um produto inclusivo, funcional e alinhado às expectativas dos usuários.
O desenvolvimento do CineList foi realizado seguindo os princípios da programação orientada a objetos e de boas práticas para APIs RESTful. O projeto foi estruturado em pacotes distintos para facilitar a organização, manutenção e extensão do código. O backend gerencia toda a lógica de negócio e persistência de dados, enquanto o frontend (React) lida com a interface do usuário.
As principais pastas são:
- backend: contém os controladores, serviços e repositórios da API.
 - frontend (SPA): contém os componentes e lógica de apresentação da interface de usuário.
 - docker: configurações para iniciar o banco de dados MySQL via Docker.
 
Foram utilizadas as seguintes tecnologias e ferramentas:
- MySQL: Banco de dados relacional utilizado para armazenar informações dos filmes.
 - Docker: Configuração do serviço MySQL em containers, facilitando a criação e gerenciamento do ambiente.
 - JPA (Java Persistence API): Utilizada para realizar operações de persistência no banco de dados de forma simplificada e automatizada.
 - Swagger: Documentação da API, permitindo que os endpoints sejam explorados e testados.
 - JUnit e Mockito: Frameworks de teste para validar o funcionamento dos métodos de serviço.
 
O banco de dados MySQL é composto por tabelas que armazenam informações dos filmes e usuários:
- Filmes: Armazena dados sobre cada filme, incluindo título, descrição, e status de visualização.
 - Usuários: Contém informações sobre os usuários, incluindo identificadores e preferências.
 
Na pasta doc contém o driagrama do banco de dados, para mais informações.
O CineList inclui algumas dessas funcionalidades para:
Gerenciamento de Filmes:
- Cadastrar um novo filme: 
create(). - Atualizar dados de um filme existente: 
update(). - Excluir um filme: 
delete(). - Visualizar lista completa de filmes: 
getAll(). - Visualizar por ID: 
getById(). 
Gerenciamento de Usuários:
- Cadastro de novos usuários: 
create(). - Atualização de dados dos usuários: 
update(). - Excluir um usuário: 
delete(). - Visualizar lista completa de usuários: 
getAll(). - Visualizar por ID: 
getById(). - Validar CPF: 
isValidCPF()ecalcularDigito(). 
Na pasta doc contém um relatório com mais informações mais profundas sobre todas as funcionalidades.
O sistema foi organizado em várias classes, cada uma responsável por um aspecto do sistema:
- 
Filme (db): Classe responsável por definir atributos e métodos relacionados ao gerenciamento de filmes.
 - 
Usuário (db): Classe que armazena as informações dos usuários do sistema.
 - 
Controller: Define os endpoints da API e gerencia as interações com o cliente.
 - 
Service: Contém a lógica de negócio do sistema.
 - 
Repository: Interface para operações de banco de dados usando JPA.
 - 
DTO: Responsável pela transmição de dados.
 - 
Security: Classes responsáveis pela segurança da aplicação.
 - 
Mapper: Responsável pela converção entre os objetos Filme (entidade de domínio) e FilmeDTO (objeto de transferência de dados).
 
Para configurar o banco de dados, utiliza-se o seguinte comando Docker para iniciar o serviço MySQL:
docker run -d \
    --rm \
    --name cinelist_db \
    -e MYSQL_ROOT_PASSWORD=cinelist \
    -e MYSQL_USER=cinelist \
    -e MYSQL_PASSWORD=cinelist \
    -e MYSQL_DATABASE=cinelist \
    -v cineList_data:/var/lib/mysql \
    -p 3306:3306 \
    mysql:latestO frontend foi desenvolvido seguindo os princípios de componentização e boas práticas de desenvolvimento de Single Page Applications (SPA). A arquitetura foi projetada para separar responsabilidades, com cada funcionalidade principal encapsulada em componentes reutilizáveis. A comunicação com o backend é realizada via chamadas REST utilizando a biblioteca fetch.
As tecnologias utilizadas no desenvolvimento do frontend incluem:
React: Biblioteca JavaScript para criação de interfaces de usuário. Tailwind CSS: Framework utilitário para estilização rápida e responsiva. React Router: Para gerenciar navegação e rotas. UUID (v4): Para geração de identificadores únicos para filmes. Vite: Ferramenta de build para desenvolvimento rápido e eficiente. Lucide-react: Biblioteca de ícones para uso em componentes.
O frontend do CineList é desenvolvido com React e é responsável pela interface interativa da aplicação. Para configurar e iniciar o frontend, siga os passos abaixo:
- Navegue até o diretório do frontend (chamado spa):
 
cd spa- Instale as dependências do React:
 
npm install- Inicie o servidor de desenvolvimento:
 
npm run dev- Migrations usando JPA: As migrações são gerenciadas automaticamente pelo JPA, mantendo o esquema atualizado conforme o código evolui. Para rodar as migrations, use:
 
mvn clean
mvn compile
mvn spring-boot:run- Testes: Os testes são realizados com JUnit e Mockito. Para executar todos os testes, rode o comando:
 
mvn test        mvn spring-boot:runCom esses passos, o CineList está pronto para uso.
O projeto foi estruturado para separar responsabilidades, com pastas para: • backend: código Java (controladores, serviços, repositórios e configuração de segurança). • frontend (SPA): código React para a interface do usuário. • docker: scripts para configurar o ambiente de banco de dados.
A API está documentada com Swagger, permitindo fácil visualização e teste dos endpoints:
- Swagger UI: http://localhost:8081/swagger-ui/index.html
 - Documentação JSON: http://localhost:8081/v3/api-docs