github.com/jamiefdhurst/journal@v0.9.2/journal.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "log" 6 "net/http" 7 "os" 8 9 "github.com/akrylysov/algnhsa" 10 "github.com/jamiefdhurst/journal/pkg/adapter/giphy" 11 "github.com/jamiefdhurst/journal/pkg/adapter/json" 12 13 "github.com/jamiefdhurst/journal/internal/app" 14 "github.com/jamiefdhurst/journal/internal/app/model" 15 "github.com/jamiefdhurst/journal/internal/app/router" 16 "github.com/jamiefdhurst/journal/pkg/database" 17 ) 18 19 var container *app.Container = &app.Container{} 20 21 func config() app.Configuration { 22 // Define default configuration 23 configuration := app.DefaultConfiguration() 24 app.ApplyEnvConfiguration(&configuration) 25 26 if !configuration.EnableCreate { 27 log.Println("Article creating is disabled...") 28 } 29 if !configuration.EnableEdit { 30 log.Println("Article editing is disabled...") 31 } 32 33 return configuration 34 } 35 36 func loadDatabase() func() { 37 container.Db = &database.Sqlite{} 38 log.Printf("Loading DB from %s...\n", container.Configuration.DatabasePath) 39 if err := container.Db.Connect(container.Configuration.DatabasePath); err != nil { 40 log.Printf("Database error - please verify that the %s path is available and writeable.\nError: %s\n", container.Configuration.DatabasePath, err) 41 os.Exit(1) 42 } 43 44 js := model.Journals{Container: container} 45 if err := js.CreateTable(); err != nil { 46 log.Panicln(err) 47 } 48 49 return func() { 50 container.Db.Close() 51 } 52 } 53 54 func loadGiphy() { 55 giphyAPIKey := os.Getenv("J_GIPHY_API_KEY") 56 if giphyAPIKey != "" { 57 log.Println("Enabling GIPHY client...") 58 container.Giphy = &giphy.Client{APIKey: giphyAPIKey, Client: &json.Client{}} 59 } 60 } 61 62 func main() { 63 const version = "0.9.2" 64 65 // Set CWD 66 os.Chdir(os.Getenv("GOPATH") + "/src/github.com/jamiefdhurst/journal") 67 fmt.Printf("Journal v%s\n-------------------\n\n", version) 68 69 configuration := config() 70 71 // Create/define container 72 container.Configuration = configuration 73 container.Version = version 74 75 closeFunc := loadDatabase() 76 defer closeFunc() 77 loadGiphy() 78 79 router := router.NewRouter(container) 80 81 var err error 82 if lambdaRuntimeApi, _ := os.LookupEnv("AWS_LAMBDA_RUNTIME_API"); lambdaRuntimeApi != "" { 83 log.Printf("Ready for Lambda payload...\n") 84 algnhsa.ListenAndServe(router, nil) 85 } else { 86 server := &http.Server{Addr: ":" + configuration.Port, Handler: router} 87 log.Printf("Ready and listening on port %s...\n", configuration.Port) 88 err = router.StartAndServe(server) 89 } 90 91 if err != nil { 92 log.Fatal("Error reported: ", err) 93 } 94 }