Refactor router and storage
* Split and extract data-logic from application level * Move storage to DeeSee package * Move router into internal package * Fix Makefile * Fix documentation * Fix tests
This commit is contained in:
87
cmd/hub/main.go
Normal file
87
cmd/hub/main.go
Normal file
@@ -0,0 +1,87 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/eslider/superherohub/internal/router"
|
||||
"github.com/eslider/superherohub/pkg/deesee/storage"
|
||||
"github.com/eslider/superherohub/pkg/file"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
// main is the entry point of the application
|
||||
func main() {
|
||||
var (
|
||||
dataPath = "data/heros.json" // store to JSON file
|
||||
port = 8080 // Port to serve
|
||||
key = 5 // DeeSee encryption key
|
||||
err error
|
||||
)
|
||||
|
||||
// Create logger
|
||||
logger := log.Default()
|
||||
|
||||
// Get port from environment variable
|
||||
if os.Getenv("PORT") != "" {
|
||||
port, err = strconv.Atoi(os.Getenv("PORT"))
|
||||
if err != nil {
|
||||
logger.Fatalf("Invalid port number: %s", err.Error())
|
||||
}
|
||||
if port < 1 || port > 65535 {
|
||||
logger.Print("Port number must be between 1 and 65535")
|
||||
logger.Fatalf("Invalid port number : %d", port)
|
||||
}
|
||||
}
|
||||
|
||||
// Get key from environment variable
|
||||
if os.Getenv("KEY") != "" {
|
||||
key, err = strconv.Atoi(os.Getenv("KEY"))
|
||||
if err != nil {
|
||||
logger.Fatalf("Invalid key: %s", err.Error())
|
||||
}
|
||||
//if key < 1 || key > 25 {
|
||||
// logger.Print("Key number should be between 1 and 25")
|
||||
// logger.Fatalf("Invalid key number : %d", key)
|
||||
//}
|
||||
}
|
||||
//else {
|
||||
// logger.Fatalf("Key is not set. Please set KEY environment variable.")
|
||||
//}
|
||||
|
||||
// Get data path from environment variable
|
||||
if os.Getenv("DATA_PATH") != "" {
|
||||
dataPath = os.Getenv("DATA_PATH")
|
||||
}
|
||||
|
||||
// Check if data path exists
|
||||
if !file.IsExist(dataPath) {
|
||||
logger.Fatalf("Invalid data path: %s", dataPath)
|
||||
}
|
||||
|
||||
s, err := storage.New(dataPath)
|
||||
|
||||
//heros, err := deesee.Load(dataPath)
|
||||
if err != nil {
|
||||
logger.Fatalf("Invalid data format: %s", dataPath)
|
||||
}
|
||||
|
||||
// Create a new server
|
||||
srv := &http.Server{
|
||||
Addr: fmt.Sprintf(":%d", port), // Define port and address to serve
|
||||
Handler: router.New(s, key, logger).GetHandler(),
|
||||
ErrorLog: logger,
|
||||
ReadTimeout: 240 * time.Second, // Good practice: enforcing timeouts for serving.
|
||||
WriteTimeout: 240 * time.Second, // Good practice: enforcing timeouts for serving.
|
||||
}
|
||||
|
||||
// Log info
|
||||
logger.Printf("Serving on port %d", port)
|
||||
|
||||
// Serve and handle error
|
||||
if err := srv.ListenAndServe(); err != nil {
|
||||
logger.Fatal(err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user