package main import ( "context" "log" "net/http" "os" "github.com/joho/godotenv" "github.com/mrhid6/go-mongoose/mongoose" ) const ( collectionName = "tasks" ) // Task statuses const ( StatusPending = "pending" StatusLeased = "leased" StatusDone = "done" ) func main() { godotenv.Load() ctx := context.Background() mc, err := mongoose.NewMongoClient(ctx, mongoose.GetConnectionOptionsFromEnv()) if err != nil { log.Fatalf("mongo connect: %v", err) } col := mc.GetCollection(collectionName) s := &Server{mc: mc, col: col} if err := s.ensureIndexes(ctx); err != nil { log.Fatalf("ensure indexes: %v", err) } http.HandleFunc("/enqueue", s.handleEnqueue) http.HandleFunc("/pop", s.handlePop) http.HandleFunc("/complete", s.handleComplete) http.HandleFunc("/extend", s.handleExtend) http.HandleFunc("/requeue", s.handleRequeue) addr := os.Getenv("HTTP_BIND") log.Printf("task queue API listening on %s", addr) log.Fatal(http.ListenAndServe(addr, nil)) }