// Copyright 2023 Harran Ali . All rights reserved. // Copyright (c) 2024 Zeni Kim // Use of this source code is governed by MIT-style // license that can be found in the LICENSE file. package main import ( "embed" "log" "os" "path" "git.smarteching.com/goffee/core" "git.smarteching.com/goffee/core/env" "git.smarteching.com/goffee/core/logger" "git.smarteching.com/goffee/cup/config" "github.com/joho/godotenv" "github.com/julienschmidt/httprouter" ) //go:embed all:storage/templates var resources embed.FS // The main function func main() { app := core.New() basePath, err := os.Getwd() runMode := "dev" if len(os.Args) > 1 { if os.Args[1] == "prod" || os.Args[1] == "dev" { runMode = os.Args[1] } } if err != nil { log.Fatal("error getting current working dir") } app.SetBasePath(basePath) app.SetRunMode(runMode) app.MakeDirs("logs", "storage", "storage/sqlite", "tls") // Handle the reading of the .env file if config.GetEnvFileConfig().UseDotEnvFile { envfile := ".env-dev" if runMode == "prod" { envfile = ".env" } envVars, err := godotenv.Read(envfile) if err != nil { log.Fatal("Error loading .env file") } env.SetEnvVars(envVars) } // Handle the logs app.SetLogsDriver(&logger.LogFileDriver{ FilePath: path.Join(basePath, "logs/app.log"), }) app.SetRequestConfig(config.GetRequestConfig()) app.SetGormConfig(config.GetGormConfig()) app.SetCacheConfig(config.GetCacheConfig()) app.Bootstrap() app.RegisterTemplates(resources) registerGlobalHooks() registerRoutes() registerEvents() if config.GetGormConfig().EnableGorm == true { RunAutoMigrations() } app.Run(httprouter.New()) }