# Back-end do projeto Lucky Draw 🃏 O README a seguir é focado para como executar o projeto. Para mais informação vá para a [wiki do projeto](https://tools.ages.pucrs.br/lucky-draw/wiki/-/wikis/home) ## Pré-requisitos para executar o projeto Para executar este projeto em sua máquina, é necessário instalar as seguintes tecnologias: * Java 17 * Spring Boot 3.4.3 * Docker * Docker Compose * PostgreSQL 15.6 * Maven 3.8.6 (não é obrigatório instalar, pois o projeto utiliza o Maven Wrapper) Neste projeto, utiliza-se o Maven para gerenciar dependências e automatizar builds. No entanto, não é necessário instalá-lo manualmente, pois o Maven Wrapper garante que todos utilizem a mesma versão da ferramenta. Para saber como instalar as ferramentas do ambiente acessa a [wiki do projeto](https://tools.ages.pucrs.br/lucky-draw/wiki/-/wikis/Configuracao) na parte de configuração. ## Executando o projeto Depois de instalar as ferramentas possui 3 opções de rodar o projeto. ### Opção 1 - Executando aplicação e banco de dados em containers (RECOMENDADO) Execute o comando abaixo na raiz do repositório local: `docker-compose up -d --build` Com este comando, realiza-se o build das imagens dos containers utilizados pela aplicação e se executa estes containers. No caso deste projeto, são criados dois containers: um para o banco de dados PostgreSQL; e outro para a API Spring Boot do projeto, sendo que esta já é configurada para se conectar com o banco de dados. Quando quiser parar a execução da aplicação e remover os recursos criados (containers e redes), basta executar o comando oposto abaixo: `docker-compose down` Por padrão, o comando acima não deleta os volumes do Docker utilizados pela aplicação, e para este projeto persistimos os dados do container do PostgreSQL em um volume Docker de nome "lucky-draw-volume". Isso permite que, ao subir os containers novamente via Docker Compose em sua máquina, os dados persistidos sejam utilizados novamente. No entanto, caso se queira remover também este volume, basta adicionar a opção -v conforme abaixo: `docker-compose down -v` ### Opção 2 - Executando apenas banco de dados em container (facilita a execução da aplicação durante o desenvolvimento) Execute o comando abaixo na raiz do repositório local, para executar apenas o banco de dados PostgreSQL em um container Docker. `docker-compose up -d lucky-draw-db` ### Opção 3 - Não executar a aplicação e o banco de dados em containers (NÃO RECOMENDADO) Caso na sua máquina você não queira executar a aplicação e o banco de dados dentro de containers (NÃO RECOMENDADO!!), você também pode seguir os passos abaixo: Instalar o PostgreSQL em sua máquina Realizar o build do projeto Spring Boot utilizando o comando abaixo na raiz do repositório: `./mvnw clean install #Para usuarios Linux` `./mvnw.cmd clean install #Para usuarios Windows` Executar o projeto com o comando abaixo: `./mvnw spring-boot:run #Para usuarios Linux` `./mvnw.cmd spring-boot:run #Para usuarios Windows` ### Configuração de variaveis de ambiente Este guia descreve como configurar variáveis de ambiente em diferentes ferramentas e sistemas operacionais. 1. IntelliJ IDEA Projeto Específico Vá para Run > Edit Configurations. Selecione a configuração desejada. Na seção Environment variables, adicione as variáveis necessárias. Todos os Projetos Vá para File > Settings. Acesse Build, Execution, Deployment > Build Tools > Maven. No campo Environment Variables, adicione as variáveis. 2. Visual Studio Code (VS Code) #### No Terminal do VS Code Crie um arquivo .env: `MY_VARIABLE=value` Carregue as variáveis no terminal: `source .env` #### No launch.json - No arquivo launch.json, adicione variáveis no campo env: ``` { "env": { "MY_VARIABLE": "value" } } ``` 3. Terminal do Linux (Bash) #### Variáveis Temporárias export MY_VARIABLE=value #### Carregar de um Arquivo .env Crie um arquivo .env: export MY_VARIABLE=value Carregue as variáveis: `source .env` 4. Windows CMD #### Variáveis Temporárias `set MY_VARIABLE=value` #### Variáveis Permanentes `setx MY_VARIABLE value` 5. PowerShell (Windows) #### Variáveis Temporárias `$env:MY_VARIABLE="value"` Essas são as formas de configurar variáveis de ambiente em diferentes sistemas e ferramentas. ### Checando Padrões de Codificação Para estabelecer padrões e regras de codificação no projeto, e verificar de forma fácil se o código escrito está aderente a estas regras ou não, utiliza-se a ferramenta Checkstyle, que realiza uma análise de código estático e aponta os pontos do código implementado onde ocorreram violações dos padrões. Para realizar essa análise, basta executar o comando abaixo na raiz do repositório: `./mvnw checkstyle:check #Para usuarios Linux` `mvnw.cmd checkstyle:check #Para usuarios Windows` ### Testando a aplicação Para executar os testes com JUnit existentes, execute o comando abaixo na raiz do repositório: `./mvnw test #Para usuarios Linux` `mvnw.cmd test #Para usuarios Windows`