service auth registration

This commit is contained in:
nquidox 2026-03-20 13:44:37 +03:00
parent 6eda67db60
commit 287b1f5a30
7 changed files with 478 additions and 0 deletions

40
pkg/authReg/handler.go Normal file
View file

@ -0,0 +1,40 @@
package authReg
import (
log "github.com/sirupsen/logrus"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
er "merch-api/pkg/externalRegistration/v1"
"time"
)
const pkgLogHeader string = "External service registration |"
type Handler struct {
client er.ExternalRegistrationClient
*service
}
type Deps struct {
Addr string
Timeout time.Duration
}
func New(deps Deps) *Handler {
var opts []grpc.DialOption
insec := grpc.WithTransportCredentials(insecure.NewCredentials())
opts = append(opts, insec)
conn, err := grpc.NewClient(deps.Addr, opts...)
if err != nil {
log.WithError(err).Fatalf("%v grpc connection failed", pkgLogHeader)
}
client := er.NewExternalRegistrationClient(conn)
log.WithField("address", deps.Addr).Debugf("%v client", pkgLogHeader)
return &Handler{
client: client,
service: newService(client, deps.Timeout),
}
}

9
pkg/authReg/interface.go Normal file
View file

@ -0,0 +1,9 @@
package authReg
import (
"context"
)
type ServiceRegistrar interface {
AuthenticateOrRegister(ctx context.Context, req *RegRequest) (*RegResponse, error)
}

43
pkg/authReg/service.go Normal file
View file

@ -0,0 +1,43 @@
package authReg
import (
"context"
er "merch-api/pkg/externalRegistration/v1"
"time"
)
type service struct {
client er.ExternalRegistrationClient
timeout time.Duration
}
func newService(c er.ExternalRegistrationClient, timeout time.Duration) *service {
return &service{
client: c,
timeout: timeout,
}
}
func (s *service) AuthenticateOrRegister(ctx context.Context, req *RegRequest) (*RegResponse, error) {
authCtx, cancel := context.WithTimeout(ctx, s.timeout)
defer cancel()
request := er.RegistrationRequest{
Name: req.Name,
Description: req.Description,
ServiceCode: int32(req.BaseCode),
ServiceEndCode: int32(req.EndCode),
Secret: req.SecretHash,
Status: req.Status,
}
response, err := s.client.AuthenticateOrRegister(authCtx, &request)
if err != nil {
return nil, err
}
return &RegResponse{
ServiceId: response.ServiceId,
AlreadyRegistered: response.AlreadyRegistered,
}, nil
}

15
pkg/authReg/struct.go Normal file
View file

@ -0,0 +1,15 @@
package authReg
type RegRequest struct {
Name string
Description string
BaseCode int
EndCode int
SecretHash string
Status string
}
type RegResponse struct {
ServiceId int32
AlreadyRegistered bool
}