add router for update avatar

This commit is contained in:
harold 2025-04-09 10:44:49 +05:00
parent d0742f49dd
commit 22e6d69e4e
6 changed files with 80 additions and 3 deletions

View File

@ -23,7 +23,7 @@ import (
// @Failure 422 {object} echo.HTTPError "Validation error (specific cases, might overlap with 400/500)"
// @Failure 500 {object} echo.HTTPError "Internal server error (e.g., failed to save file, DB error)"
// @Router /files [post]
func AddNewFile(fileService model.FileService) echo.HandlerFunc {
func AddNewFile(fileService model.FileService, donatService model.DonatService) echo.HandlerFunc {
return func(request echo.Context) error {
ctx := context.Background()
authData, err := fileService.CheckToken(request)
@ -61,6 +61,17 @@ func AddNewFile(fileService model.FileService) echo.HandlerFunc {
slog.Info("File added successfully", "fileId", fileId, "entity", entity, "accountID", authData.AccountID)
fileResponse, err := fileService.GetFileInfo(ctx, fileId)
if entity == "avatar" {
accessToken := request.Request().Header.Get("Authorization")
err := donatService.UpdateAvatarStreamer(accessToken, fileResponse.ID.String())
if err != nil {
slog.Error("Failed to update avatar streamer", "error", err)
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to update avatar streamer")
}
}
if err != nil {
slog.Error("Failed to get file info after adding", "fileId", fileId, "error", err)
return echo.NewHTTPError(http.StatusInternalServerError, "File saved, but failed to retrieve info: "+err.Error())

View File

@ -48,7 +48,7 @@ func NewApp(
IncludeWidgetHandlers(server, widgetService)
IncludeDonatHandlers(server, donatService, fileService)
IncludeTargetHandlers(server, targetService, donatService, authClient)
IncludeFileHandlers(server, fileService)
IncludeFileHandlers(server, fileService, donatService)
server.Logger.Fatal(server.Start(":8002"))
}
@ -116,8 +116,9 @@ func IncludeWidgetHandlers(
func IncludeFileHandlers(
server *echo.Echo,
fileService model.FileService,
donatService model.DonatService,
) {
server.POST(PREFIX+"/files", files.AddNewFile(fileService))
server.POST(PREFIX+"/files", files.AddNewFile(fileService, donatService))
server.GET(PREFIX+"/files/:file_id", files.GetFile(fileService))
server.GET(PREFIX+"/files/widgets", files.GetWidgetFiles(fileService))
}

View File

@ -106,6 +106,7 @@ type DonatService interface {
GetPlayingDonat(ctx context.Context, streamerID int) (PlayingDonat, error)
UpdateStreamerLogin(ctx context.Context, streamerLogin string, streamerID int) error
UpdateAvatarStreamer(token, avatarId string) error
}
type DonatRepo interface {
@ -252,4 +253,5 @@ type FileService interface {
type StreamerClient interface {
GetAvatarID(token string) (string, error)
UpdateAvatarID(token string, avatarUUID string) error
}

View File

@ -346,3 +346,7 @@ type StreamerInfo struct {
Email string `json:"email"`
Avatar string `json:"avatar"`
}
type UpdateAvatarBody struct {
Avatar string `json:"avatar" validate:"required,uuid4"`
}

View File

@ -676,3 +676,14 @@ func (donatService *ServiceDonat) UpdateStreamerLogin(
}
return nil
}
func (donatService *ServiceDonat) UpdateAvatarStreamer(
token string,
avatarId string,
) error {
err := donatService.streamerClient.UpdateAvatarID(token, avatarId)
if err != nil {
return err
}
return nil
}

View File

@ -23,6 +23,54 @@ type ClientStreamer struct {
baseURL string
}
func (c *ClientStreamer) UpdateAvatarID(token string, avatarUUID string) error {
const endpoint = "/avatar"
// Подготовка тела запроса
requestBody := model.UpdateAvatarBody{
Avatar: avatarUUID,
}
jsonBody, err := json.Marshal(requestBody)
if err != nil {
slog.Error("marshal request body failed", "error", err)
return fmt.Errorf("request body marshal error: %w", err)
}
req, err := http.NewRequest(
"PATCH",
c.baseURL+endpoint,
bytes.NewBuffer(jsonBody),
)
if err != nil {
slog.Error("create request failed", "error", err)
return fmt.Errorf("request creation error: %w", err)
}
// Установка заголовков
req.Header.Set("Authorization", "Bearer "+token)
req.Header.Set("Content-Type", "application/json")
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)
}
return nil
}
func (c *ClientStreamer) GetAvatarID(token string) (string, error) {
const endpoint = "/info"
var result model.StreamerInfo