66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
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()
|
|
}
|