add router for update avatar
This commit is contained in:
parent
d0742f49dd
commit
22e6d69e4e
@ -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())
|
||||
|
@ -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))
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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"`
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user