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  }