add fix for donate page by avatar

This commit is contained in:
harold 2025-04-09 20:03:52 +05:00
parent c4bebf0ffa
commit eb61fd899c
5 changed files with 62 additions and 9 deletions

View File

@ -220,10 +220,8 @@ func GetOuterDonatePage(donatService model.DonatService) echo.HandlerFunc {
ctx := context.Background()
streamerLogin := request.Param("streamer-login")
accessToken := model.Token(request.Request().Header.Get("Authorization"))
outerPageResponse, err := donatService.GetOuterDonatPage(
ctx, streamerLogin, string(accessToken),
ctx, streamerLogin,
)
if outerPageResponse.Login == "" {
return echo.NewHTTPError(http.StatusNotFound, "Пользователь не найден!")

View File

@ -81,7 +81,7 @@ type DonatService interface {
MarkDonatView(ctx context.Context, orderID string) error
GetInnerDonatPage(ctx context.Context, streamerID int, token string) (InnerDonatePageResponse, error)
GetOuterDonatPage(ctx context.Context, streamerLogin string, token string) (OuterDonatePageResponse, error)
GetOuterDonatPage(ctx context.Context, streamerLogin string) (OuterDonatePageResponse, error)
UpdateDonatePage(
ctx context.Context,
streamerID int,
@ -252,6 +252,7 @@ type FileService interface {
}
type StreamerClient interface {
GetAvatarID(token string) (string, error)
GetAvatarIdByToken(token string) (string, error)
GetAvatarById(accountId string) (string, error)
UpdateAvatarID(token string, avatarUUID string) error
}

View File

@ -143,6 +143,7 @@ SELECT
dp.description,
dp.text_after_donat,
dp.streamer_login,
dp.profile_avatar,
-- Поля для хед-изображения
head_img.id AS head_img_id,

View File

@ -9,6 +9,7 @@ import (
"log/slog"
"mime/multipart"
"net/http"
"strconv"
)
type ServiceDonat struct {
@ -217,7 +218,7 @@ func (donatService *ServiceDonat) GetInnerDonatPage(
}
if donatePage.ProfileAvatar == true {
fileId, err := donatService.streamerClient.GetAvatarID(token)
fileId, err := donatService.streamerClient.GetAvatarIdByToken(token)
if err != nil {
slog.Error(err.Error())
}
@ -260,7 +261,6 @@ func (donatService *ServiceDonat) GetInnerDonatPage(
func (donatService *ServiceDonat) GetOuterDonatPage(
ctx context.Context,
streamerLogin string,
token string,
) (model.OuterDonatePageResponse, error) {
donatePage, err := donatService.donatRepo.GetDonatPageByLogin(ctx, streamerLogin)
if err != nil {
@ -271,7 +271,17 @@ func (donatService *ServiceDonat) GetOuterDonatPage(
avatarFileId := donatePage.AvatarFileId
if donatePage.ProfileAvatar == true {
fileId, err := donatService.streamerClient.GetAvatarID(token)
donatModel, err := donatService.donatRepo.GetDonatPageByLogin(ctx, streamerLogin)
if err != nil {
slog.Error(err.Error())
}
streamerID := donatModel.StreamerID
if streamerID == 0 {
slog.Error("Account by login not found")
}
fileId, err := donatService.streamerClient.GetAvatarById(strconv.Itoa(streamerID))
if err != nil {
slog.Error(err.Error())
avatarFileId = donatePage.AvatarFileId

View File

@ -71,7 +71,7 @@ func (c *ClientStreamer) UpdateAvatarID(token string, avatarUUID string) error {
return nil
}
func (c *ClientStreamer) GetAvatarID(token string) (string, error) {
func (c *ClientStreamer) GetAvatarIdByToken(token string) (string, error) {
const endpoint = "/info"
var result model.StreamerInfo
@ -115,6 +115,49 @@ func (c *ClientStreamer) GetAvatarID(token string) (string, error) {
return extractFileID(result.Avatar), nil
}
func (c *ClientStreamer) GetAvatarById(accountId string) (string, error) {
var endpoint = "/info" + "/" + accountId
var result model.StreamerInfo
req, err := http.NewRequest("GET", c.baseURL+endpoint, nil)
if err != nil {
slog.Error("create request failed", "error", err)
return "", fmt.Errorf("request creation error: %w", err)
}
req.Header.Set("Accept", "application/json")
resp, err := c.client.Do(req)
if err != nil {
slog.Error("request failed", "error", err)
return "", fmt.Errorf("HTTP request error: %w", err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
body, _ := io.ReadAll(resp.Body)
slog.Error("unexpected status code",
"status", resp.Status,
"response", string(body))
return "", fmt.Errorf("HTTP %d: %s", resp.StatusCode, resp.Status)
}
rawBody, err := io.ReadAll(resp.Body)
if err != nil {
slog.Error("read body failed", "error", err)
return "", fmt.Errorf("read body error: %w", err)
}
if err := json.Unmarshal(rawBody, &result); err != nil {
slog.Error("JSON parse error",
"error", err,
"response", string(rawBody))
return "", fmt.Errorf("JSON unmarshal error: %w", err)
}
return extractFileID(result.Avatar), nil
}
// extractFileID извлекает последний сегмент URL (fileId)
func extractFileID(avatarURL string) string {
if avatarURL == "" {