From 8488e6f657f8fb67f8663e071ce663a09329761e Mon Sep 17 00:00:00 2001 From: Xeronith Date: Fri, 19 Aug 2022 13:14:39 +0430 Subject: [PATCH] feat: :art: enhance storage and logging factories --- greataped/app/main.go | 6 ++++- greataped/contracts/logger.go | 16 ++++++++----- greataped/contracts/server.go | 1 + greataped/contracts/storage.go | 36 ++++++++++++++++------------- greataped/db/factory.go | 15 ++++++++++++ greataped/go.work | 2 +- greataped/log/factory.go | 1 - greataped/log/go.mod | 3 --- greataped/logging/factory.go | 16 +++++++++++++ greataped/logging/go.mod | 3 +++ greataped/{log => logging}/stdio.go | 2 +- greataped/server/http_server.go | 5 ++++ 12 files changed, 77 insertions(+), 29 deletions(-) delete mode 100644 greataped/log/factory.go delete mode 100644 greataped/log/go.mod create mode 100644 greataped/logging/factory.go create mode 100644 greataped/logging/go.mod rename greataped/{log => logging}/stdio.go (96%) diff --git a/greataped/app/main.go b/greataped/app/main.go index a7e8169..2f343e6 100644 --- a/greataped/app/main.go +++ b/greataped/app/main.go @@ -6,11 +6,14 @@ import ( "config" "db" "fmt" + "logging" "server" ) func main() { - storage := db.NewSqliteStorage() + logger := logging.CreateLogger(logging.StdIOLogger) + + storage := db.CreateStorage(db.SqliteStorage) storage.Connect(config.SQLITE_DB) storage.Migrate( &repos.User{}, @@ -22,6 +25,7 @@ func main() { app := server.New() app.SetStorageProvider(storage) + app.SetLogger(logger) app.Bind( routes.Root, diff --git a/greataped/contracts/logger.go b/greataped/contracts/logger.go index 02242b9..fe56f0a 100644 --- a/greataped/contracts/logger.go +++ b/greataped/contracts/logger.go @@ -1,8 +1,12 @@ package contracts -type ILogger interface { - Info(...any) - Debug(...any) - Error(...any) - Fatal(...any) -} +type ( + LoggerType int + + ILogger interface { + Info(...any) + Debug(...any) + Error(...any) + Fatal(...any) + } +) diff --git a/greataped/contracts/server.go b/greataped/contracts/server.go index 70c1088..d205769 100644 --- a/greataped/contracts/server.go +++ b/greataped/contracts/server.go @@ -91,6 +91,7 @@ type ( Listen(address string) SetStorageProvider(IStorage) + SetLogger(ILogger) } IRouter interface { diff --git a/greataped/contracts/storage.go b/greataped/contracts/storage.go index efe424c..5491dae 100644 --- a/greataped/contracts/storage.go +++ b/greataped/contracts/storage.go @@ -1,20 +1,24 @@ package contracts -type IStorage interface { - // Connect initiate the database connection - Connect(path string) - // Migrate migrates all the database tables - Migrate(...interface{}) error - Prepare(string) IQuery -} +type ( + StorageType int -type IQuery interface { - Param(string) IResult - Params(...string) IResult -} + IStorage interface { + // Connect initiate the database connection + Connect(path string) + // Migrate migrates all the database tables + Migrate(...interface{}) error + Prepare(string) IQuery + } -type IResult interface { - Get(string) any - Set(string, string) - Length() int -} + IQuery interface { + Param(string) IResult + Params(...string) IResult + } + + IResult interface { + Get(string) any + Set(string, string) + Length() int + } +) diff --git a/greataped/db/factory.go b/greataped/db/factory.go index 3a49c63..7bccd3c 100644 --- a/greataped/db/factory.go +++ b/greataped/db/factory.go @@ -1 +1,16 @@ package db + +import "contracts" + +const ( + SqliteStorage contracts.StorageType = 0 +) + +func CreateStorage(componentType contracts.StorageType) contracts.IStorage { + switch componentType { + case SqliteStorage: + return NewSqliteStorage() + default: + panic("unknown_storage_type") + } +} diff --git a/greataped/go.work b/greataped/go.work index 4be41bd..80d0731 100644 --- a/greataped/go.work +++ b/greataped/go.work @@ -6,7 +6,7 @@ use ( ./config ./contracts ./db - ./log + ./logging ./server ./utility ) diff --git a/greataped/log/factory.go b/greataped/log/factory.go deleted file mode 100644 index 7330d54..0000000 --- a/greataped/log/factory.go +++ /dev/null @@ -1 +0,0 @@ -package log diff --git a/greataped/log/go.mod b/greataped/log/go.mod deleted file mode 100644 index 2b8f4aa..0000000 --- a/greataped/log/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module log - -go 1.19 diff --git a/greataped/logging/factory.go b/greataped/logging/factory.go new file mode 100644 index 0000000..a916e98 --- /dev/null +++ b/greataped/logging/factory.go @@ -0,0 +1,16 @@ +package logging + +import "contracts" + +const ( + StdIOLogger contracts.LoggerType = 0 +) + +func CreateLogger(componentType contracts.LoggerType) contracts.ILogger { + switch componentType { + case StdIOLogger: + return New(true) + default: + panic("unknown_logger_type") + } +} diff --git a/greataped/logging/go.mod b/greataped/logging/go.mod new file mode 100644 index 0000000..5d8d970 --- /dev/null +++ b/greataped/logging/go.mod @@ -0,0 +1,3 @@ +module logging + +go 1.19 diff --git a/greataped/log/stdio.go b/greataped/logging/stdio.go similarity index 96% rename from greataped/log/stdio.go rename to greataped/logging/stdio.go index 936b5c3..7359345 100644 --- a/greataped/log/stdio.go +++ b/greataped/logging/stdio.go @@ -1,4 +1,4 @@ -package log +package logging import ( "contracts" diff --git a/greataped/server/http_server.go b/greataped/server/http_server.go index 1f42101..c80b7ce 100644 --- a/greataped/server/http_server.go +++ b/greataped/server/http_server.go @@ -19,6 +19,7 @@ import ( type httpServer struct { framework *fiber.App storage IStorage + logger ILogger } func authorization(c *fiber.Ctx) error { @@ -87,6 +88,10 @@ func (server *httpServer) SetStorageProvider(storage IStorage) { server.storage = storage } +func (server *httpServer) SetLogger(logger ILogger) { + server.logger = logger +} + func (server *httpServer) Bind(routes ...IRoute) { for _, route := range routes { func(route IRoute) {