paulocsilvajr /
prjSistemaCasaTintas
Projeto acadêmico de sistema para controle de estoque de tintas
Loading repository data…
Engenharia-de-Software-2025-2 / repository
Projeto acadêmico de Engenharia de Software para venda de ingressos de cinema, implementado em Java com Spring Boot no backend e Angular no frontend.
O Cinema Tickets é um projeto acadêmico desenvolvido para a disciplina de Engenharia de Software, cujo objetivo é a criação de um sistema de venda e gerenciamento de ingressos de cinema.
A plataforma permite que a rede de cinemas realize o cadastro e o gerenciamento de suas salas, incluindo dados como capacidade, organização dos assentos, horários de funcionamento e filmes em exibição. Cada sala pode possuir uma programação própria, com sessões definidas por data e horário, possibilitando uma visualização clara e estruturada do catálogo disponível.
Os usuários do sistema podem consultar os filmes em cartaz de diferentes formas, como por cinema, localização, categoria, data ou nome do filme. A aplicação também oferece um fluxo simplificado para a compra de ingressos, tornando o processo mais rápido, acessível e organizado.
Além da venda de ingressos, o sistema pode oferecer funcionalidades complementares, como controle de presença nas sessões, emissão de ingressos digitais, envio de notificações ou lembretes aos clientes e coleta de feedback após as exibições.
Atualmente, o projeto encontra-se em sua fase intermediária, contendo apenas:
docker --version
docker compose version
.envAntes de rodar o projeto, você deve criar seu próprio arquivo .env na raiz do projeto.
Existe um arquivo de exemplo chamado .env.example. Copie ele:
cp .env.example .env
Depois edite o .env conforme necessário.
.env.example# Senha do usuário do banco de dados PostgreSQL
CINEMA_TICKETS_DB_PASSWORD=sua-senha-aqui
# Segredo para JWT (JSON Web Tokens)
JWT_SECRET=sua-senha-aqui
# Coloque o perfil do spring
SPRING_PROFILES_ACTIVE=dev
# Alterar environment do angular
CONFIG=development
# Origens permitidas
CORS_ALLOWED_ORIGINS=http://localhost:4200,http://localhost:5173
# Versão da aplicação
APP_VERSION=dev
# Tempo de expiração do JWT
JWT_EXPIRATION_MS=86400000
.env define como a aplicação será executada (perfil dev ou prod, CORS, JWT, etc).
Verifique o que precisa ser informado em cada application para preencher corretamente o .env de cada perfil.No ambiente de desenvolvimento utilizamos Docker Compose.
Na raiz do projeto:
docker compose up -d --build
Isso irá:
Frontend:
http://localhost:4200
Backend:
http://localhost:8080
No profile dev, os seeders estão ativados. Isso significa que:
Admin padrão:
email: admin@local.dev
password: admin1
Em produção a aplicação está hospedada no Render.
Frontend:
https://cinema-tickets-frontend-9qnw.onrender.com
Backend:
https://cinema-tickets-eqic.onrender.com
No ambiente de produção:
prodExemplo de variáveis utilizadas em produção:
CINEMA_TICKETS_DB_URL=jdbc:postgresql://dpg-d6gdo6kr85hc7384hl90-a:5432/cinema_tickets_prod
CINEMA_TICKETS_DB_USERNAME=cinema_tickets_prod_app
CINEMA_TICKETS_DB_PASSWORD=password
SPRING_PROFILES_ACTIVE=prod
CORS_ALLOWED_ORIGINS=https://cinema-tickets-frontend-9qnw.onrender.com
APP_VERSION=prod
JWT_SECRET=...
JWT_EXPIRATION_MS=86400000
BOOTSTRAP_ADMIN_ENABLED=true
BOOTSTRAP_ADMIN_EMAIL=admin@prod.com
BOOTSTRAP_ADMIN_PASSWORD=password
BOOTSTRAP_ADMIN_NAME=Admin
BOOTSTRAP_ADMIN_CPF=00000000000
A base da URL da API é http://localhost:8080. Todos os endpoints estão listados abaixo.
/auth| Método | Endpoint | Descrição | Autenticação |
|---|---|---|---|
POST | /auth/register | Cadastra um novo usuário | Não |
POST | /auth/login | Realiza login e retorna o token JWT | Não |
Corpo de /auth/register:
{
"email": "usuario@email.com",
"password": "senha123",
"nome": "Nome Completo",
"cpf": "12345678900",
"celular": "81999999999"
}
Corpo de /auth/login:
{
"email": "usuario@email.com",
"password": "senha123"
}
Resposta de /auth/login:
{
"accessToken": "<jwt>",
"tokenType": "Bearer",
"expiresIn": 86400000
}
/filmes| Método | Endpoint | Descrição | Autenticação |
|---|---|---|---|
GET | /filmes | Lista todos os filmes | Não |
GET | /filmes/{id} | Retorna um filme pelo ID | Não |
Exemplo de resposta:
{
"id": 1,
"titulo": "Nome do Filme",
"poster": "https://url-da-imagem.jpg",
"backdrop": "https://url-do-backdrop.jpg",
"classificacao": "14",
"duracao": 120,
"generos": ["Ação", "Aventura"],
"diretores": ["Nome do Diretor"],
"sinopse": "Descrição do filme...",
"elenco": ["Ator 1", "Ator 2"],
"status": "EM_CARTAZ"
}
/salas| Método | Endpoint | Descrição | Autenticação |
|---|---|---|---|
GET | /salas | Lista todas as salas | Não |
GET | /salas/{id} | Retorna uma sala pelo ID | Não |
Exemplo de resposta:
{
"id": 1,
"nome": "Sala 1",
"capacidade": 100
}
/sessoes| Método | Endpoint | Descrição | Autenticação |
|---|---|---|---|
POST | /sessoes | Cria uma nova sessão | Sim |
GET | /sessoes?data=YYYY-MM-DD | Lista sessões por data | Não |
GET | /sessoes/{id} | Retorna uma sessão pelo ID | Não |
Corpo de POST /sessoes:
{
"filmeId": 1,
"salaId": 2,
"inicio": "2026-03-01T19:30:00",
"tipo": "2D"
}
Exemplo de resposta:
{
"id": 1,
"filmeId": 1,
"salaId": 2,
"inicio": "2026-03-01T19:30:00",
"tipo": "2D"
}
Exemplo de requisição GET /sessoes?data=2026-03-01:
GET http://localhost:8080/sessoes?data=2026-03-01
Exemplo de resposta:
[
{
"id": 1,
"filmeId": 1,
"salaId": 2,
"inicio": "2026-03-01T14:00:00",
"tipo": "2D"
},
{
"id": 2,
"filmeId": 1,
"salaId": 3,
"inicio": "2026-03-01T19:30:00",
"tipo": "3D"
}
]
Após subir o projeto com Docker, acesse:
http://localhost:4200
O frontend é o caminho recomendado para usar o sistema no dia a dia. Ele já consome a API local (http://localhost:8080) automaticamente.
Na tela de login, informe email e senha para entrar no sistema.
No profile dev, existe um usuário administrador já criado (seeder):
email: admin@local.dev
password: admin1
Use esse login para acessar as funcionalidades de criação de sessões.
Se você ainda não tiver conta, use a opção de cadastro no frontend.
Você vai preencher os mesmos campos do endpoint POST /auth/register:
Após cadastrar, faça login normalmente.
Na área de sessões, selecione uma data no seletor/calendário.
O frontend faz a busca usando:
GET /sessoes?data=YYYY-MM-DDExemplo de comportamento esperado:
2026-03-01 → o sistema lista as sessões daquele dia.Para criar sessões, você precisa estar logado como Admin.
Caminho típico no frontend:
filmeId)salaId)inicio no formato ISO)2D, 3D)Ao salvar, o frontend chama:
POST /sessoes (com JWT automaticamente no Authorization: Bearer <token>)Se você não estiver autenticado como admin (ou sem token válido), a criação será negada.
Na tela de filme, o frontend faz a busca usando:
GET /filmes/{id}Então você tem acesso a todas as informações cadastradas sobre aquele filme e as sessões disponíveis dele
O projeto segue um fluxo de contribuição organizado, utilizando boas práticas de ve
Selected from shared topics, language and repository description—not editorial ratings.
paulocsilvajr /
Projeto acadêmico de sistema para controle de estoque de tintas
darlanaraujo /
Projeto de um sistema de hotel feito em java com conexão a banco de dados. Projeto Acadêmico do PIM. Faculdade UNIP Goiânia
gabrielpcellis /
Projeto FullStack, publicado em nuvem, para fins acadêmicos: Site com layout estático, integrado a um banco com dados de vendedores, onde é possível realizar consultas e com um clique, enviar notificações por SMS com dados, etc.
FelipeSdsilva /
Esse projeto tem fins academicos de conhecimento para que possa aumentar o meu aprendizado, desenvolvido na sema sprin react da DevSuperior onde trabalhamos com o frontend desenvolvido com typescript junto com o framework React e o backendo seria Java junto do framework Spring .
tadeuespindolapalermo /
Projeto Acadêmico - Agenda de Contatos com Java e SQLite (Versões com menu interativo no console e GUI com Swing)
DevNinee /
Projeto Acadêmico - Sistema de gerenciamento de tarefas desenvolvido em Java, com interface de console interativa. O projeto implementa funcionalidades básicas de CRUD para gerenciamento de tarefas pessoais.