Moved infra/ to internal/ sub-dir
This commit is contained in:
28
src/internal/chronos/cache_permissions_job.go
Normal file
28
src/internal/chronos/cache_permissions_job.go
Normal file
@@ -0,0 +1,28 @@
|
||||
package chronos
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"git.ego.freeddns.org/egommerce/identity-service/internal/infra/repository"
|
||||
"git.ego.freeddns.org/egommerce/identity-service/internal/service"
|
||||
)
|
||||
|
||||
type CachePermissionsJob struct {
|
||||
sch *Chronos
|
||||
}
|
||||
|
||||
func NewCachePermissionsJob(sch *Chronos) CachePermissionsJob {
|
||||
return CachePermissionsJob{sch: sch}
|
||||
}
|
||||
|
||||
func (j CachePermissionsJob) Run() {
|
||||
userRepo := repository.NewUserRepository(j.sch.GetDatabase())
|
||||
roleRepo := repository.NewRoleRepository(j.sch.GetDatabase())
|
||||
urlRepo := repository.NewURLAccessRepository(j.sch.GetDatabase())
|
||||
authSrv := service.NewAuthService(userRepo, j.sch.GetCache())
|
||||
guardSrv := service.NewGuardService(authSrv, j.sch.GetCache(), userRepo, roleRepo, urlRepo)
|
||||
|
||||
guardSrv.CacheAllPermissions()
|
||||
fmt.Println(time.Now().String() + " permission successfully cached")
|
||||
}
|
||||
@@ -5,7 +5,6 @@ import (
|
||||
"time"
|
||||
|
||||
"git.ego.freeddns.org/egommerce/identity-service/common"
|
||||
"git.ego.freeddns.org/egommerce/identity-service/internal/chronos/jobs"
|
||||
|
||||
"github.com/go-redis/redis/v8"
|
||||
"github.com/jackc/pgx/v5/pgxpool"
|
||||
@@ -23,10 +22,10 @@ func New(c *common.Config) *Chronos {
|
||||
}
|
||||
|
||||
func (c *Chronos) Start() error {
|
||||
job := jobs.NewCachePermissionsJob()
|
||||
s := clockwerk.New()
|
||||
s.Every(30 * time.Second).Do(job)
|
||||
s.Start()
|
||||
job := NewCachePermissionsJob(c)
|
||||
sch := clockwerk.New()
|
||||
sch.Every(30 * time.Second).Do(job)
|
||||
sch.Start()
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -35,18 +34,18 @@ func (c *Chronos) RegisterHandler(name string, fn func() any) {
|
||||
c.handlers[name] = fn()
|
||||
}
|
||||
|
||||
func (s *Chronos) OnShutdown() {
|
||||
func (c *Chronos) OnShutdown() {
|
||||
log.Println("Chronos is going down...")
|
||||
|
||||
// s.GetDatabase().Close()
|
||||
// c.GetDatabase().Close()
|
||||
}
|
||||
|
||||
// Plugin helper funcitons
|
||||
// Plugin helper funcitons - refactor needed cause funcs are duplcated in server.go
|
||||
// TODO: move functions below to some common place
|
||||
func (s *Chronos) GetCache() *redis.Client {
|
||||
return (s.handlers["cache"]).(*redis.Client)
|
||||
func (c *Chronos) GetCache() *redis.Client {
|
||||
return (c.handlers["cache"]).(*redis.Client)
|
||||
}
|
||||
|
||||
func (s *Chronos) GetDatabase() *pgxpool.Pool {
|
||||
return (s.handlers["database"]).(*pgxpool.Pool)
|
||||
func (c *Chronos) GetDatabase() *pgxpool.Pool {
|
||||
return (c.handlers["database"]).(*pgxpool.Pool)
|
||||
}
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
package jobs
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
|
||||
type CachePermissionsJob struct{}
|
||||
|
||||
func NewCachePermissionsJob() CachePermissionsJob {
|
||||
return CachePermissionsJob{}
|
||||
}
|
||||
|
||||
func (j CachePermissionsJob) Run() {
|
||||
fmt.Println(time.Now().String() + " Every 30 seconds")
|
||||
}
|
||||
10
src/internal/infra/repository/interface.go
Normal file
10
src/internal/infra/repository/interface.go
Normal file
@@ -0,0 +1,10 @@
|
||||
package repository
|
||||
|
||||
import entity "git.ego.freeddns.org/egommerce/api-entities/identity/entity"
|
||||
|
||||
type RepositoryInterface interface {
|
||||
FindByID(id string) (*entity.User, error)
|
||||
Create(user *entity.User) (*entity.User, error)
|
||||
Update(user *entity.User) (*entity.User, error)
|
||||
Delete(id int64) (bool, error)
|
||||
}
|
||||
64
src/internal/infra/repository/role_repository.go
Normal file
64
src/internal/infra/repository/role_repository.go
Normal file
@@ -0,0 +1,64 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
entity "git.ego.freeddns.org/egommerce/api-entities/identity/entity"
|
||||
|
||||
"github.com/jackc/pgx/v5/pgxpool"
|
||||
)
|
||||
|
||||
type RoleRepository struct {
|
||||
db *pgxpool.Pool
|
||||
}
|
||||
|
||||
func NewRoleRepository(db *pgxpool.Pool) *RoleRepository {
|
||||
return &RoleRepository{db}
|
||||
}
|
||||
|
||||
func (r *RoleRepository) FindByID(id string) (*entity.Role, error) {
|
||||
var role entity.Role
|
||||
|
||||
sql := `SELECT id, name, display_name FROM identity.roles WHERE id=$1 LIMIT 1`
|
||||
err := r.db.QueryRow(context.Background(), sql, id).
|
||||
Scan(&role.ID, &role.Name, &role.DisplayName)
|
||||
if err != nil {
|
||||
return nil, errors.New("failed to fetch role from DB: " + err.Error())
|
||||
}
|
||||
|
||||
return &role, nil
|
||||
}
|
||||
|
||||
func (r *RoleRepository) Create(role *entity.Role) (string, error) {
|
||||
var id string
|
||||
|
||||
// sql := `INSERT INTO identity.users(email, username, password) VALUES($1, $2, $3) LIMIT 1 RETURNING id`
|
||||
// err := r.db.QueryRow(context.Background(), sql, user.Email, user.Username, user.Password).Scan(&id)
|
||||
// if err != nil {
|
||||
// if err = db.IsDuplicatedRow(err); err != nil {
|
||||
// return "", errors.New("username/email is already taken")
|
||||
// }
|
||||
|
||||
// return "", errors.New("db error: " + err.Error())
|
||||
// }
|
||||
|
||||
return id, nil
|
||||
}
|
||||
|
||||
func (r *RoleRepository) Update(role *entity.Role) (*entity.Role, error) {
|
||||
return &entity.Role{}, nil
|
||||
}
|
||||
|
||||
func (r *RoleRepository) Delete(id int64) (bool, error) {
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func (r *RoleRepository) GetUserRole(user *entity.User) *entity.Role {
|
||||
role := new(entity.Role)
|
||||
|
||||
sql := `SELECT r.id, r.name, r.display_name FROM identity.roles r JOIN identity.users_roles ur ON r.id = ur.role_id WHERE ur.user_id=$1 LIMIT 1`
|
||||
r.db.QueryRow(context.Background(), sql, user.ID).Scan(&role.ID, &role.Name, &role.DisplayName)
|
||||
|
||||
return role
|
||||
}
|
||||
101
src/internal/infra/repository/url_access_repository.go
Normal file
101
src/internal/infra/repository/url_access_repository.go
Normal file
@@ -0,0 +1,101 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"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"
|
||||
)
|
||||
|
||||
type URLAccessRepository struct {
|
||||
db *pgxpool.Pool
|
||||
}
|
||||
|
||||
func NewURLAccessRepository(db *pgxpool.Pool) *URLAccessRepository {
|
||||
return &URLAccessRepository{db}
|
||||
}
|
||||
|
||||
func (r *URLAccessRepository) FindByID(id string) (*entity.URLAccess, error) {
|
||||
var urlAccess entity.URLAccess
|
||||
|
||||
sql := `SELECT id, roles, url, service FROM identity.url_access WHERE id=$1 LIMIT 1`
|
||||
err := r.db.QueryRow(context.Background(), sql, id).
|
||||
Scan(&urlAccess.ID, &urlAccess.Roles, &urlAccess.URL, &urlAccess.Service)
|
||||
if err != nil {
|
||||
return nil, errors.New("failed to fetch url_access from DB: " + err.Error())
|
||||
}
|
||||
|
||||
return &urlAccess, nil
|
||||
}
|
||||
|
||||
func (r *URLAccessRepository) FindAll() ([]entity.URLAccess, error) {
|
||||
sql := "SELECT id, roles, url, service FROM identity.url_access ORDER BY service"
|
||||
rows, err := r.db.Query(context.Background(), sql)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var results []entity.URLAccess
|
||||
for rows.Next() {
|
||||
var url entity.URLAccess
|
||||
if err := rows.Scan(&url.ID, &url.Roles, &url.URL, &url.Service); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
results = append(results, url)
|
||||
}
|
||||
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (r *URLAccessRepository) Create(role *entity.URLAccess) (string, error) {
|
||||
var id string
|
||||
|
||||
return id, nil
|
||||
}
|
||||
|
||||
func (r *URLAccessRepository) Update(role *entity.URLAccess) (entity.URLAccess, error) {
|
||||
return entity.URLAccess{}, nil
|
||||
}
|
||||
|
||||
func (r *URLAccessRepository) Delete(id int64) (bool, error) {
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func (r *URLAccessRepository) FindByURLAndService(url, service string) (*entity.URLAccess, error) {
|
||||
var urlAccess entity.URLAccess
|
||||
|
||||
sql := `SELECT id, roles, url FROM identity.url_access WHERE url=$1 AND service=$2 LIMIT 1`
|
||||
err := r.db.QueryRow(context.Background(), sql, url, service).
|
||||
Scan(&urlAccess.ID, &urlAccess.Roles, &urlAccess.URL)
|
||||
if err != nil {
|
||||
return nil, errors.New("failed to fetch url_access from DB: " + err.Error())
|
||||
}
|
||||
|
||||
return &urlAccess, nil
|
||||
}
|
||||
|
||||
func (r *URLAccessRepository) FindByURLAndServiceForRole(url, service, role string) (*entity.URLAccess, error) {
|
||||
var entity entity.URLAccess
|
||||
|
||||
sql := fmt.Sprintf("SELECT id, roles, url, service FROM identity.url_access WHERE url=$1 AND service=$2 AND roles::jsonb @> '[\"%s\"]'::jsonb LIMIT 1", role)
|
||||
err := r.db.QueryRow(context.Background(), sql, url, service).
|
||||
Scan(&entity.ID, &entity.Roles, &entity.URL, &entity.Service)
|
||||
if err != nil {
|
||||
if err = database.NoRowsInQuerySet(err); err != nil {
|
||||
return nil, errors.New("no url found for: " + url + " and role: " + role)
|
||||
}
|
||||
|
||||
return nil, errors.New("failed to fetch url_access from DB: " + err.Error())
|
||||
}
|
||||
|
||||
return &entity, nil
|
||||
}
|
||||
|
||||
func (r *URLAccessRepository) FindForUser(user *entity.User) {
|
||||
|
||||
}
|
||||
69
src/internal/infra/repository/user_repository.go
Normal file
69
src/internal/infra/repository/user_repository.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
entity "git.ego.freeddns.org/egommerce/api-entities/identity/entity"
|
||||
db "git.ego.freeddns.org/egommerce/go-api-pkg/database"
|
||||
|
||||
"github.com/jackc/pgx/v5/pgxpool"
|
||||
)
|
||||
|
||||
type UserRepository struct {
|
||||
db *pgxpool.Pool
|
||||
}
|
||||
|
||||
func NewUserRepository(db *pgxpool.Pool) *UserRepository {
|
||||
return &UserRepository{db}
|
||||
}
|
||||
|
||||
func (r *UserRepository) FindByID(id string) (*entity.User, error) {
|
||||
var user 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)
|
||||
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) {
|
||||
var id string
|
||||
|
||||
sql := `INSERT INTO identity.users(email, username, password) VALUES($1, $2, $3) LIMIT 1 RETURNING id`
|
||||
err := r.db.QueryRow(context.Background(), sql, user.Email, user.Username, user.Password).Scan(&id)
|
||||
if err != nil {
|
||||
if err = db.IsDuplicatedRow(err); err != nil {
|
||||
return "", errors.New("username/email is already taken")
|
||||
}
|
||||
|
||||
return "", errors.New("db error: " + err.Error())
|
||||
}
|
||||
|
||||
return id, nil
|
||||
}
|
||||
|
||||
func (r *UserRepository) Update(user *entity.User) (*entity.User, error) {
|
||||
return &entity.User{}, nil
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
@@ -2,16 +2,16 @@ package server
|
||||
|
||||
import (
|
||||
dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto"
|
||||
repo "git.ego.freeddns.org/egommerce/identity-service/domain/repository"
|
||||
"git.ego.freeddns.org/egommerce/identity-service/internal/infra/repository"
|
||||
"git.ego.freeddns.org/egommerce/identity-service/internal/service"
|
||||
"git.ego.freeddns.org/egommerce/identity-service/internal/ui"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
)
|
||||
|
||||
func (s *Server) AccessHandlerFn(c *fiber.Ctx) error {
|
||||
userRepo := repo.NewUserRepository(s.GetDatabase())
|
||||
roleRepo := repo.NewRoleRepository(s.GetDatabase())
|
||||
urlRepo := repo.NewURLAccessRepository(s.GetDatabase())
|
||||
userRepo := repository.NewUserRepository(s.GetDatabase())
|
||||
roleRepo := repository.NewRoleRepository(s.GetDatabase())
|
||||
urlRepo := repository.NewURLAccessRepository(s.GetDatabase())
|
||||
authSrv := service.NewAuthService(userRepo, s.GetCache())
|
||||
guardSrv := service.NewGuardService(authSrv, s.GetCache(), userRepo, roleRepo, urlRepo)
|
||||
|
||||
|
||||
@@ -2,7 +2,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/infra/repository"
|
||||
"git.ego.freeddns.org/egommerce/identity-service/internal/service"
|
||||
"git.ego.freeddns.org/egommerce/identity-service/internal/ui"
|
||||
|
||||
@@ -15,9 +15,9 @@ func (s *Server) LoginHandlerFn(c *fiber.Ctx) error {
|
||||
return s.Error(c, fiber.StatusBadRequest, "Error parsing input")
|
||||
}
|
||||
|
||||
userRepo := domain.NewUserRepository(s.GetDatabase())
|
||||
roleRepo := domain.NewRoleRepository(s.GetDatabase())
|
||||
urlRepo := domain.NewURLAccessRepository(s.GetDatabase())
|
||||
userRepo := repository.NewUserRepository(s.GetDatabase())
|
||||
roleRepo := repository.NewRoleRepository(s.GetDatabase())
|
||||
urlRepo := repository.NewURLAccessRepository(s.GetDatabase())
|
||||
authSrv := service.NewAuthService(userRepo, s.GetCache())
|
||||
guardSrv := service.NewGuardService(authSrv, s.GetCache(), userRepo, roleRepo, urlRepo)
|
||||
|
||||
|
||||
@@ -2,7 +2,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/infra/repository"
|
||||
"git.ego.freeddns.org/egommerce/identity-service/internal/service"
|
||||
"git.ego.freeddns.org/egommerce/identity-service/internal/ui"
|
||||
|
||||
@@ -15,7 +15,7 @@ func (s *Server) RefreshHandlerFn(c *fiber.Ctx) error {
|
||||
return s.Error(c, fiber.StatusBadRequest, "Error parsing headers")
|
||||
}
|
||||
|
||||
repo := domain.NewUserRepository(s.GetDatabase())
|
||||
repo := repository.NewUserRepository(s.GetDatabase())
|
||||
authSrv := service.NewAuthService(repo, s.GetCache())
|
||||
|
||||
token, err := ui.NewRefreshTokenActionUI(authSrv).Execute(header)
|
||||
|
||||
@@ -2,7 +2,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/infra/repository"
|
||||
"git.ego.freeddns.org/egommerce/identity-service/internal/ui"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
@@ -14,7 +14,7 @@ func (s *Server) RegisterHandlerFn(c *fiber.Ctx) error {
|
||||
return s.Error(c, fiber.StatusBadRequest, "Error parsing input")
|
||||
}
|
||||
|
||||
repo := domain.NewUserRepository(s.GetDatabase())
|
||||
repo := repository.NewUserRepository(s.GetDatabase())
|
||||
|
||||
id, err := ui.NewRegisterActionUI(repo, s.GetCache()).Execute(data)
|
||||
if err != nil {
|
||||
|
||||
@@ -83,7 +83,7 @@ func (s *Server) Error(c *fiber.Ctx, code int, msg string) error {
|
||||
return c.Status(code).JSON(dto.ErrorResponseDTO{Error: msg})
|
||||
}
|
||||
|
||||
// Plugin helper funcitons
|
||||
// Plugin helper funcitons - refactor needed cause funcs are duplcated in chronos.go
|
||||
func (s *Server) GetCache() *redis.Client {
|
||||
return (s.handlers["cache"]).(*redis.Client)
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
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"
|
||||
"git.ego.freeddns.org/egommerce/identity-service/internal/infra/repository"
|
||||
|
||||
"github.com/go-redis/redis/v8"
|
||||
)
|
||||
@@ -29,11 +29,11 @@ func init() {
|
||||
}
|
||||
|
||||
type AuthService struct {
|
||||
userRepo *domain.UserRepository
|
||||
userRepo *repository.UserRepository
|
||||
cache *redis.Client
|
||||
}
|
||||
|
||||
func NewAuthService(userRepo *domain.UserRepository, cache *redis.Client) *AuthService {
|
||||
func NewAuthService(userRepo *repository.UserRepository, cache *redis.Client) *AuthService {
|
||||
return &AuthService{
|
||||
userRepo: userRepo,
|
||||
cache: cache,
|
||||
|
||||
@@ -9,19 +9,19 @@ import (
|
||||
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"
|
||||
"git.ego.freeddns.org/egommerce/identity-service/internal/infra/repository"
|
||||
"github.com/go-redis/redis/v8"
|
||||
)
|
||||
|
||||
type GuardService struct {
|
||||
authSrv *AuthService
|
||||
cache *redis.Client
|
||||
userRepo *domain.UserRepository
|
||||
roleRepo *domain.RoleRepository
|
||||
urlRepo *domain.URLAccessRepository
|
||||
userRepo *repository.UserRepository
|
||||
roleRepo *repository.RoleRepository
|
||||
urlRepo *repository.URLAccessRepository
|
||||
}
|
||||
|
||||
func NewGuardService(authSrv *AuthService, cache *redis.Client, userRepo *domain.UserRepository, roleRepo *domain.RoleRepository, urlRepo *domain.URLAccessRepository) *GuardService {
|
||||
func NewGuardService(authSrv *AuthService, cache *redis.Client, userRepo *repository.UserRepository, roleRepo *repository.RoleRepository, urlRepo *repository.URLAccessRepository) *GuardService {
|
||||
return &GuardService{
|
||||
authSrv: authSrv,
|
||||
cache: cache,
|
||||
@@ -49,9 +49,6 @@ func (g *GuardService) CheckUserPermissions(authHeader *dto.AuthorizationHeaderD
|
||||
return nil
|
||||
}
|
||||
|
||||
// Move below functions to a worker and fire-up it in the CRONJOB
|
||||
// func (g *GuardService) fetchURLAccessFromCache() {}
|
||||
|
||||
func (g *GuardService) CacheAllPermissions() error {
|
||||
urls, err := g.urlRepo.FindAll()
|
||||
if err != nil {
|
||||
@@ -81,3 +78,5 @@ func (g *GuardService) CacheAllPermissions() error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// func (g *GuardService) fetchURLAccessFromCache() {}
|
||||
|
||||
@@ -2,7 +2,7 @@ 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/infra/repository"
|
||||
"git.ego.freeddns.org/egommerce/identity-service/internal/service"
|
||||
|
||||
"github.com/go-redis/redis/v8"
|
||||
@@ -12,7 +12,7 @@ type RegisterActionUI struct {
|
||||
authSrv *service.AuthService
|
||||
}
|
||||
|
||||
func NewRegisterActionUI(repo *domain.UserRepository, cache *redis.Client) *RegisterActionUI {
|
||||
func NewRegisterActionUI(repo *repository.UserRepository, cache *redis.Client) *RegisterActionUI {
|
||||
return &RegisterActionUI{
|
||||
authSrv: service.NewAuthService(repo, cache),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user