84 lines
1.7 KiB
Go
84 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"strconv"
|
|
"syscall"
|
|
"time"
|
|
|
|
"git.kling.dev/jared/WorkoutTrackerAPI/internal/database"
|
|
"git.kling.dev/jared/WorkoutTrackerAPI/internal/server"
|
|
)
|
|
|
|
func main() {
|
|
dbHost := os.Getenv("DB_HOST")
|
|
dbPort := os.Getenv("DB_PORT")
|
|
dbUser := os.Getenv("DB_USER")
|
|
dbPassword := os.Getenv("DB_PASSWORD")
|
|
dbName := os.Getenv("DB_NAME")
|
|
webPort := os.Getenv("PORT")
|
|
|
|
if dbHost == "" || dbPort == "" || dbUser == "" || dbPassword == "" || dbName == "" {
|
|
log.Fatal("Not all database params are set")
|
|
}
|
|
dbPortParsed, err := strconv.ParseInt(dbPort, 10, 64)
|
|
if err != nil {
|
|
log.Fatal("Unable to parse db port to an int")
|
|
}
|
|
|
|
if webPort == "" {
|
|
webPort = "8080"
|
|
}
|
|
webPortParsed, err := strconv.ParseInt(webPort, 10, 64)
|
|
if err != nil {
|
|
log.Fatal("Unable to parse web port to an int")
|
|
}
|
|
|
|
dbConn, err := database.NewConnection(database.Config{
|
|
Host: dbHost,
|
|
Port: int(dbPortParsed),
|
|
User: dbUser,
|
|
Password: dbPassword,
|
|
DBName: dbName,
|
|
})
|
|
|
|
if err != nil {
|
|
log.Fatal("Failed to connect to database: ", err)
|
|
}
|
|
|
|
defer dbConn.Close()
|
|
|
|
jwtSecret := os.Getenv("JWT_SECRET")
|
|
|
|
if jwtSecret == "" {
|
|
log.Fatal("Unable to determine the JWT_SECRET")
|
|
}
|
|
|
|
s := server.NewServer(dbConn, jwtSecret)
|
|
|
|
go func() {
|
|
fmt.Printf("Server listening on port %d\n", webPortParsed)
|
|
webAddr := fmt.Sprintf(":%d", webPortParsed)
|
|
s.Start(webAddr)
|
|
}()
|
|
|
|
quit := make(chan os.Signal, 1)
|
|
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
|
|
<-quit
|
|
|
|
log.Println("Shutting down server...")
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
|
|
defer cancel()
|
|
|
|
if err := s.Shutdown(ctx); err != nil {
|
|
log.Fatal("Server forced to shutdown:", err)
|
|
}
|
|
|
|
log.Println("Server exited")
|
|
}
|