From 44edb080d80dd1235637e93deea81f2243a21911 Mon Sep 17 00:00:00 2001 From: Piotr Biernat Date: Fri, 24 Oct 2025 10:25:38 +0200 Subject: [PATCH] Refacotor: Added repository interface to cover UserRepository dependency --- src/common/app.go | 11 ---- src/common/config.go | 47 +++++++--------- src/common/interface.go | 14 +++++ src/common/plugins.go | 13 +++-- src/go.mod | 3 +- src/go.sum | 20 +++++-- src/infra/repository/interface.go | 6 ++- src/infra/repository/url_access_repository.go | 2 + src/infra/repository/user_repository.go | 54 ++++++++++++------- src/internal/server/access_handler.go | 1 + src/internal/server/health_handler.go | 2 - src/internal/server/login_handler.go | 8 +-- src/internal/server/server.go | 3 +- src/internal/service/auth.go | 4 +- src/internal/ui/access_action.go | 7 ++- 15 files changed, 112 insertions(+), 83 deletions(-) create mode 100644 src/common/interface.go diff --git a/src/common/app.go b/src/common/app.go index 9c89d72..bcd92f1 100644 --- a/src/common/app.go +++ b/src/common/app.go @@ -9,17 +9,6 @@ import ( ) type ( - Doer interface { - Start() error - RegisterHandler(string, func() any) - OnShutdown() - } - Application interface { - Start(while chan struct{}) - RegisterPlugin(PluginFn) error - Shutdown() - } - App struct { doer Doer } diff --git a/src/common/config.go b/src/common/config.go index 4afc35d..e8dbe80 100644 --- a/src/common/config.go +++ b/src/common/config.go @@ -9,38 +9,33 @@ import ( ) const ( - defName = "identity-svc" - defDomain = "identity-svc" - defCacheAddr = "api-cache:6379" - defCacheUsername = "default" - defCachePassword = "12345678" - defDbURL = "postgres://postgres:12345678@db-postgres:5432/egommerce" - defNetAddr = ":443" - defMongoDbURL = "mongodb://mongodb:12345678@mongo-db:27017" - defPathPrefix = "/identity" - defEbEventsExchange = "api-events" - defEbEventsQueue = "identity-svc" + defName = "identity-svc" + defNetAddr = ":443" + defDomain = "identity-svc" + defCacheAddr = "api-cache:6379" + defCacheUsername = "default" + defCachePassword = "12345678" + defDbURL = "postgres://postgres:12345678@db-postgres:5432/egommerce" + defMongoDbURL = "mongodb://mongodb:12345678@db-mongo:27017" + // defEventBusExchange = "api-events" + // defEventBusQueue = "identity-svc" ) type Config struct { - ID string - Name string - Domain string - NetAddr string - PathPrefix string + ID string + Name string + Domain string + NetAddr string IdleTimeout time.Duration // miliseconds ReadTimeout time.Duration // miliseconds WriteTimeout time.Duration // miliseconds - DbURL string `json:"db_url"` - CacheAddr string `json:"cache_addr"` - CacheUsername string `json:"cache_username"` - CachePassword string `json:"cache_password"` - MongoDbUrl string `json:"mongodb_url"` - EventBusURL string `json:"eventbus_url"` - EventBusExchange string `json:"eventbus_exchange"` - EventBusQueue string `json:"eventbus_queue"` + DbURL string `json:"db_url"` + CacheAddr string `json:"cache_addr"` + CacheUsername string `json:"cache_username"` + CachePassword string `json:"cache_password"` + MongoDbUrl string `json:"mongodb_url"` } func NewConfig(name string) *Config { @@ -54,7 +49,6 @@ func NewConfig(name string) *Config { c.CacheUsername = cnf.GetEnv("API_CACHE_USERNAME", defCacheUsername) c.CachePassword = cnf.GetEnv("API_CACHE_PASSWORD", defCachePassword) c.DbURL = cnf.GetEnv("API_DATABASE_URL", defDbURL) - c.PathPrefix = cnf.GetEnv("APP_PATH_PREFIX", defPathPrefix) return c } @@ -70,13 +64,10 @@ func (c *Config) GetArray() map[string]string { // FIXME fix types etc arr["appFullname"] = c.GetAppFullName() arr["domain"] = c.Domain arr["netAddr"] = c.NetAddr - arr["pathPrefix"] = c.PathPrefix arr["cacheAddr"] = c.CacheAddr arr["cacheUsername"] = c.CacheUsername arr["cachePassword"] = c.CachePassword arr["dbURL"] = c.DbURL - arr["eventBusExchange"] = c.EventBusExchange - arr["eventBusURL"] = c.EventBusURL return arr } diff --git a/src/common/interface.go b/src/common/interface.go new file mode 100644 index 0000000..5aa349c --- /dev/null +++ b/src/common/interface.go @@ -0,0 +1,14 @@ +package common + +type ( + Doer interface { + Start() error + RegisterHandler(string, func() any) + OnShutdown() + } + Application interface { + Start(while chan struct{}) + RegisterPlugin(PluginFn) error + Shutdown() + } +) diff --git a/src/common/plugins.go b/src/common/plugins.go index 97e21a6..9ad4c4c 100644 --- a/src/common/plugins.go +++ b/src/common/plugins.go @@ -1,9 +1,12 @@ package common import ( + "log" + "os" "time" db "git.ego.freeddns.org/egommerce/go-api-pkg/database" + redis "github.com/go-redis/redis/v8" ) @@ -34,11 +37,11 @@ func DatabasePlugin(cArr map[string]string) Plugin { return Plugin{ name: "database", fn: func() any { - dbConn, _ := db.Connect(cArr["dbURL"]) - // if err != nil { - // log.Fatalf("Failed to connect to the Database: %s. Err: %v\n", cArr["dbURL"], err) - // os.Exit(1) - // } + dbConn, err := db.Connect(cArr["dbURL"]) + if err != nil { + log.Fatalf("Failed to connect to the Database: %s. Err: %v\n", cArr["dbURL"], err) + os.Exit(1) + } return dbConn }, diff --git a/src/go.mod b/src/go.mod index ca60674..453b8ad 100644 --- a/src/go.mod +++ b/src/go.mod @@ -5,8 +5,9 @@ go 1.24.0 toolchain go1.24.1 require ( - git.ego.freeddns.org/egommerce/api-entities v0.3.20 + git.ego.freeddns.org/egommerce/api-entities v0.3.34 git.ego.freeddns.org/egommerce/go-api-pkg v0.4.9 + github.com/georgysavva/scany/v2 v2.1.4 github.com/go-pg/migrations/v8 v8.1.0 github.com/go-pg/pg/v10 v10.15.0 github.com/go-redis/redis/v8 v8.11.5 diff --git a/src/go.sum b/src/go.sum index dc8feb1..c42a828 100644 --- a/src/go.sum +++ b/src/go.sum @@ -1,6 +1,6 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -git.ego.freeddns.org/egommerce/api-entities v0.3.20 h1:CSxwbfsd2zYzwT985f3GaP6sTDXSwf3tq6GOQQ/MdHA= -git.ego.freeddns.org/egommerce/api-entities v0.3.20/go.mod h1:IqynARw+06GOm4eZGZuepmbi7bUxWBnOB4jd5cI7jf8= +git.ego.freeddns.org/egommerce/api-entities v0.3.34 h1:WftM9cvV3JmbS1DlHCIiV3tsYIpALj9IXo90mkgZNWQ= +git.ego.freeddns.org/egommerce/api-entities v0.3.34/go.mod h1:IqynARw+06GOm4eZGZuepmbi7bUxWBnOB4jd5cI7jf8= git.ego.freeddns.org/egommerce/go-api-pkg v0.4.9 h1:Y9MisGDhl/ti4gsegl9MC7KoY2aHuyA0LvIESPoiPkE= git.ego.freeddns.org/egommerce/go-api-pkg v0.4.9/go.mod h1:Q4onxocNdFhzD9QnQK3ubd68chbJPexjDraEHoIEN3Y= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -14,6 +14,8 @@ github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/clipperhouse/uax29/v2 v2.2.0 h1:ChwIKnQN3kcZteTXMgb1wztSgaU+ZemkgWdohwgs8tY= github.com/clipperhouse/uax29/v2 v2.2.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM= +github.com/cockroachdb/cockroach-go/v2 v2.2.0 h1:/5znzg5n373N/3ESjHF5SMLxiW4RKB05Ql//KWfeTFs= +github.com/cockroachdb/cockroach-go/v2 v2.2.0/go.mod h1:u3MiKYGupPPjkn3ozknpMUpxPaNLTFWAya419/zv6eI= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -27,6 +29,8 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/georgysavva/scany/v2 v2.1.4 h1:nrzHEJ4oQVRoiKmocRqA1IyGOmM/GQOEsg9UjMR5Ip4= +github.com/georgysavva/scany/v2 v2.1.4/go.mod h1:fqp9yHZzM/PFVa3/rYEC57VmDx+KDch0LoqrJzkvtos= github.com/go-pg/migrations/v8 v8.1.0 h1:bc1wQwFoWRKvLdluXCRFRkeaw9xDU4qJ63uCAagh66w= github.com/go-pg/migrations/v8 v8.1.0/go.mod h1:o+CN1u572XHphEHZyK6tqyg2GDkRvL2bIoLNyGIewus= github.com/go-pg/pg/v10 v10.4.0/go.mod h1:BfgPoQnD2wXNd986RYEHzikqv9iE875PrFaZ9vXvtNM= @@ -40,6 +44,8 @@ github.com/gofiber/contrib/jwt v1.1.2 h1:GmWnOqT4A15EkA8IPXwSpvNUXZR4u5SMj+geBmy github.com/gofiber/contrib/jwt v1.1.2/go.mod h1:CpIwrkUQ3Q6IP8y9n3f0wP9bOnSKx39EDp2fBVgMFVk= github.com/gofiber/fiber/v2 v2.52.9 h1:YjKl5DOiyP3j0mO61u3NTmK7or8GzzWzCFzkboyP5cw= github.com/gofiber/fiber/v2 v2.52.9/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw= +github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= @@ -88,6 +94,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/lib/pq v1.10.0 h1:Zx5DJFEYQXio93kgXnQ09fXNiUKsqv4OUEu2UtGcB1E= +github.com/lib/pq v1.10.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= @@ -111,6 +119,8 @@ github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDs github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -119,12 +129,14 @@ github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/f github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc h1:9lRDQMhESg+zvGYmW5DyG0UqvY96Bu5QYsTLvCHdrgo= github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc/go.mod h1:bciPuU6GHm1iF1pBvUfxfsH0Wmnc2VbpgvbI9ZWuIRs= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= diff --git a/src/infra/repository/interface.go b/src/infra/repository/interface.go index ab0268d..550e6b7 100644 --- a/src/infra/repository/interface.go +++ b/src/infra/repository/interface.go @@ -2,9 +2,11 @@ package repository import entity "git.ego.freeddns.org/egommerce/api-entities/identity/entity" -type RepositoryInterface interface { +type UserRepositoryInterface interface { + FindAll() ([]entity.User, error) FindByID(id string) (*entity.User, error) - Create(user *entity.User) (*entity.User, error) + FindByUsername(login string) (*entity.User, error) + Create(user *entity.User) (string, error) Update(user *entity.User) (*entity.User, error) Delete(id int64) (bool, error) } diff --git a/src/infra/repository/url_access_repository.go b/src/infra/repository/url_access_repository.go index c07abb0..cfef0eb 100644 --- a/src/infra/repository/url_access_repository.go +++ b/src/infra/repository/url_access_repository.go @@ -6,6 +6,7 @@ import ( "fmt" entity "git.ego.freeddns.org/egommerce/api-entities/identity/entity" + "git.ego.freeddns.org/egommerce/go-api-pkg/database" "github.com/jackc/pgx/v5/pgxpool" @@ -86,6 +87,7 @@ func (r *URLAccessRepository) FindByURLAndServiceForRole(url, service, role stri err := r.db.QueryRow(context.Background(), sql, url, service). Scan(&entity.ID, &entity.Roles, &entity.URL, &entity.Service) if err != nil { + fmt.Println(sql, url, service, role) if err = database.NoRowsInQuerySet(err); err != nil { return nil, errors.New("no url found for: " + url + " and role: " + role) } diff --git a/src/infra/repository/user_repository.go b/src/infra/repository/user_repository.go index 4fe59b0..942721d 100644 --- a/src/infra/repository/user_repository.go +++ b/src/infra/repository/user_repository.go @@ -5,8 +5,10 @@ import ( "errors" entity "git.ego.freeddns.org/egommerce/api-entities/identity/entity" + db "git.ego.freeddns.org/egommerce/go-api-pkg/database" + "github.com/georgysavva/scany/v2/pgxscan" "github.com/jackc/pgx/v5/pgxpool" ) @@ -18,17 +20,44 @@ func NewUserRepository(db *pgxpool.Pool) *UserRepository { return &UserRepository{db} } -func (r *UserRepository) FindByID(id string) (*entity.User, error) { - var user entity.User +func (r *UserRepository) FindAll() ([]entity.User, error) { + users := []entity.User{} - sql := `SELECT id, username, password, email, created_at FROM identity.users WHERE id=$1 LIMIT 1` - err := r.db.QueryRow(context.Background(), sql, id). - Scan(&user.ID, &user.Username, &user.Password, &user.Email, &user.CreatedAt) + sql := `SELECT id, username, password, email, created_at, updated_at FROM identity.users` + rows, err := r.db.Query(context.Background(), sql) + if err != nil { + return nil, err + } + + if err := pgxscan.ScanAll(&users, rows); err != nil { + return nil, err + } + + return users, nil +} + +func (r *UserRepository) FindByID(id string) (*entity.User, error) { + user := new(entity.User) + + sql := `SELECT id, username, password, email, created_at, updated_at FROM identity.users WHERE id=$1 LIMIT 1` + err := pgxscan.Get(context.Background(), r.db, user, sql, id) if err != nil { return nil, errors.New("failed to fetch user from DB: " + err.Error()) } - return &user, nil + return user, nil +} + +func (r *UserRepository) FindByUsername(login string) (*entity.User, error) { + user := new(entity.User) + + sql := `SELECT id, username, password, email, created_at, updated_at FROM identity.users WHERE username=$1 LIMIT 1` + err := pgxscan.Get(context.Background(), r.db, user, sql, login) + if err != nil { + return nil, errors.New("failed to fetch user from DB: " + err.Error()) + } + + return user, nil } func (r *UserRepository) Create(user *entity.User) (string, error) { @@ -54,16 +83,3 @@ func (r *UserRepository) Update(user *entity.User) (*entity.User, error) { func (r *UserRepository) Delete(id int64) (bool, error) { return true, nil } - -func (r *UserRepository) FindByUsername(login string) (*entity.User, error) { - var user entity.User - - sql := `SELECT id, username, password, email, created_at FROM identity.users WHERE username=$1 LIMIT 1` - err := r.db.QueryRow(context.Background(), sql, login). - Scan(&user.ID, &user.Username, &user.Password, &user.Email, &user.CreatedAt) - if err != nil { - return nil, errors.New("failed to fetch user from DB: " + err.Error()) - } - - return &user, nil -} diff --git a/src/internal/server/access_handler.go b/src/internal/server/access_handler.go index 5b152d4..64911e6 100644 --- a/src/internal/server/access_handler.go +++ b/src/internal/server/access_handler.go @@ -2,6 +2,7 @@ package server import ( dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto" + "git.ego.freeddns.org/egommerce/identity-service/infra/repository" "git.ego.freeddns.org/egommerce/identity-service/internal/service" "git.ego.freeddns.org/egommerce/identity-service/internal/ui" diff --git a/src/internal/server/health_handler.go b/src/internal/server/health_handler.go index 04f46e4..136c41d 100644 --- a/src/internal/server/health_handler.go +++ b/src/internal/server/health_handler.go @@ -15,13 +15,11 @@ func (s *Server) HealthHandler(c *fiber.Ctx) error { // Only 404 indicate service as not-healthy err := s.GetDatabase().Ping(context.Background()) if err != nil { - // fmt.Println("db unavailable", err) return c.SendStatus(http.StatusNotFound) } err = s.GetCache().Ping(context.Background()).Err() if err != nil { - // fmt.Println("cache unavailable", err) return c.SendStatus(http.StatusNotFound) } diff --git a/src/internal/server/login_handler.go b/src/internal/server/login_handler.go index f8cb8e8..ba03013 100644 --- a/src/internal/server/login_handler.go +++ b/src/internal/server/login_handler.go @@ -10,15 +10,15 @@ import ( ) func (s *Server) LoginHandlerFn(c *fiber.Ctx) error { - data := new(dto.AuthLoginRequestDTO) - if err := c.BodyParser(data); err != nil { - return s.Error(c, fiber.StatusBadRequest, "Error parsing input") + req := new(dto.AuthLoginRequestDTO) + if err := c.BodyParser(req); err != nil { + return s.Error(c, fiber.StatusBadRequest, "error parsing input") } userRepo := repository.NewUserRepository(s.GetDatabase()) authSrv := service.NewAuthService(userRepo, s.GetCache()) - token, err := ui.NewLoginActionUI(authSrv).Execute(data) + token, err := ui.NewLoginActionUI(authSrv).Execute(req) if err != nil { // TODO: handle other response status codes -- add struct to decorate error with code and message return s.Error(c, fiber.StatusBadRequest, err.Error()) } diff --git a/src/internal/server/server.go b/src/internal/server/server.go index 31c6fb4..5b4d08b 100644 --- a/src/internal/server/server.go +++ b/src/internal/server/server.go @@ -51,8 +51,8 @@ func (s *Server) Start() error { if err != nil { log.Fatal(err) } - tlsCnf := &tls.Config{Certificates: []tls.Certificate{crt}} + tlsCnf := &tls.Config{Certificates: []tls.Certificate{crt}} ln, _ := net.Listen("tcp", s.addr) ln = tls.NewListener(ln, tlsCnf) @@ -68,6 +68,7 @@ func (s *Server) OnShutdown() { s.GetDatabase().Close() s.GetCache().Close() + s.Shutdown() } diff --git a/src/internal/service/auth.go b/src/internal/service/auth.go index 0c48071..521e5dc 100644 --- a/src/internal/service/auth.go +++ b/src/internal/service/auth.go @@ -29,11 +29,11 @@ func init() { } type AuthService struct { - userRepo *repository.UserRepository + userRepo repository.UserRepositoryInterface cache *redis.Client } -func NewAuthService(userRepo *repository.UserRepository, cache *redis.Client) *AuthService { +func NewAuthService(userRepo repository.UserRepositoryInterface, cache *redis.Client) *AuthService { return &AuthService{ userRepo: userRepo, cache: cache, diff --git a/src/internal/ui/access_action.go b/src/internal/ui/access_action.go index 632561d..d3a41fc 100644 --- a/src/internal/ui/access_action.go +++ b/src/internal/ui/access_action.go @@ -2,6 +2,7 @@ package ui import ( dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto" + "git.ego.freeddns.org/egommerce/identity-service/internal/service" ) @@ -10,12 +11,10 @@ type AccessActionUI struct { } func NewAccessActionUI(guard *service.GuardService) *AccessActionUI { - return &AccessActionUI{ - guard: guard, - } + return &AccessActionUI{guard: guard} } -func (ui *AccessActionUI) Execute(data *dto.AuthorizationHeaderDTO, url, srvName string) error { +func (ui *AccessActionUI) Execute(data *dto.AuthorizationHeaderDTO, url, srvName string) error { // TODO: rename to CheckAccess err := ui.guard.CheckUserPermissions(data, url, srvName) if err != nil { return err