package main import ( "log" "os" "os/exec" "strings" "github.com/aziis98/lupus-lite/auth" "github.com/aziis98/lupus-lite/database" "github.com/aziis98/lupus-lite/handlers" "github.com/aziis98/lupus-lite/routes" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/logger" "github.com/gofiber/fiber/v2/middleware/recover" "github.com/gofiber/websocket/v2" ) func main() { mode := os.Getenv("MODE") app := fiber.New() db, err := database.NewInMemoryDB() if err != nil { panic(err) } h := handlers.NewServer(db, auth.NewInMemoryAuthService) app.Use(logger.New()) app.Use(recover.New()) // Static files app.Static("/", "./_frontend/dist") // Enable WebSocket on routes ending with "/ws" app.Use("/*/ws", func(c *fiber.Ctx) error { log.Printf("Upgrading to websocket connection") if websocket.IsWebSocketUpgrade(c) { c.Locals("allowed", true) return c.Next() } return fiber.ErrUpgradeRequired }) // // Routes // app.Route("/", func(r fiber.Router) { routes.PageRoutes(r, h) }) app.Route("/api", func(r fiber.Router) { routes.ApiRoutes(r, h) }) // // Starting the server // if strings.HasPrefix(mode, "dev") { log.Printf(`Running dev server for frontend: "npm run dev"`) err := exec.Command("sh", "-c", "cd _frontend/ && npm run dev").Start() if err != nil { log.Fatal(err) } } log.Fatal(app.Listen(":4000")) }