package main import ( "crowsnest/internal/app" "crowsnest/internal/crawler" "crowsnest/internal/middleware" "crowsnest/internal/model" "crowsnest/internal/model/database" "crowsnest/internal/util" "log" "net/http" _ "github.com/lib/pq" ) func main() { db, err := database.DbConnection() if err != nil { log.Fatal("failed to connect to database due to", err.Error()) } // summarize documents documents := &database.DocumentRepository{DB: db} go documents.Map(func(doc *model.Document) *model.Document { if doc.Summary == "" { summaryText, err := util.Summarize(doc.Content) if err == nil { doc.Summary = summaryText return doc } log.Println(err.Error()) } return doc }) // run web crawlers articles := &database.ArticleRepository{DB: db} crawler := crawler.CrawlerFacade{} crawler.Init() crawler.SubscribeToSpiegelFeed(func(a *model.Article) { articles.Insert(a) }) crawler.SubscribeToZeitFeed(func(a *model.Article) { articles.Insert(a) }) // define app webapp := app.NewApp(db) // create middle stack := middleware.CreateStack( middleware.Logging, ) // start web server server := http.Server{ Addr: ":8080", Handler: stack(webapp.Routes()), } log.Println("server started, listening on :8080") server.ListenAndServe() }