Java Event Manager CLI é uma aplicação de linha de comando desenvolvida em Java 17, que permite gerenciar eventos de forma simples e eficiente utilizando um banco de dados SQLite.
Este projeto foi desenvolvido como parte de um exercício técnico para demonstrar habilidades em desenvolvimento de software, incluindo:
- Estruturação de uma aplicação CLI (Console)
- Implementação de operações CRUD (Create, Read, Update, Delete)
- Uso de banco de dados relacional (SQLite)
- Validação de dados e regras de negócio
- Documentação
O projeto adota uma arquitetura em camadas simples, inspirada no padrão MVC, com camadas de model (entidades), DAO (Data Access Object), service para lógica de negócio e controller para gerenciar a interação com o usuário via terminal.
- Linguagem e Ferramentas do Projeto
- Tutorial: Instalação e Execução
- 1. Recurso escolhido
- 2. Banco de Dados
- 3. Funcionalidades
- 4. Como usar
- 5. Testes Unitários
- 6. Conteinerização com Docker
- 7. Estrutura de Arquivos
- 8. Logs da Aplicação
- 9. Autor
Antes de executar o projeto, certifique-se de ter instalado:
- ☕ Java 17+
- 🧱 Maven 3.8+
- 🗃️ SQLite (opcional — o banco é criado automaticamente, mas útil para inspecionar os dados)
- 🐳 Docker (opcional, apenas se for rodar via container)
- 💻 Git (para clonar o repositório)
No terminal:
git clone https://github.com/Athoosz/java-event-manager-cli.git
cd java-event-manager-cliRequisitos ☕ Java 17 e 🧱 Maven
# Compilar
mvn compile
# Executar testes
mvn test
# Empacotar dependências e classes
mvn dependency:copy-dependencies package
# Executar a aplicação (Windows)
java -cp "target/classes;target/dependency/*" com.athoosz.Main- Você tambem pode executar a aplicação diretamente pelo Visual Studio Code:
-
Abra o arquivo Main.java
-
Clique em “Run Java” (ou use Ctrl + F5)
-
Certifique-se de selecionar a classe principal com.athoosz.Main
-
Os testes podem ser executados clicando no ícone de
▶️ ao lado dos métodos de teste ou pela aba “Testing”.
O banco SQLite (
eventos.db) será criado automaticamente na primeira execução.
Para instruções detalhadas sobre execução com Docker, consulte a seção 6. Conteinerização com Docker
Propriedades:
id(inteiro) — chave primária, gerada automaticamente pelo banco.nome(string) — obrigatóriodescricao(string) — opcionaldata(date) — obrigatório (formatoyyyy-MM-dd)local(string) — opcionalcapacidadePessoas(inteiro) — obrigatório (valor > 0)
Tipos variados incluídos: string, integer e date.
Arquivo: eventos.db
Local: raiz do projeto
Acesso via classe com.athoosz.database.FabricaJDBC
CREATE TABLE IF NOT EXISTS eventos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome TEXT NOT NULL,
descricao TEXT,
data DATE NOT NULL,
local TEXT,
capacidadePessoas INTEGER NOT NULL
);O teste automatizado cria a tabela automaticamente, caso ainda não exista.
No menu interativo:
- 📋 Listar Eventos — exibe todos os registros.
- 🔍 Buscar Evento por ID — informa o ID e exibe o evento correspondente.
- ➕ Cadastrar Evento — solicita os campos; valida obrigatórios, data e capacidade.
- ✏️ Atualizar Evento — solicita o ID e novos dados; mesmas validações do cadastro.
- ❌ Deletar Evento — remove o registro com base no ID.
nomeedatasão obrigatórios.datanão pode ser anterior à data atual.capacidadePessoasdeve ser maior que zero.- Campos opcionais (
descricao,local) podem ser deixados em branco (salvos comoNULL).
Ao iniciar a aplicação, um menu será exibido.
- Escolha "1. Criar Evento"
- Informe o nome (obrigatório)
- Informe a descrição (ou pressione Enter)
- Informe a data no formato
yyyy-MM-dd(ex:2025-12-31) - Informe o local (ou Enter)
- Informe a capacidade (ex:
100)
- Escolha "2. Listar Eventos"
- Escolha "3. Buscar Evento por ID" e informe o ID retornado na listagem.
- Escolha "4. Atualizar Evento", informe o ID e insira novamente os campos.
- Escolha "5. Deletar Evento" e informe o ID.
Arquivo: src/test/java/EventoDAOTest.java
Os testes:
- Criam e limpam a tabela
eventos - Validam operações de CRUD
- Testam as principais regras de validação
Para executar:
mvn testDocker é uma plataforma que permite empacotar uma aplicação e suas dependências em um “container”. Um container é um ambiente isolado e padronizado, que pode ser executado em qualquer máquina que tenha Docker instalado. Isso facilita a distribuição, execução e escalabilidade da aplicação, pois elimina problemas de configuração do ambiente.
# Imagem base com Maven e Java 17
FROM maven:3.9.6-eclipse-temurin-17 AS build
# Diretório de trabalho dentro do container
WORKDIR /app
COPY . /app
# Compila o projeto e copia dependências
RUN mvn clean compile dependency:copy-dependencies package
# Imagem final apenas com JRE
FROM eclipse-temurin:17-jre
WORKDIR /app
# Copia classes e dependências do estágio de build
COPY --from=build /app/target/classes /app/classes
COPY --from=build /app/target/dependency /app/dependency
COPY --from=build /app/schema.sql /app/
CMD ["java", "-cp", "classes:dependency/*", "com.athoosz.Main"]- FROM: Usa uma imagem oficial do Java 17 (JRE) como base para o container.
- WORKDIR: Define o diretório
/appcomo local onde os comandos serão executados e arquivos serão armazenados. - RUN: Executa comandos dentro do container. Aqui, compila o projeto Java e copia as dependências necessárias.
- COPY: Copia os arquivos compilados da aplicação (
classes), dependências externas (dependency) e o script de criação do banco (schema.sql) para dentro do container. - CMD: Define o comando que será executado quando o container iniciar: roda a aplicação Java usando o classpath correto.
- Construa a imagem Docker (o build será feito dentro do container):
docker build -t java-event-manager-cli .
- Execute o container:
docker run -it --rm java-event-manager-cliO projeto possui a seguinte estrutura de diretórios e arquivos:
src/
├── main/java/com/example/
│ ├── controller/
│ │ └── EventoController.java
│ ├── dao/
│ │ └── EventoDAO.java
│ ├── database/
│ │ └── FabricaJDBC.java
│ ├── model/
│ │ └── Evento.java
│ ├── service/
│ │ └── EventoService.java
│ └── Main.java
├── test/java/
│ └── EventoDAOTest.java
pom.xml
schema.sql
README.md
.gitignore
dockerfile
logging.properties
O projeto utiliza o sistema de logs padrão do Java (java.util.logging). Os logs são gravados no arquivo eventos.log na raiz do projeto, conforme configurado em logging.properties.
- Arquivo de configuração:
logging.properties - Arquivo de log gerado:
eventos.log
Exemplo de configuração (logging.properties):
handlers= java.util.logging.FileHandler
java.util.logging.FileHandler.pattern = eventos.log
java.util.logging.FileHandler.append = true
.level = INFODesenvolvido por Athoosz
💻 Projeto técnico desenvolvido como parte de um processo seletivo de estágio.