refactor: restructure project
This commit is contained in:
parent
1bde2041e1
commit
8215e1f13a
21 changed files with 850 additions and 269 deletions
56
main.go
56
main.go
|
@ -1,45 +1,54 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
api_v1 "git.ar21.de/yolokube/country-geo-locations/api/v1"
|
||||
apiv1 "git.ar21.de/yolokube/country-geo-locations/api/v1"
|
||||
"git.ar21.de/yolokube/country-geo-locations/cfg"
|
||||
"git.ar21.de/yolokube/country-geo-locations/pkg/downloader"
|
||||
"git.ar21.de/yolokube/country-geo-locations/pkg/geoloc"
|
||||
"git.ar21.de/yolokube/country-geo-locations/internal/cache"
|
||||
csvimporter "git.ar21.de/yolokube/country-geo-locations/internal/csv_importer"
|
||||
"git.ar21.de/yolokube/country-geo-locations/internal/database"
|
||||
"git.ar21.de/yolokube/country-geo-locations/internal/downloader"
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/go-chi/chi/v5/middleware"
|
||||
"github.com/go-chi/render"
|
||||
)
|
||||
|
||||
func main() {
|
||||
appSettings := cfg.NewAppSettings()
|
||||
if err := appSettings.Parse(); err != nil {
|
||||
panic(err)
|
||||
cli := cfg.CLI{}
|
||||
appSettings, err := cli.Parse()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
handleGracefulShutdown()
|
||||
|
||||
ctx := downloader.NewContext(appSettings.DataFile, appSettings.DataURL)
|
||||
if !ctx.FileExists() {
|
||||
if err := ctx.Download(); err != nil {
|
||||
panic(err)
|
||||
if downloadErr := ctx.Download(); downloadErr != nil {
|
||||
log.Fatal(downloadErr)
|
||||
}
|
||||
fmt.Printf("Saved file to %s\n", ctx.Filename)
|
||||
log.Printf("saved file to %s\n", ctx.Filename)
|
||||
}
|
||||
|
||||
fmt.Printf("Import data from file...\r")
|
||||
err := geoloc.ImportCSV(appSettings.DataFile)
|
||||
db, err := database.NewDatabase()
|
||||
if err != nil {
|
||||
fmt.Println("Import data from file failed")
|
||||
panic(err)
|
||||
log.Fatal("database creation failed", err)
|
||||
}
|
||||
fmt.Println("Import data from file successful")
|
||||
|
||||
log.Println("importing data from file", appSettings.DataFile)
|
||||
err = csvimporter.ImportCSV(appSettings.DataFile, db)
|
||||
if err != nil {
|
||||
log.Fatal("data Import from file failed", err)
|
||||
}
|
||||
log.Println("imported data from file successful")
|
||||
|
||||
cache := cache.NewCache(appSettings.CacheTTL)
|
||||
lh := apiv1.NewLocationHandler(cache, db)
|
||||
|
||||
r := chi.NewRouter()
|
||||
r.Use(middleware.RequestID)
|
||||
|
@ -47,17 +56,24 @@ func main() {
|
|||
r.Use(middleware.Recoverer)
|
||||
r.Use(render.SetContentType(render.ContentTypeJSON))
|
||||
|
||||
r.Mount("/api/v1", api_v1.ApiRouter())
|
||||
r.Mount("/api/v1", apiv1.NewRouter(lh))
|
||||
|
||||
log.Printf("starting server at %s\n", appSettings.ServerAddress)
|
||||
http.ListenAndServe(appSettings.ServerAddress, r)
|
||||
server := &http.Server{
|
||||
Addr: appSettings.ServerAddress,
|
||||
Handler: r,
|
||||
ReadHeaderTimeout: appSettings.ReadHeaderTimeout,
|
||||
}
|
||||
|
||||
log.Println("starting server at", server.Addr)
|
||||
if err = server.ListenAndServe(); err != nil {
|
||||
log.Panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func handleGracefulShutdown() {
|
||||
var signals = make(chan os.Signal, 1)
|
||||
|
||||
signal.Notify(signals, syscall.SIGTERM)
|
||||
signal.Notify(signals, syscall.SIGINT)
|
||||
signal.Notify(signals, syscall.SIGTERM, syscall.SIGINT)
|
||||
|
||||
go func() {
|
||||
sig := <-signals
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue