Removed coupling with useless services in actions

This commit is contained in:
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)
c.ReqHeaderParser(header)
accessUI := ui.NewAccessActionUI(guardSrv, s.GetDatabase(), s.GetCache())
if err := accessUI.Execute(header, url, srvName); err != nil {
if err := ui.NewAccessActionUI(guardSrv).Execute(header, url, srvName); err != nil {
return s.Error(c, fiber.StatusNotFound, err.Error())
}

View File

@@ -2,6 +2,8 @@ package server
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"
"git.ego.freeddns.org/egommerce/identity-service/internal/ui"
"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")
}
loginUI := ui.NewLoginActionUI(s.GetDatabase(), s.GetCache())
token, err := loginUI.Execute(data)
repo := domain.NewUserRepository(s.GetDatabase())
authSrv := service.NewAuthService(repo, s.GetCache())
token, err := ui.NewLoginActionUI(authSrv).Execute(data)
if err != nil { // TODO: handle other response status codes
return s.Error(c, fiber.StatusBadRequest, err.Error())
}

View File

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

View File

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

View File

@@ -6,6 +6,7 @@ import (
"fmt"
"strings"
dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto"
entity "git.ego.freeddns.org/egommerce/api-entities/identity/entity"
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
}
func (a *AuthService) getTokenFromAuthorizationHeader(header string) (string, error) {
split := strings.Split(header, " ")
func (a *AuthService) GetTokenFromAuthorizationHeader(header *dto.AuthorizationHeaderDTO) (string, error) {
split := strings.Split(header.Authorization, " ")
if len(split) != 2 {
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 {
token, err := g.authSrv.getTokenFromAuthorizationHeader(authHeader.Authorization)
if err != nil { // FIXME probably never get here cause of jwt parsing in middlewares
return err
}
token, _ := g.authSrv.GetTokenFromAuthorizationHeader(authHeader)
uid, _ := g.authSrv.getUIDByAccesssToken(token)
user, err := g.userRepo.FindByID(uid)
@@ -38,7 +35,7 @@ func (g *Guard) CheckUserPermissions(authHeader *dto.AuthorizationHeaderDTO, url
role := g.roleRepo.GetUserRole(user)
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

View File

@@ -3,22 +3,15 @@ package ui
import (
dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto"
"git.ego.freeddns.org/egommerce/identity-service/internal/service"
"github.com/go-redis/redis/v8"
"github.com/jackc/pgx/v5/pgxpool"
)
type AccessActionUI struct {
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{
guard: guard,
db: db,
cache: cache,
}
}

View File

@@ -2,30 +2,21 @@ 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"
"github.com/jackc/pgx/v5/pgxpool"
)
type LoginActionUI struct {
db *pgxpool.Pool
cache *redis.Client
authSrv *service.AuthService
}
func NewLoginActionUI(db *pgxpool.Pool, cache *redis.Client) *LoginActionUI {
func NewLoginActionUI(authSrv *service.AuthService) *LoginActionUI {
return &LoginActionUI{
db: db,
cache: cache,
authSrv: authSrv,
}
}
func (ui *LoginActionUI) Execute(data *dto.AuthLoginRequestDTO) (string, error) {
repo := domain.NewUserRepository(ui.db)
authSrv := service.NewAuthService(repo, ui.cache)
token, err := authSrv.Login(data.Username, data.Password)
token, err := ui.authSrv.Login(data.Username, data.Password)
if err != nil {
if err == service.ErrUnableToCacheToken {
return "", err

View File

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