app registration check

This commit is contained in:
nquidox 2026-03-20 13:44:53 +03:00
parent 287b1f5a30
commit 08d8450dac
4 changed files with 101 additions and 10 deletions

View file

@ -19,3 +19,14 @@ DB_PORT=
DB_USERNAME= DB_USERNAME=
DB_PASSWORD= DB_PASSWORD=
DB_NAME= DB_NAME=
#[Auth service]
AUTH_HOST=
AUTH_PORT=
AUTH_NAME=merch-api
AUTH_DESCRIPTION=merch-api-service
AUTH_BASE_CODE=10000
AUTH_END_CODE=11000
AUTH_SECRET_HASH=
AUTH_STATUS=active
AUTH_CONNECT_TIMEOUT_SECONDS=

View file

@ -1,12 +1,15 @@
package config package config
import "time" import (
"time"
)
type Config struct { type Config struct {
App App App App
Http Http Http Http
TasksSource TasksSource TasksSource TasksSource
DBase DBase DBase DBase
Auth Auth
} }
type App struct { type App struct {
@ -35,6 +38,18 @@ type DBase struct {
DBName string DBName string
} }
type Auth struct {
Host string
Port string
Name string
Description string
BaseCode int
EndCode int
SecretHash string
Status string
Timeout time.Duration
}
func NewConfig() Config { func NewConfig() Config {
return Config{ return Config{
App: App{ App: App{
@ -62,5 +77,17 @@ func NewConfig() Config {
Password: getEnv("DB_PASSWORD", "7kek8wait9"), Password: getEnv("DB_PASSWORD", "7kek8wait9"),
DBName: getEnv("DB_NAME", "merch_dev"), DBName: getEnv("DB_NAME", "merch_dev"),
}, },
Auth: Auth{
Host: getEnv("AUTH_HOST", "127.0.0.1"),
Port: getEnv("AUTH_PORT", "19090"),
Name: getEnv("AUTH_NAME", "merch_api"),
Description: getEnv("AUTH_DESCRIPTION", "merch_api_service"),
BaseCode: getEnvInt("AUTH_BASE_CODE", 10_000),
EndCode: getEnvInt("AUTH_END_CODE", 11_000),
SecretHash: getEnv("AUTH_SECRET_HASH", "123"),
Status: getEnv("AUTH_STATUS", getEnv("AUTH_STATUS", "active")),
Timeout: getEnvSeconds("AUTH_CONNECT_TIMEOUT_SECONDS", 60),
},
} }
} }

View file

@ -39,3 +39,15 @@ func getEnvUint(key string, fallback uint) uint {
} }
return fallback return fallback
} }
func getEnvInt(key string, fallback int) int {
if value, ok := os.LookupEnv(key); ok {
num, err := strconv.Atoi(value)
if err != nil {
log.Printf("Error converting %v to int, using fallback value - %v", key, fallback)
return fallback
}
return num
}
return fallback
}

View file

@ -9,9 +9,11 @@ import (
"merch-api/internal/merch" "merch-api/internal/merch"
"merch-api/internal/task" "merch-api/internal/task"
"merch-api/internal/user" "merch-api/internal/user"
"merch-api/pkg/authReg"
"merch-api/pkg/dbase" "merch-api/pkg/dbase"
"merch-api/pkg/router" "merch-api/pkg/router"
"merch-api/pkg/utils" "merch-api/pkg/utils"
"net"
"time" "time"
) )
@ -26,6 +28,14 @@ type App struct {
} }
func New(ctx context.Context, cfg config.Config) *App { func New(ctx context.Context, cfg config.Config) *App {
newApp := &App{
cfg: cfg,
}
//check if service is registered
if !newApp.isRegistered(ctx, cfg) {
log.Fatalf("%v auth registration check failed", pkgLogHeader)
}
//providers //providers
u := utils.New() u := utils.New()
@ -39,6 +49,7 @@ func New(ctx context.Context, cfg config.Config) *App {
if err != nil { if err != nil {
log.WithError(err).Fatalf("%v failed to connect database", pkgLogHeader) log.WithError(err).Fatalf("%v failed to connect database", pkgLogHeader)
} }
newApp.dbPool = dbPool
//providers with deps //providers with deps
userProv := user.New(user.Deps{ userProv := user.New(user.Deps{
@ -46,7 +57,7 @@ func New(ctx context.Context, cfg config.Config) *App {
Utils: u, Utils: u,
}) })
r := router.NewRouter(router.Deps{ newApp.router = router.NewRouter(router.Deps{
Host: cfg.Http.Host, Host: cfg.Http.Host,
Port: cfg.Http.Port, Port: cfg.Http.Port,
Prefix: cfg.Http.Prefix, Prefix: cfg.Http.Prefix,
@ -62,19 +73,14 @@ func New(ctx context.Context, cfg config.Config) *App {
Utils: u, Utils: u,
}) })
modules = append(modules, m) modules = append(modules, m)
newApp.modules = modules
tasker := task.New(task.Deps{ newApp.tasker = task.New(task.Deps{
Addr: "", Addr: "",
MerchProvider: m, MerchProvider: m,
}) })
return &App{ return newApp
cfg: cfg,
router: r,
modules: modules,
dbPool: dbPool,
tasker: tasker,
}
} }
func (app *App) Run(ctx context.Context) error { func (app *App) Run(ctx context.Context) error {
@ -129,3 +135,38 @@ func (app *App) collectRoutes(group *gin.RouterGroup) {
} }
log.Infof("%v routes registered", pkgLogHeader) log.Infof("%v routes registered", pkgLogHeader)
} }
func (app *App) isRegistered(ctx context.Context, cfg config.Config) bool {
log.Infof("%v checking registration in auth service...", pkgLogHeader)
registrar := authReg.New(authReg.Deps{
Addr: net.JoinHostPort(cfg.Auth.Host, cfg.Auth.Port),
Timeout: cfg.Auth.Timeout,
})
response, err := registrar.AuthenticateOrRegister(ctx, &authReg.RegRequest{
Name: cfg.Auth.Name,
Description: cfg.Auth.Description,
BaseCode: cfg.Auth.BaseCode,
EndCode: cfg.Auth.EndCode,
SecretHash: cfg.Auth.SecretHash,
Status: cfg.Auth.Status,
})
if err != nil {
log.WithError(err).Errorf("%v error checking registration in auth service", pkgLogHeader)
return false
}
if response == nil {
log.Error("%v error checking registration in auth service", pkgLogHeader)
return false
}
if response.AlreadyRegistered == true && response.ServiceId > 0 {
log.Infof("%v service registered", pkgLogHeader)
return true
}
log.Errorf("%v something went wrong in auth registration check", pkgLogHeader)
return false
}