customer/internal/interface/client/auth.go

69 lines
1.7 KiB
Go
Raw Normal View History

2023-05-16 01:12:07 +00:00
package client
import (
"context"
2023-05-17 20:27:09 +00:00
"fmt"
2023-05-19 04:50:40 +00:00
"log"
2023-05-16 01:12:07 +00:00
"net/url"
2023-05-17 20:27:09 +00:00
"go.uber.org/zap"
2023-05-16 04:01:55 +00:00
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/errors"
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models"
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/utils"
"penahub.gitlab.yandexcloud.net/pena-services/customer/pkg/client"
2023-05-16 01:12:07 +00:00
)
type AuthClientDeps struct {
2023-05-17 20:27:09 +00:00
Logger *zap.Logger
2023-05-19 09:08:15 +00:00
URLs *models.AuthMicroserviceURL
2023-05-16 01:12:07 +00:00
}
type AuthClient struct {
2023-05-17 20:27:09 +00:00
logger *zap.Logger
2023-05-19 09:08:15 +00:00
urls *models.AuthMicroserviceURL
2023-05-16 01:12:07 +00:00
}
2023-06-13 22:51:34 +00:00
func NewAuthClient(deps AuthClientDeps) *AuthClient {
2023-05-19 04:50:40 +00:00
if deps.Logger == nil {
log.Panicln("logger is nil on <NewAuthClient>")
}
if deps.URLs == nil {
2023-05-30 11:33:57 +00:00
log.Panicln("urls is nil on <NewAuthClient>")
2023-05-19 04:50:40 +00:00
}
2023-05-16 01:12:07 +00:00
return &AuthClient{
logger: deps.Logger,
urls: deps.URLs,
}
}
2023-05-17 20:27:09 +00:00
func (receiver *AuthClient) GetUser(ctx context.Context, userID string) (*models.User, errors.Error) {
2023-05-16 01:12:07 +00:00
userURL, err := url.JoinPath(receiver.urls.User, userID)
if err != nil {
2023-05-17 20:27:09 +00:00
return nil, errors.New(
fmt.Errorf("failed to join path on <GetUser> of <AuthClient>: %w", err),
errors.ErrInternalError,
)
2023-05-16 01:12:07 +00:00
}
2023-05-17 20:27:09 +00:00
response, err := client.Get[models.User, models.FastifyError](ctx, &client.RequestSettings{
2023-05-16 01:12:07 +00:00
URL: userURL,
Headers: map[string]string{"Content-Type": "application/json"},
})
if err != nil {
2023-05-17 20:27:09 +00:00
return nil, errors.New(
fmt.Errorf("failed to request get user with <%s> on <GetUser> of <AuthClient>: %w", userID, err),
errors.ErrInternalError,
)
2023-05-16 01:12:07 +00:00
}
if response.Error != nil {
2023-05-17 20:27:09 +00:00
return nil, errors.New(
2023-05-19 09:08:15 +00:00
fmt.Errorf("failed request with <%s> on <GetUser> of <AuthClient>: %s", userID, response.Error.Message),
2023-05-17 20:27:09 +00:00
utils.DetermineClientErrorResponse(response.StatusCode),
)
2023-05-16 01:12:07 +00:00
}
return response.Body, nil
}