{"id":27430953,"url":"https://github.com/joschonarth/javagas-server","last_synced_at":"2026-04-15T05:32:00.052Z","repository":{"id":286320732,"uuid":"865640994","full_name":"joschonarth/javagas-server","owner":"joschonarth","description":"💼 A job management platform built with Java and Spring Boot, providing a secure and efficient RESTful API for candidates to apply for jobs and companies to post job opportunities.","archived":false,"fork":false,"pushed_at":"2025-04-05T17:45:30.000Z","size":248,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-14T15:17:19.828Z","etag":null,"topics":["docker","grafana","hibernate","jacoco","java","junit","jwt","lombok","mockito","postgresql","prometheus","sonarqube","spring","spring-boot","spring-boot-actuator","spring-data-jpa","spring-security","swagger"],"latest_commit_sha":null,"homepage":"https://github.com/joschonarth/javagas-web","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/joschonarth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-30T21:42:39.000Z","updated_at":"2025-04-07T11:51:56.000Z","dependencies_parsed_at":"2025-04-05T18:34:42.670Z","dependency_job_id":null,"html_url":"https://github.com/joschonarth/javagas-server","commit_stats":null,"previous_names":["joschonarth/javagas-server"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/joschonarth/javagas-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fjavagas-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fjavagas-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fjavagas-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fjavagas-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joschonarth","download_url":"https://codeload.github.com/joschonarth/javagas-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fjavagas-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31828531,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"online","status_checked_at":"2026-04-15T02:00:06.175Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","grafana","hibernate","jacoco","java","junit","jwt","lombok","mockito","postgresql","prometheus","sonarqube","spring","spring-boot","spring-boot-actuator","spring-data-jpa","spring-security","swagger"],"created_at":"2025-04-14T15:17:16.988Z","updated_at":"2026-04-15T05:31:59.913Z","avatar_url":"https://github.com/joschonarth.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 💼 Javagas\n\n**Javagas** é uma plataforma completa para gestão de vagas de emprego, conectando candidatos a oportunidades de forma ágil e eficiente. Candidatos podem criar perfis, buscar e se candidatar a vagas, enquanto empresas publicam oportunidades e gerenciam processos seletivos. Este repositório contém o back-end da aplicação, uma **API RESTful** segura e otimizada, construída com **Java** e **Spring Boot**, garantindo alto desempenho e escalabilidade.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./assets/vagas.png\" alt=\"Tela de Login\" width=\"90%\"\u003e\n\u003c/p\u003e\n\n\u003e 🔗 Este repositório representa a **camada de serviços (back-end)** da aplicação Javagas. Para acessar o front-end, [clique aqui](https://github.com/joschonarth/javagas-web).\n\n## 🛠️ Tecnologias Utilizadas\n\n- ☕ **Java** - Linguagem principal utilizada para desenvolvimento.\n- 🌱 **Spring Boot** - Facilita a criação e configuração da API RESTful.\n- 📊 **Spring Data JPA** - Simplifica a interação com o banco de dados.\n- 🐘 **PostgreSQL** - Banco de dados relacional utilizado para armazenar informações.\n- 🐳 **Docker** - Containerização da aplicação para facilitar o desenvolvimento e a implantação.\n- 🔄 **Hibernate** - Mapeamento objeto-relacional (ORM) para facilitar as operações no banco de dados.\n- 📦 **Maven** - Gerenciador de dependências e automação do build.\n- ✨ **Lombok** - Reduz a quantidade de código boilerplate.\n- 🔒 **Spring Security** - Implementa autenticação e autorização para controle de acesso.\n- 🔑 **Java JWT** - Gera e valida tokens JWT para autenticação segura.\n- 📗 **Swagger** - Documentação e testes interativos da API.\n- 🧪 **JUnit** - Framework de testes unitários.\n- 🛠️ **Mockito** - Cria mocks para testes unitários.\n- 🔬 **Jacoco** - Ferramenta para análise de cobertura de código em testes unitários.\n- 🔧 **Spring Actuator** - Fornece endpoints de monitoramento e gerenciamento da aplicação.\n- 📊 **SonarQube** - Ferramenta para análise da qualidade do código.\n- 📈 **Grafana** - Monitoramento e visualização de métricas.\n- 📉 **Prometheus** - Coleta e armazenamento de métricas para monitoramento.\n- ⚙️ **GitHub Actions** - Automatiza o build, testes e deploy da aplicação.\n\n## ⚙️ Funcionalidades\n\n### 🧑‍💻 Candidato\n\n- 👤 **Criar um candidato**: Registra um novo candidato na plataforma.\n- 🔐 **Autenticar candidato**: Realiza o login de um candidato.\n- 🔎 **Buscar perfil de um candidato**: Retorna as informações do candidato autenticado.\n\n### 🏢 Empresa\n\n- 🏢 **Criar empresa**: Cadastra uma nova empresa no sistema.\n- 🔐 **Autenticar empresa**: Permite que empresas realizem login.\n\n### 💼 Vagas\n\n- 📝 **Criar vaga**: Publica uma nova oportunidade de emprego.\n- 📋 **Listar vagas**: Retorna todas as vagas disponíveis na plataforma.\n\n## 🚀 Como Executar o Projeto\n\n1. **Clone o repositório:**\n\n   ```bash\n   git clone https://github.com/joschonarth/javagas-server.git\n   ```\n\n2. **Entre no diretório do projeto:**\n\n   ```bash\n   cd javagas-server\n   ```\n\n3. Inicie o banco de dados **PostgreSQL** utilizando o container **Docker** com a imagem ``bitnami/postgresql``:\n\n   ```bash\n   docker-compose up -d\n   ```\n\n4. **Inicie a API:**\n\n   ```bash\n   mvn spring-boot:run\n   ```\n\n   - 🚀 A aplicação estará disponível em [http://localhost:8080](http://localhost:8080).\n   - 📜 Acesse a documentação da API em [Swagger UI](http://localhost:8080/swagger-ui.html).\n\n## 📡 Rotas da Aplicação\n\n### 🧑‍💻 Rotas do Candidato\n\n#### 👤 Criar Candidato\n\n- **Descrição:** Registra um novo candidato na plataforma.\n- **Método:** ``POST``\n- **URL:** ``/candidate``\n- **Corpo da Requisição:**\n\n```json\n{\n    \"username\": \"johndoe\",\n    \"name\": \"John Doe\",\n    \"email\": \"johndoe@example.com\",\n    \"password\": \"123456\",\n    \"description\": \"Full-Stack Developer\"\n}\n```\n\n- **Exemplo de Resposta:**\n\n```json\n{\n    \"id\": \"f94999c1-8a00-4bc2-a09b-e22dc8b7f090\",\n    \"name\": \"John Doe\",\n    \"username\": \"johndoe\",\n    \"email\": \"johndoe@example.com\",\n    \"description\": \"Full-Stack Developer\",\n    \"curriculum\": null,\n    \"createdAt\": \"2025-03-12T18:41:29.993736\"\n}\n```\n\n#### 🔐 Autenticar Candidato\n\n- **Descrição:** Realiza o login de um candidato.\n- **Método:** ``POST``\n- **URL:** ``/candidate/auth``\n- **Corpo da Requisição:**\n\n```json\n{\n    \"username\": \"johndoe\",\n    \"password\": \"123456\"\n}\n```\n\n- **Exemplo de Resposta:**\n\n```json\n{\n    \"access_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n    \"expires_in\": 1741816312251,\n    \"roles\": [\n        \"CANDIDATE\"\n    ]\n}\n```\n\n#### 🔎 Buscar Perfil de Candidato\n\n- **Descrição**: Retorna as informações do candidato autenticado.\n- **Método**: ``GET``\n- **URL**: ``/candidate``\n\n- **Exemplo de Resposta:**\n\n```json\n{\n    \"description\": \"Full-Stack Developer\",\n    \"username\": \"johndoe\",\n    \"email\": \"johndoe@example.com\",\n    \"id\": \"f94999c1-8a00-4bc2-a09b-e22dc8b7f090\",\n    \"name\": \"John Doe\"\n}\n```\n\n### 🏢 Rotas da Empresa\n\n#### 🏢 Criar empresa\n\n- **Descrição**: Cadastra uma nova empresa no sistema.\n- **Método**: ``POST``\n- **URL**: ``/company``\n- **Corpo da Requisição**:\n\n```json\n{\n    \"username\": \"company_user\",\n    \"password\": \"123456789\",\n    \"email\": \"contact@company.com\",\n    \"name\": \"Generic Company\",\n    \"website\": \"http://www.company.com\",\n    \"description\": \"Innovative technology company\"\n}\n```\n\n- **Exemplo de Resposta:**\n\n```json\n{\n    \"id\": \"4a56ab16-8c28-44ac-9d62-70df265ec121\",\n    \"name\": \"Generic Company\",\n    \"username\": \"company_user\",\n    \"email\": \"contact@company.com\",\n    \"website\": \"http://www.company.com\",\n    \"description\": \"Innovative technology company\",\n    \"createdAt\": \"2025-03-12T18:45:51.982318\"\n}\n```\n\n#### 🔐 Autenticar Empresa\n\n- **Descrição**: Permite que empresas realizem login.\n- **Método**: ``POST``\n- **URL**: ``/company/auth``\n- **Corpo da Requisição**:\n\n```json\n{\n    \"username\": \"company_user\",\n    \"password\": \"123456789\"\n}\n```\n\n- **Exemplo de Resposta:**\n\n```json\n{\n    \"access_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n    \"expires_in\": 1741823290214,\n    \"roles\": [\n        \"COMPANY\"\n    ]\n}\n```\n\n### 💼 Rotas de Vagas\n\n#### 📝 Criar Vaga\n\n- **Descrição**: Publica uma nova oportunidade de emprego.\n- **Método**: ``POST``\n- **URL**: ``/company/job``\n- **Corpo da Requisição**:\n\n```json\n{\n    \"description\": \"Job opening for Full-Stack Developer\",\n    \"benefits\": \"Pet Friendly, Gym Pass, Meal Voucher, Health Plan, Dental Plan\",\n    \"level\": \"Junior\"\n}\n```\n\n- **Exemplo de Resposta:**\n\n```json\n{\n    \"id\": \"0ba90db2-40fc-4823-99e4-f4a894bd135e\",\n    \"description\": \"Job opening for Full-Stack Developer\",\n    \"benefits\": \"Pet Friendly, Gym Pass, Meal Voucher, Health Plan, Dental Plan\",\n    \"level\": \"Junior\",\n    \"companyEntity\": null,\n    \"companyId\": \"4a56ab16-8c28-44ac-9d62-70df265ec121\",\n    \"createdAt\": \"2025-03-12T18:49:15.798243\"\n}\n```\n\n#### 📋 Listar Vagas\n\n- **Descrição**: Retorna todas as vagas disponíveis na plataforma.\n- **Método**: ``GET``\n- **URL**: ``/company/job``\n\n- **Exemplo de Resposta:**\n\n```json\n[\n    {\n        \"id\": \"0ba90db2-40fc-4823-99e4-f4a894bd135e\",\n        \"description\": \"Job opening for Full-Stack Developer\",\n        \"benefits\": \"Pet Friendly, Gym Pass, Meal Voucher, Health Plan, Dental Plan\",\n        \"level\": \"Junior\",\n        \"companyEntity\": {\n            \"id\": \"4a56ab16-8c28-44ac-9d62-70df265ec121\",\n            \"name\": \"Generic Company\",\n            \"username\": \"company_user\",\n            \"email\": \"contact@company.com\",\n            \"website\": \"http://www.company.com\",\n            \"description\": \"Innovative technology company\",\n            \"createdAt\": \"2025-03-12T18:45:51.982318\"\n        },\n        \"companyId\": \"4a56ab16-8c28-44ac-9d62-70df265ec121\",\n        \"createdAt\": \"2025-03-12T18:49:15.798243\"\n    }\n]\n```\n\n## 🌐 Front-End\n\nO back-end do **Javagas** se comunica com a aplicação front-end, que é responsável pela interface do usuário e interação com os candidatos e empresas. Você pode acessar o repositório do front-end aqui:\n\n👉 [Javagas Front-End](https://github.com/joschonarth/javagas-web)\n\nA interface permite que candidatos se inscrevam, empresas publiquem vagas e usuários naveguem pelas oportunidades de emprego de forma intuitiva.\n\n### 🧪 Testes\n\nO projeto contém testes utilizando **JUnit** e **Mockito**, com o banco de dados em memória **H2** configurado para rodar os testes em um ambiente isolado.\n\nPara executar os testes, siga as instruções abaixo:\n\n1. Certifique-se de que você tem o **JDK 11 ou superior** instalado.\n2. Abra o terminal e navegue até o diretório raiz do projeto.\n3. Execute o seguinte comando para rodar os testes:\n\n```bash\nmvn test\n```\n\nEste comando irá rodar todos os testes configurados no projeto, utilizando o banco de dados **H2** em memória para garantir que os testes sejam executados em um ambiente isolado e sem afetar os dados de produção.\n\n### 📊 Monitoramento com Prometheus e Grafana  \n\nA aplicação conta com um sistema de **monitoramento contínuo** utilizando **Prometheus** e **Grafana**, proporcionando visibilidade sobre métricas essenciais, como uso de recursos, tempo de resposta e status da API.  \n\n- **Prometheus** é responsável pela coleta e armazenamento das métricas expostas pela aplicação através do endpoint [`http://localhost:8080/actuator/prometheus`](http://localhost:8080/actuator/prometheus).  \n- **Grafana** permite a visualização dessas métricas em **dashboards interativos**, facilitando a análise de desempenho e detecção de problemas.  \n\nPara iniciar os serviços de monitoramento, basta executar o seguinte comando na raiz do projeto:  \n\n```bash\ndocker-compose up -d\n```\n\nApós a execução, os serviços estarão disponíveis nos seguintes endereços:  \n\n- **Prometheus**: [`http://localhost:9090`](http://localhost:9090)  \n- **Grafana**: [`http://localhost:3000`](http://localhost:3000) (Login padrão: `admin` / `admin`)  \n\nCom isso, você pode monitorar o desempenho da API em tempo real e configurar **dashboards personalizados** no Grafana conforme necessário.\n\n## ⚙️ GitHub Actions\n\nO projeto utiliza o **GitHub Actions** para automação do processo de build e deploy. Sempre que um novo commit é enviado para a branch `main`, o pipeline é acionado para realizar as seguintes etapas:\n\n- **Checkout do código**: Obtém a versão mais recente do repositório.  \n- **Configuração do ambiente**: Instalação do Java 17 e do Maven.  \n- **Build do projeto**: Executa `mvn clean install` para compilar e validar o código.  \n- **Autenticação no Docker Hub**: Login utilizando as credenciais armazenadas nos `secrets`.  \n- **Criação da imagem Docker**: Gera uma imagem Docker do projeto.  \n- **Publicação da imagem**: Faz o push da imagem para o Docker Hub.\n\nEssa automação garante que o código esteja sempre atualizado e pronto para ser implantado de forma contínua. 🚀\n\n## 🤝 Contribuições\n\nContribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests com melhorias ou correções.\n\n## 📞 Contato\n\n[![LinkedIn](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge\u0026logo=linkedin\u0026logoColor=white)](https://www.linkedin.com/in/joschonarth/)\n[![Gmail](https://img.shields.io/badge/Gmail-D14836?style=for-the-badge\u0026logo=gmail\u0026logoColor=white)](mailto:joschonarth@gmail.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoschonarth%2Fjavagas-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoschonarth%2Fjavagas-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoschonarth%2Fjavagas-server/lists"}