diff --git a/cmd/server/main.go b/cmd/server/main.go index e7f0b1c..3f94ffe 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -2,16 +2,17 @@ package main import ( "log/slog" - "orbits-server/internal/api" - "orbits-server/internal/database" - "orbits-server/internal/utility" + "orbits-server/internal/server/api" + "orbits-server/internal/server/bootstrap" + "orbits-server/internal/server/database" + "orbits-server/internal/shared/utility" "os" ) func main() { // grab the environment variables from the runtime environment // unfortunately since its before we configure the loglevel, we cannot use slog logging in those functions - env := utility.GrabEnvironment() + env := bootstrap.GrabEnvironment() // configure the logger so we have nice json level := utility.ParseSlogLevel(env.LogLevel) // defaults to Info logger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{ @@ -26,7 +27,7 @@ func main() { // checking directories to ensure its expected environment is ready slog.Debug("checking if directories are present") - if err := utility.EnsureOperation(env.DataDirectory); err != nil { + if err := bootstrap.EnsureOperation(env.DataDirectory); err != nil { slog.Error("failed to ensure the operating environment", "error", err) os.Exit(1) } diff --git a/internal/client/client.go b/internal/client/client.go new file mode 100644 index 0000000..9327a83 --- /dev/null +++ b/internal/client/client.go @@ -0,0 +1 @@ +package client diff --git a/internal/api/api.go b/internal/server/api/api.go similarity index 80% rename from internal/api/api.go rename to internal/server/api/api.go index 752b972..1d067a1 100644 --- a/internal/api/api.go +++ b/internal/server/api/api.go @@ -4,9 +4,9 @@ import ( "fmt" "log/slog" - "orbits-server/internal/api/middleware" - "orbits-server/internal/api/routes" - "orbits-server/internal/utility" + "orbits-server/internal/server/api/middleware" + "orbits-server/internal/server/api/routes" + "orbits-server/internal/server/bootstrap" "github.com/gin-gonic/gin" "gorm.io/gorm" @@ -15,7 +15,7 @@ import ( // All error messages from slog must have an error field with the golang error // See bottom the the kickoff function for details -func KickoffApi(logger *slog.Logger, env utility.Environment, db *gorm.DB) { +func KickoffApi(logger *slog.Logger, env bootstrap.Environment, db *gorm.DB) { gin.SetMode(gin.ReleaseMode) // For a nice looking logger: diff --git a/internal/api/middleware/middleware.go b/internal/server/api/middleware/middleware.go similarity index 96% rename from internal/api/middleware/middleware.go rename to internal/server/api/middleware/middleware.go index da1b91e..3f36593 100644 --- a/internal/api/middleware/middleware.go +++ b/internal/server/api/middleware/middleware.go @@ -3,7 +3,7 @@ package middleware import ( "log/slog" "net/http" - "orbits-server/internal/api/response" + "orbits-server/internal/server/api/response" "strings" "time" diff --git a/internal/api/response/response.go b/internal/server/api/response/response.go similarity index 100% rename from internal/api/response/response.go rename to internal/server/api/response/response.go diff --git a/internal/api/routes/api.go b/internal/server/api/routes/api.go similarity index 92% rename from internal/api/routes/api.go rename to internal/server/api/routes/api.go index e5bafb8..f027151 100644 --- a/internal/api/routes/api.go +++ b/internal/server/api/routes/api.go @@ -3,8 +3,8 @@ package routes import ( "log/slog" "net/http" - "orbits-server/internal/api/response" - "orbits-server/internal/database" + "orbits-server/internal/server/api/response" + "orbits-server/internal/server/database" "github.com/gin-gonic/gin" "gorm.io/gorm" diff --git a/internal/api/routes/file.go b/internal/server/api/routes/file.go similarity index 90% rename from internal/api/routes/file.go rename to internal/server/api/routes/file.go index 5468459..87852e4 100644 --- a/internal/api/routes/file.go +++ b/internal/server/api/routes/file.go @@ -4,16 +4,16 @@ import ( "errors" "log/slog" "net/http" - "orbits-server/internal/api/response" - "orbits-server/internal/database" - "orbits-server/internal/utility" + "orbits-server/internal/server/api/response" + "orbits-server/internal/server/bootstrap" + "orbits-server/internal/server/database" "path/filepath" "github.com/gin-gonic/gin" "gorm.io/gorm" ) -func RegisterFileRoutes(file *gin.RouterGroup, env utility.Environment, db *gorm.DB) { +func RegisterFileRoutes(file *gin.RouterGroup, env bootstrap.Environment, db *gorm.DB) { // /file/ file.GET("/:filename", func(c *gin.Context) { f := c.Param("filename") diff --git a/internal/utility/environment.go b/internal/server/bootstrap/environment.go similarity index 87% rename from internal/utility/environment.go rename to internal/server/bootstrap/environment.go index f2154e2..1e71374 100644 --- a/internal/utility/environment.go +++ b/internal/server/bootstrap/environment.go @@ -1,12 +1,10 @@ -package utility +package bootstrap import ( - "log/slog" "os" "path/filepath" "slices" "strconv" - "strings" ) type Environment struct { @@ -98,18 +96,3 @@ func GrabEnvironment() Environment { WatchdogSyncMode: safeStringGrab("WATCHDOG_SYNC_MODE", "strict"), } } - -func ParseSlogLevel(s string) slog.Level { - switch strings.ToLower(s) { - case "debug": - return slog.LevelDebug - case "warn", "warning": - return slog.LevelWarn - case "error": - return slog.LevelError - case "info": - fallthrough - default: - return slog.LevelInfo - } -} diff --git a/internal/utility/filesystem.go b/internal/server/bootstrap/filesystem.go similarity index 72% rename from internal/utility/filesystem.go rename to internal/server/bootstrap/filesystem.go index 127e9b9..4d103af 100644 --- a/internal/utility/filesystem.go +++ b/internal/server/bootstrap/filesystem.go @@ -1,4 +1,4 @@ -package utility +package bootstrap import ( "os" @@ -21,12 +21,3 @@ func EnsureOperation(workDir string) error { return nil } - -func RemoveFile(p string) error { - err := os.Remove(p) - if err != nil { - return err - } - - return nil -} diff --git a/internal/database/database.go b/internal/server/database/database.go similarity index 91% rename from internal/database/database.go rename to internal/server/database/database.go index 49e0e88..874a511 100644 --- a/internal/database/database.go +++ b/internal/server/database/database.go @@ -1,7 +1,7 @@ package database import ( - "orbits-server/internal/utility" + "orbits-server/internal/server/bootstrap" "path/filepath" "time" @@ -43,7 +43,7 @@ func KickoffDatabase(workDir string) (*gorm.DB, error) { return db, nil } -func KickoffDatabaseWatchdog(env utility.Environment, db *gorm.DB) { +func KickoffDatabaseWatchdog(env bootstrap.Environment, db *gorm.DB) { timeInterval := time.Second * time.Duration(env.WatchdogInterval) ticker := time.NewTicker(timeInterval) diff --git a/internal/database/define.go b/internal/server/database/define.go similarity index 100% rename from internal/database/define.go rename to internal/server/database/define.go diff --git a/internal/database/functions.go b/internal/server/database/functions.go similarity index 97% rename from internal/database/functions.go rename to internal/server/database/functions.go index adeb008..400a5ff 100644 --- a/internal/database/functions.go +++ b/internal/server/database/functions.go @@ -4,7 +4,7 @@ import ( "fmt" "io" "log/slog" - "orbits-server/internal/utility" + "orbits-server/internal/shared/utility" "path/filepath" "github.com/google/uuid" diff --git a/internal/database/watchdog.go b/internal/server/database/watchdog.go similarity index 93% rename from internal/database/watchdog.go rename to internal/server/database/watchdog.go index de3038d..6af4eb4 100644 --- a/internal/database/watchdog.go +++ b/internal/server/database/watchdog.go @@ -3,14 +3,15 @@ package database import ( "errors" "log/slog" - "orbits-server/internal/utility" + "orbits-server/internal/server/bootstrap" + "orbits-server/internal/shared/utility" "os" "path/filepath" "gorm.io/gorm" ) -func filesystemGather(env utility.Environment) (map[string]struct{}, error) { +func filesystemGather(env bootstrap.Environment) (map[string]struct{}, error) { fsFiles, err := os.ReadDir(env.ContentDirectory) if err != nil { slog.Error("failed to read the content directory on the filesystem", "error", err) @@ -44,7 +45,7 @@ func databaseGather(db *gorm.DB) (map[string]File, error) { return dbSet, nil } -func watchdog(env utility.Environment, db *gorm.DB) { +func watchdog(env bootstrap.Environment, db *gorm.DB) { slog.Debug("performing the watchdog cycle") fsSet, err := filesystemGather(env) diff --git a/internal/utility/hash.go b/internal/shared/utility/hash.go similarity index 100% rename from internal/utility/hash.go rename to internal/shared/utility/hash.go diff --git a/internal/shared/utility/utility.go b/internal/shared/utility/utility.go new file mode 100644 index 0000000..8cbe95f --- /dev/null +++ b/internal/shared/utility/utility.go @@ -0,0 +1,31 @@ +package utility + +import ( + "log/slog" + "os" + "strings" +) + +func RemoveFile(p string) error { + err := os.Remove(p) + if err != nil { + return err + } + + return nil +} + +func ParseSlogLevel(s string) slog.Level { + switch strings.ToLower(s) { + case "debug": + return slog.LevelDebug + case "warn", "warning": + return slog.LevelWarn + case "error": + return slog.LevelError + case "info": + fallthrough + default: + return slog.LevelInfo + } +}