diff --git a/.gitignore b/.gitignore index 24efaf9..078877e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ node_modules frontend/dist build +backend/.env +backend/plan diff --git a/backend/go.mod b/backend/go.mod index d41a883..0e6c440 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -1,3 +1,5 @@ module grapher-backend go 1.23.2 + +require github.com/joho/godotenv v1.5.1 diff --git a/backend/go.sum b/backend/go.sum new file mode 100644 index 0000000..d61b19e --- /dev/null +++ b/backend/go.sum @@ -0,0 +1,2 @@ +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= diff --git a/backend/main.go b/backend/main.go index e69de29..0098a9b 100644 --- a/backend/main.go +++ b/backend/main.go @@ -0,0 +1,43 @@ +package main + +import ( + "flag" + "fmt" + "io" + "log" + "os" +) + +var Error *log.Logger +var Warning *log.Logger +func init() { + log.SetFlags(log.Lmicroseconds | log.Lshortfile) + logFile, err := os.Create("main.log") + if err != nil { + log.Printf("Error creating log file: %v", err) + return + } + logger := io.MultiWriter(os.Stdout, logFile) + log.SetOutput(logger) + + Error = log.New(io.MultiWriter(logFile, os.Stderr, os.Stdout), + fmt.Sprintf("%sERROR:%s ", "\033[0;101m", "\033[0m"), + log.Lmicroseconds|log.Lshortfile) + Warning = log.New(io.MultiWriter(logFile, os.Stdout), + fmt.Sprintf("%sWarning:%s ", "\033[0;93m", "\033[0m"), + log.Lmicroseconds|log.Lshortfile) +} + +var env map[string]string + +func main() { + envfile := flag.String("envfile", ".env", "") + flag.Parse() + + var err error + env, err = LoadEnv(*envfile) + if err != nil { + Error.Printf("Error leading env file: %v", err) + return + } +} \ No newline at end of file diff --git a/backend/utils.go b/backend/utils.go new file mode 100644 index 0000000..7fb29af --- /dev/null +++ b/backend/utils.go @@ -0,0 +1,30 @@ +package main + +import ( + "fmt" + "log" + "os" + "path/filepath" + + "github.com/joho/godotenv" +) + +func LoadEnv(fpath string) (map[string]string, error) { + res := make(map[string]string) + + fpath = filepath.Clean(fpath) + log.Printf("Trying to open env file at '%s'", fpath) + + file, err := os.Open(fpath) + if err != nil { + return res, fmt.Errorf("error opening env file: %w", err) + } + defer file.Close() + + res, err = godotenv.Parse(file) + if err != nil { + return res, fmt.Errorf("error parsing env file: %w", err) + } + + return res, nil +}