Skip to content

Cardosofiles/vacancy-management-server

Repository files navigation

Vacancy Management Server

Vacancy Management Server é uma aplicação backend desenvolvida em Java com Spring Boot, projetada para gerenciar vagas (vacancies) de forma eficiente, escalável e segura. O projeto utiliza Docker para facilitar o desenvolvimento, testes e deploy, além de integrar um banco de dados PostgreSQL e gerenciamento de dependências via Maven.

✨ Principais Tecnologias

  • Java 17+
  • Spring Boot
  • Maven
  • PostgreSQL
  • Docker & Docker Compose

📦 Estrutura do Projeto

  • Dockerfile: Cria uma imagem enxuta para produção.
  • Dockerfile.dev: Ambiente de desenvolvimento com hot reload.
  • docker-compose.yml: Orquestração dos containers (aplicação + banco de dados).
  • docker-compose.override.yml: Customizações para desenvolvimento local.
  • pom.xml: Gerenciamento de dependências e plugins Maven.
  • src/: Código-fonte da aplicação.

🚀 Como Executar Localmente

Pré-requisitos

1. Clone o repositório

git clone https://github.com/Cardosofiles/vacancy-management-server.git
cd vacancy-management-server

2. Configure variáveis de ambiente (opcional)

Você pode criar um arquivo .env para customizar variáveis como usuário e senha do banco.

3. Suba os containers

Para ambiente de desenvolvimento (hot reload):

docker-compose -f docker-compose.yml -f docker-compose.override.yml up --build

Para ambiente de produção:

docker-compose up --build

A aplicação estará disponível em http://localhost:8080.

4. Rodando testes

docker-compose exec app mvn test

🗄️ Banco de Dados

O serviço PostgreSQL é iniciado automaticamente via Docker Compose. As credenciais padrão podem ser alteradas via variáveis de ambiente.

🛠️ Principais Comandos Maven

  • mvn clean install – Compila e empacota a aplicação.
  • mvn test – Executa os testes automatizados.

🧩 Estrutura de Perfis

O projeto utiliza perfis Spring (dev, prod) para separar configurações de desenvolvimento e produção.

📚 Documentação da API

A documentação dos endpoints pode ser acessada (se habilitada) via /swagger-ui.html após subir a aplicação.

📝 Observações

  • Sinta-se à vontade para clonar, adaptar e contribuir!
  • Recomenda-se o uso de variáveis de ambiente para dados sensíveis.

🔗 Repositório

https://github.com/Cardosofiles/vacancy-management-server


Git Java Spring Boot Maven PostgreSQL Docker
discord-tech-bot/
│
├── src/main/java/com/cardosofiles/discordtechbot/
│ │
│ ├── DiscordTechBotApplication.java ← main() da aplicação
│ │
│ ├── modules/
│ │ └── news/ ← único módulo (igual ao seu src/modules/news)
│ │ │
│ │ ├── domain/ ← regras de negócio puras (Java puro, sem Spring)
│ │ │ ├── FeedItem.java ← entidade: item de notícia de um feed RSS
│ │ │ ├── FeedSource.java ← entidade: fonte RSS (ex: dev.to, hackernews)
│ │ │ ├── ChannelMapping.java ← entidade: mapeamento source → canal Discord
│ │ │ ├── JobRun.java ← entidade: log de execução do cron job
│ │ │ ├── FeedCategory.java ← enum: BACKEND, FRONTEND, DEVOPS, IA, etc.
│ │ │ ├── SourceStatus.java ← enum: ENABLED / DISABLED
│ │ │ └── repository/ ← interfaces (Ports) — sem JPA aqui!
│ │ │ ├── FeedItemRepository.java
│ │ │ ├── FeedSourceRepository.java
│ │ │ ├── ChannelMappingRepository.java
│ │ │ └── JobRunRepository.java
│ │ │
│ │ ├── application/ ← casos de uso (orquestra domain + infra)
│ │ │ ├── IngestFeedsUseCase.java ← busca RSS, salva FeedItems novos (seu ingest-feeds.use-case.ts)
│ │ │ ├── PublishDigestUseCase.java ← monta e envia digest ao Discord (seu publish-digest.use-case.ts)
│ │ │ ├── CleanupOldItemsUseCase.java ← deleta FeedItems antigos (seu cleanup-old-items.use-case.ts)
│ │ │ ├── ListEnabledSourcesUseCase.java ← lista sources ativas (seu list-enabled-sources.use-case.ts)
│ │ │ └── dto/
│ │ │ ├── FeedItemDTO.java ← dados de um item de feed para o digest
│ │ │ ├── DigestPayloadDTO.java ← payload montado para enviar ao Discord
│ │ │ └── SourceDTO.java ← dados de uma fonte RSS
│ │ │
│ │ ├── infrastructure/ ← implementações técnicas (Adapters)
│ │ │ ├── persistence/
│ │ │ │ ├── FeedItemEntity.java ← @Entity JPA da tabela feed_items
│ │ │ │ ├── FeedSourceEntity.java ← @Entity JPA da tabela feed_sources
│ │ │ │ ├── ChannelMappingEntity.java ← @Entity JPA da tabela channel_mappings
│ │ │ │ ├── JobRunEntity.java ← @Entity JPA da tabela job_runs
│ │ │ │ ├── JpaFeedItemRepository.java ← interface Spring Data JPA
│ │ │ │ ├── JpaFeedSourceRepository.java
│ │ │ │ ├── JpaChannelMappingRepository.java
│ │ │ │ ├── JpaJobRunRepository.java
│ │ │ │ ├── FeedItemRepositoryAdapter.java ← implementa Port do domain
│ │ │ │ ├── FeedSourceRepositoryAdapter.java
│ │ │ │ ├── ChannelMappingRepositoryAdapter.java
│ │ │ │ └── JobRunRepositoryAdapter.java
│ │ │ └── feeds/ ← parsers de RSS por source (seu infrastructure/feeds/)
│ │ │ ├── RssFeedParser.java ← parser genérico RSS/Atom com Rome library
│ │ │ ├── DevToFeedParser.java ← parser específico dev.to
│ │ │ ├── HackerNewsFeedParser.java ← parser HackerNews RSS
│ │ │ └── GithubTrendingFeedParser.java
│ │ │
│ │ └── web/ ← controllers REST (admin/healthcheck)
│ │ └── NewsAdminController.java ← GET /news/sources, POST /news/ingest (trigger manual)
│ │
│ └── shared/ ← componentes transversais (seu src/shared/)
│ │
│ ├── config/
│ │ ├── AppConfig.java ← beans gerais (@Configuration)
│ │ ├── SwaggerConfig.java ← SpringDoc/OpenAPI
│ │ └── SchedulingConfig.java ← habilita @EnableScheduling
│ │
│ ├── cron/ ← agendadores (seu shared/cron/)
│ │ └── NewsFeedScheduler.java ← @Scheduled que chama os UseCases
│ │
│ ├── discord/ ← cliente Discord (seu shared/discord/)
│ │ ├── DiscordClientConfig.java ← configura Discord4J com o bot token
│ │ ├── DiscordChannelResolver.java ← resolve channelId pelo nome/categoria (seu channel-resolver.ts)
│ │ └── DiscordMessagePublisher.java ← envia Embed ao canal (usa Discord4J)
│ │
│ ├── http/ ← cliente HTTP (seu shared/http/)
│ │ └── RssHttpClient.java ← WebClient para buscar feeds externos
│ │
│ ├── logger/ ← logging estruturado (seu shared/logger/)
│ │ └── AppLogger.java ← wrapper de SLF4J/Logback com MDC
│ │
│ ├── exception/
│ │ ├── GlobalExceptionHandler.java ← @RestControllerAdvice
│ │ ├── FeedIngestionException.java ← erro ao ingerir feed
│ │ ├── DiscordPublishException.java ← erro ao publicar no Discord
│ │ └── dto/
│ │ └── ErrorResponseDTO.java
│ │
│ └── audit/
│ └── BaseEntity.java ← createdAt, updatedAt para todas as @Entity
│
├── src/main/resources/
│ ├── application.yml ← configurações principais
│ ├── application-local.yml ← variáveis para desenvolvimento local
│ └── db/migration/ ← Flyway (equivalente ao seu /drizzle/)
│ ├── V1**create_feed_sources.sql
│ ├── V2**create_feed_items.sql
│ ├── V3**create_channel_mappings.sql
│ └── V4**create_job_runs.sql
│
├── src/test/java/com/cardosofiles/discordtechbot/
│ ├── modules/news/
│ │ ├── application/
│ │ │ ├── IngestFeedsUseCaseTest.java
│ │ │ └── PublishDigestUseCaseTest.java
│ │ └── infrastructure/
│ │ └── RssFeedParserTest.java
│ └── shared/
│ └── discord/
│ └── DiscordMessagePublisherTest.java
│
├── Dockerfile
├── docker-compose.yml
├── .env.example
└── pom.xml

About

API em Java Spring Boot para gestão de vagas, empresas e candidatos, com endpoints RESTful para cadastro, autenticação, associação e gerenciamento, integrada a banco de dados relacional e com estrutura modular e escalável.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors