jobs-monorepo/services/scraper-hiringcafe/main.go
Elshimy Ziad Magdy Taha cbcf9bdcc7 refactor
2025-12-17 17:42:42 +05:00

70 lines
1.6 KiB
Go

package main
import (
"context"
"log"
"os"
"os/signal"
"syscall"
"github.com/jobs-scraper/internal/pkg/infrastructure"
"github.com/jobs-scraper/libs/repo"
"github.com/jobs-scraper/services/scraper-hiringcafe/models"
"github.com/jobs-scraper/services/scraper-hiringcafe/scraper"
"github.com/joho/godotenv"
)
func main() {
if err := godotenv.Load(".local.env"); err != nil {
log.Println("No .local.env file found, trying .env")
if err := godotenv.Load(); err != nil {
log.Println("No .env file found, using system environment variables")
}
}
// Setup database connection
dbConfig := infrastructure.LoadConfigFromEnv()
db, err := infrastructure.NewConnection(dbConfig)
if err != nil {
log.Fatalf("Error connecting to db: %v", err)
}
defer db.Close()
if err := db.Ping(); err != nil {
log.Fatalf("Error pinging db: %v", err)
}
log.Println("Successfully connected to db")
// Initialize repositories
jobRepo := repo.NewJobRepository(db)
jobDescRepo := repo.NewJobDescriptionRepository(db)
// Example filters - these will be configurable later
filters := models.SearchFilters{
Keywords: "software engineer",
Location: "",
Remote: true,
}
// Create scraper and run
s := scraper.New(jobRepo, jobDescRepo)
// Handle graceful shutdown
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
go func() {
<-sigChan
log.Println("Received shutdown signal, cleaning up...")
cancel()
}()
if err := s.Scrape(ctx, filters); err != nil {
log.Printf("Error scraping: %v", err)
}
log.Println("Scraper finished")
}