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"
|
|
|
|
|
2024-11-18 07:23:41 +00:00
|
|
|
"gitea.pena/PenaSide/customer/internal/errors"
|
|
|
|
"gitea.pena/PenaSide/customer/internal/models"
|
|
|
|
"gitea.pena/PenaSide/customer/internal/utils"
|
|
|
|
"gitea.pena/PenaSide/customer/pkg/client"
|
2024-11-26 15:28:42 +00:00
|
|
|
"go.uber.org/zap"
|
2023-05-16 01:12:07 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type AuthClientDeps struct {
|
2023-05-17 20:27:09 +00:00
|
|
|
Logger *zap.Logger
|
2024-11-26 15:28:42 +00:00
|
|
|
URL string
|
2023-05-16 01:12:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
type AuthClient struct {
|
2024-11-26 15:28:42 +00:00
|
|
|
url string
|
2023-05-16 01:12:07 +00:00
|
|
|
}
|
|
|
|
|
2023-06-13 22:51:34 +00:00
|
|
|
func NewAuthClient(deps AuthClientDeps) *AuthClient {
|
2024-11-26 15:28:42 +00:00
|
|
|
if deps.URL == "" {
|
|
|
|
log.Panicln("url is nil on <NewAuthClient>")
|
2023-05-19 04:50:40 +00:00
|
|
|
}
|
|
|
|
|
2023-05-16 01:12:07 +00:00
|
|
|
return &AuthClient{
|
2024-11-26 15:28:42 +00:00
|
|
|
url: deps.URL,
|
2023-05-16 01:12:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-05-17 20:27:09 +00:00
|
|
|
func (receiver *AuthClient) GetUser(ctx context.Context, userID string) (*models.User, errors.Error) {
|
2024-11-26 15:28:42 +00:00
|
|
|
userURL, err := url.JoinPath(fmt.Sprintf("%s/user", receiver.url), userID)
|
2023-05-16 01:12:07 +00:00
|
|
|
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
|
|
|
|
}
|