Removed coupling with useless services in actions

This commit is contained in:
PB
2025-10-22 17:10:54 +02:00
parent e546d16222
commit ee0b512bfe
10 changed files with 54 additions and 44 deletions

View File

@@ -19,8 +19,7 @@ func (s *Server) AccessHandlerFn(c *fiber.Ctx) error {
header := new(dto.AuthorizationHeaderDTO) header := new(dto.AuthorizationHeaderDTO)
c.ReqHeaderParser(header) c.ReqHeaderParser(header)
accessUI := ui.NewAccessActionUI(guardSrv, s.GetDatabase(), s.GetCache()) if err := ui.NewAccessActionUI(guardSrv).Execute(header, url, srvName); err != nil {
if err := accessUI.Execute(header, url, srvName); err != nil {
return s.Error(c, fiber.StatusNotFound, err.Error()) return s.Error(c, fiber.StatusNotFound, err.Error())
} }

View File

@@ -2,6 +2,8 @@ package server
import ( import (
dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto" dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto"
domain "git.ego.freeddns.org/egommerce/identity-service/domain/repository"
"git.ego.freeddns.org/egommerce/identity-service/internal/service"
"git.ego.freeddns.org/egommerce/identity-service/internal/ui" "git.ego.freeddns.org/egommerce/identity-service/internal/ui"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
@@ -13,8 +15,9 @@ func (s *Server) LoginHandlerFn(c *fiber.Ctx) error {
return s.Error(c, fiber.StatusBadRequest, "Error parsing input") return s.Error(c, fiber.StatusBadRequest, "Error parsing input")
} }
loginUI := ui.NewLoginActionUI(s.GetDatabase(), s.GetCache()) repo := domain.NewUserRepository(s.GetDatabase())
token, err := loginUI.Execute(data) authSrv := service.NewAuthService(repo, s.GetCache())
token, err := ui.NewLoginActionUI(authSrv).Execute(data)
if err != nil { // TODO: handle other response status codes if err != nil { // TODO: handle other response status codes
return s.Error(c, fiber.StatusBadRequest, err.Error()) return s.Error(c, fiber.StatusBadRequest, err.Error())
} }

View File

@@ -10,16 +10,15 @@ import (
) )
func (s *Server) RefreshHandlerFn(c *fiber.Ctx) error { func (s *Server) RefreshHandlerFn(c *fiber.Ctx) error {
data := new(dto.AuthRefreshTokenRequestDTO) header := new(dto.AuthorizationHeaderDTO)
if err := c.BodyParser(data); err != nil { if err := c.ReqHeaderParser(header); err != nil {
return s.Error(c, fiber.StatusBadRequest, "Error parsing input") return s.Error(c, fiber.StatusBadRequest, "Error parsing headers")
} }
repo := domain.NewUserRepository(s.GetDatabase()) repo := domain.NewUserRepository(s.GetDatabase())
authSrv := service.NewAuthService(repo, s.GetCache()) authSrv := service.NewAuthService(repo, s.GetCache())
refreshTokenActionUI := ui.NewRefreshTokenActionUI(authSrv) token, err := ui.NewRefreshTokenActionUI(authSrv).Execute(header)
token, err := refreshTokenActionUI.Execute(data)
if err != nil { if err != nil {
return s.Error(c, fiber.StatusBadRequest, err.Error()) return s.Error(c, fiber.StatusBadRequest, err.Error())
} }

View File

@@ -3,7 +3,7 @@ package server
import ( import (
dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto" dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto"
domain "git.ego.freeddns.org/egommerce/identity-service/domain/repository" domain "git.ego.freeddns.org/egommerce/identity-service/domain/repository"
"git.ego.freeddns.org/egommerce/identity-service/internal/service" "git.ego.freeddns.org/egommerce/identity-service/internal/ui"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
) )
@@ -15,9 +15,7 @@ func (s *Server) RegisterHandlerFn(c *fiber.Ctx) error {
} }
repo := domain.NewUserRepository(s.GetDatabase()) repo := domain.NewUserRepository(s.GetDatabase())
authSrv := service.NewAuthService(repo, s.GetCache()) id, err := ui.NewRegisterActionUI(repo, s.GetCache()).Execute(data)
id, err := authSrv.Register(data.Email, data.Username, data.Password)
if err != nil { if err != nil {
return s.Error(c, fiber.StatusBadRequest, err.Error()) return s.Error(c, fiber.StatusBadRequest, err.Error())
} }

View File

@@ -6,6 +6,7 @@ import (
"fmt" "fmt"
"strings" "strings"
dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto"
entity "git.ego.freeddns.org/egommerce/api-entities/identity/entity" entity "git.ego.freeddns.org/egommerce/api-entities/identity/entity"
domain "git.ego.freeddns.org/egommerce/identity-service/domain/repository" domain "git.ego.freeddns.org/egommerce/identity-service/domain/repository"
@@ -116,8 +117,8 @@ func (a *AuthService) Register(email, login, passwd string) (string, error) {
return id, nil return id, nil
} }
func (a *AuthService) getTokenFromAuthorizationHeader(header string) (string, error) { func (a *AuthService) GetTokenFromAuthorizationHeader(header *dto.AuthorizationHeaderDTO) (string, error) {
split := strings.Split(header, " ") split := strings.Split(header.Authorization, " ")
if len(split) != 2 { if len(split) != 2 {
return "", ErrParsingAccessToken return "", ErrParsingAccessToken
} }

View File

@@ -24,10 +24,7 @@ func NewGuardService(authSrv *AuthService, userRepo *domain.UserRepository, role
} }
func (g *Guard) CheckUserPermissions(authHeader *dto.AuthorizationHeaderDTO, url, srvName string) error { func (g *Guard) CheckUserPermissions(authHeader *dto.AuthorizationHeaderDTO, url, srvName string) error {
token, err := g.authSrv.getTokenFromAuthorizationHeader(authHeader.Authorization) token, _ := g.authSrv.GetTokenFromAuthorizationHeader(authHeader)
if err != nil { // FIXME probably never get here cause of jwt parsing in middlewares
return err
}
uid, _ := g.authSrv.getUIDByAccesssToken(token) uid, _ := g.authSrv.getUIDByAccesssToken(token)
user, err := g.userRepo.FindByID(uid) user, err := g.userRepo.FindByID(uid)
@@ -38,7 +35,7 @@ func (g *Guard) CheckUserPermissions(authHeader *dto.AuthorizationHeaderDTO, url
role := g.roleRepo.GetUserRole(user) role := g.roleRepo.GetUserRole(user)
if _, err := g.urlRepo.FindByURLAndServiceForRole(url, srvName, role.Name); err != nil { if _, err := g.urlRepo.FindByURLAndServiceForRole(url, srvName, role.Name); err != nil {
return errors.New("user has not required permission") return errors.New("user doesn't have required permission")
} }
return nil return nil

View File

@@ -3,22 +3,15 @@ package ui
import ( import (
dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto" dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto"
"git.ego.freeddns.org/egommerce/identity-service/internal/service" "git.ego.freeddns.org/egommerce/identity-service/internal/service"
"github.com/go-redis/redis/v8"
"github.com/jackc/pgx/v5/pgxpool"
) )
type AccessActionUI struct { type AccessActionUI struct {
guard *service.Guard guard *service.Guard
db *pgxpool.Pool
cache *redis.Client
} }
func NewAccessActionUI(guard *service.Guard, db *pgxpool.Pool, cache *redis.Client) *AccessActionUI { func NewAccessActionUI(guard *service.Guard) *AccessActionUI {
return &AccessActionUI{ return &AccessActionUI{
guard: guard, guard: guard,
db: db,
cache: cache,
} }
} }

View File

@@ -2,30 +2,21 @@ package ui
import ( import (
dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto" dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto"
domain "git.ego.freeddns.org/egommerce/identity-service/domain/repository"
"git.ego.freeddns.org/egommerce/identity-service/internal/service" "git.ego.freeddns.org/egommerce/identity-service/internal/service"
"github.com/go-redis/redis/v8"
"github.com/jackc/pgx/v5/pgxpool"
) )
type LoginActionUI struct { type LoginActionUI struct {
db *pgxpool.Pool authSrv *service.AuthService
cache *redis.Client
} }
func NewLoginActionUI(db *pgxpool.Pool, cache *redis.Client) *LoginActionUI { func NewLoginActionUI(authSrv *service.AuthService) *LoginActionUI {
return &LoginActionUI{ return &LoginActionUI{
db: db, authSrv: authSrv,
cache: cache,
} }
} }
func (ui *LoginActionUI) Execute(data *dto.AuthLoginRequestDTO) (string, error) { func (ui *LoginActionUI) Execute(data *dto.AuthLoginRequestDTO) (string, error) {
repo := domain.NewUserRepository(ui.db) token, err := ui.authSrv.Login(data.Username, data.Password)
authSrv := service.NewAuthService(repo, ui.cache)
token, err := authSrv.Login(data.Username, data.Password)
if err != nil { if err != nil {
if err == service.ErrUnableToCacheToken { if err == service.ErrUnableToCacheToken {
return "", err return "", err

View File

@@ -15,8 +15,9 @@ func NewRefreshTokenActionUI(auth *service.AuthService) *RefreshTokenActionUI {
} }
} }
func (ui *RefreshTokenActionUI) Execute(data *dto.AuthRefreshTokenRequestDTO) (string, error) { func (ui *RefreshTokenActionUI) Execute(header *dto.AuthorizationHeaderDTO) (string, error) {
token, err := ui.auth.RefreshToken(data.AccessToken) token, _ := ui.auth.GetTokenFromAuthorizationHeader(header)
newToken, err := ui.auth.RefreshToken(token)
if err != nil { if err != nil {
if err == service.ErrUnableToCacheToken { // FIXME: Move to RefreshHandlerFn if err == service.ErrUnableToCacheToken { // FIXME: Move to RefreshHandlerFn
return "", err return "", err
@@ -25,5 +26,5 @@ func (ui *RefreshTokenActionUI) Execute(data *dto.AuthRefreshTokenRequestDTO) (s
return "", err return "", err
} }
return token, nil return newToken, nil
} }

View File

@@ -0,0 +1,28 @@
package ui
import (
dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto"
domain "git.ego.freeddns.org/egommerce/identity-service/domain/repository"
"git.ego.freeddns.org/egommerce/identity-service/internal/service"
"github.com/go-redis/redis/v8"
)
type RegisterActionUI struct {
authSrv *service.AuthService
}
func NewRegisterActionUI(repo *domain.UserRepository, cache *redis.Client) *RegisterActionUI {
return &RegisterActionUI{
authSrv: service.NewAuthService(repo, cache),
}
}
func (ui *RegisterActionUI) Execute(data *dto.AuthRegisterRequestDTO) (string, error) {
id, err := ui.authSrv.Register(data.Email, data.Username, data.Password)
if err != nil {
return "", err
}
return id, nil
}