package main import ( "api/config" "api/database" "api/globals" "api/routes" "io" "log" "os" "runtime" "strconv" "strings" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/cors" "github.com/gofiber/fiber/v2/middleware/logger" ) func main() { // Configures log file logFile, err := os.OpenFile("api.log", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666) if err != nil { panic(err) } mw := io.MultiWriter(os.Stdout, logFile) log.SetOutput(mw) log.Println("==================================================================") // Get release type from command line args := os.Args[1:] if len(args) == 0 { log.Println("Missing release type") return } // Load configurations for the release type if !config.LoadConfigurations(args[0]) { log.Printf("Invalid release type: %s\n", args[0]) return } globals.API_VERSION = config.Conf.Version globals.API_RELEASE = strings.ToUpper(config.Configurations.ReleaseType) // Starts process log.Println("Starting API", globals.API_VERSION+" ("+globals.API_RELEASE+")") log.Println("OS:", runtime.GOOS) // Configures Fiber app := fiber.New(fiber.Config{ StrictRouting: false, DisableStartupMessage: true, }) app.Use(logger.New(logger.Config{ Output: logFile, // Use the Lumberjack logger instance Format: "${time} ${ip} - ${status} - ${method} ${path}\n", // Specify log format TimeFormat: "2006/01/02 15:04:05", // Specify the date and time format })) // CORS app.Use(cors.New(cors.Config{ AllowHeaders: "Origin,Content-Type,Accept,Content-Length,Accept-Language,Accept-Encoding,Connection,Access-Control-Allow-Origin,X-API-KEY,Authorization", AllowOrigins: "*", AllowCredentials: true, AllowMethods: "GET,POST,HEAD,PUT,DELETE,PATCH,OPTIONS", })) // Connects to database if err := database.ConnectDB(); err != nil { panic("Could not connect to database") } // Setup routes routes.Setup(app) port := strconv.Itoa(config.Configurations.Data.API_PORT) log.Println("Server started in port " + port) if err = app.Listen(":" + port); err != nil { panic(err) } }