From 9e2822e70ef6197017029184da63e2c8affc935e Mon Sep 17 00:00:00 2001 From: harold Date: Mon, 28 Apr 2025 22:31:12 +0500 Subject: [PATCH] add fix for settings voice in donat --- internal/api/http/handlers/donat/donat.go | 2 +- internal/docs/docs.go | 26 ++++++++- internal/docs/swagger.json | 26 ++++++++- internal/docs/swagger.yaml | 19 ++++++- internal/model/interfaces.go | 2 +- internal/model/models.go | 16 ++++++ internal/service/donat/donat.go | 64 +++++++++++++++-------- 7 files changed, 125 insertions(+), 30 deletions(-) diff --git a/internal/api/http/handlers/donat/donat.go b/internal/api/http/handlers/donat/donat.go index 5ac0c73..544d8a7 100644 --- a/internal/api/http/handlers/donat/donat.go +++ b/internal/api/http/handlers/donat/donat.go @@ -687,7 +687,7 @@ func InitNewStreamer(donatService model.DonatService) echo.HandlerFunc { // @Accept json // @Produce json // @Param streamer-id path string true "Login стримера" -// @Success 200 {object} model.PlayingDonat "Donat data" +// @Success 200 {object} model.PlayingDonatResponse "Donat data" // @Failure 400 {object} echo.HTTPError "Bad request" // @Failure 401 {object} echo.HTTPError "Unauthorized or expired token" // @Failure 422 {object} echo.HTTPError "Validation error" diff --git a/internal/docs/docs.go b/internal/docs/docs.go index 4fd0a0c..4ae7526 100644 --- a/internal/docs/docs.go +++ b/internal/docs/docs.go @@ -782,7 +782,7 @@ const docTemplate = `{ "200": { "description": "Donat data", "schema": { - "$ref": "#/definitions/donat-widget_internal_model.PlayingDonat" + "$ref": "#/definitions/donat-widget_internal_model.PlayingDonatResponse" } }, "400": { @@ -2039,7 +2039,7 @@ const docTemplate = `{ } } }, - "donat-widget_internal_model.PlayingDonat": { + "donat-widget_internal_model.PlayingDonatResponse": { "type": "object", "properties": { "amount": { @@ -2055,11 +2055,33 @@ const docTemplate = `{ "image_link": { "type": "string" }, + "languages": { + "type": "array", + "items": { + "$ref": "#/definitions/donat-widget_internal_model.Language" + } + }, + "min_price": { + "type": "integer" + }, "order_id": { "type": "string" }, + "scenery": { + "type": "string" + }, "text": { "type": "string" + }, + "voice_enabled": { + "type": "boolean" + }, + "voice_sound_percent": { + "type": "integer" + }, + "voice_speed": { + "description": "Добавляем новые поля для настроек голоса", + "type": "string" } } }, diff --git a/internal/docs/swagger.json b/internal/docs/swagger.json index e34b3c4..4bf8347 100644 --- a/internal/docs/swagger.json +++ b/internal/docs/swagger.json @@ -775,7 +775,7 @@ "200": { "description": "Donat data", "schema": { - "$ref": "#/definitions/donat-widget_internal_model.PlayingDonat" + "$ref": "#/definitions/donat-widget_internal_model.PlayingDonatResponse" } }, "400": { @@ -2032,7 +2032,7 @@ } } }, - "donat-widget_internal_model.PlayingDonat": { + "donat-widget_internal_model.PlayingDonatResponse": { "type": "object", "properties": { "amount": { @@ -2048,11 +2048,33 @@ "image_link": { "type": "string" }, + "languages": { + "type": "array", + "items": { + "$ref": "#/definitions/donat-widget_internal_model.Language" + } + }, + "min_price": { + "type": "integer" + }, "order_id": { "type": "string" }, + "scenery": { + "type": "string" + }, "text": { "type": "string" + }, + "voice_enabled": { + "type": "boolean" + }, + "voice_sound_percent": { + "type": "integer" + }, + "voice_speed": { + "description": "Добавляем новые поля для настроек голоса", + "type": "string" } } }, diff --git a/internal/docs/swagger.yaml b/internal/docs/swagger.yaml index 8638bb9..df4edff 100644 --- a/internal/docs/swagger.yaml +++ b/internal/docs/swagger.yaml @@ -395,7 +395,7 @@ definitions: example: online type: string type: object - donat-widget_internal_model.PlayingDonat: + donat-widget_internal_model.PlayingDonatResponse: properties: amount: type: integer @@ -406,10 +406,25 @@ definitions: type: integer image_link: type: string + languages: + items: + $ref: '#/definitions/donat-widget_internal_model.Language' + type: array + min_price: + type: integer order_id: type: string + scenery: + type: string text: type: string + voice_enabled: + type: boolean + voice_sound_percent: + type: integer + voice_speed: + description: Добавляем новые поля для настроек голоса + type: string type: object donat-widget_internal_model.UpdateFilterSettings: properties: @@ -1026,7 +1041,7 @@ paths: "200": description: Donat data schema: - $ref: '#/definitions/donat-widget_internal_model.PlayingDonat' + $ref: '#/definitions/donat-widget_internal_model.PlayingDonatResponse' "400": description: Bad request schema: diff --git a/internal/model/interfaces.go b/internal/model/interfaces.go index 7f4e8f5..af2729d 100644 --- a/internal/model/interfaces.go +++ b/internal/model/interfaces.go @@ -104,7 +104,7 @@ type DonatService interface { GetDonatModeration(ctx context.Context, streamerID int) (DonationModeration, error) ModerateDonation(ctx context.Context, donatID, streamerID int, updateModel ModerationDonat) error - GetPlayingDonat(ctx context.Context, streamerID int) (PlayingDonat, error) + GetPlayingDonat(ctx context.Context, streamerID int) (PlayingDonatResponse, error) UpdateStreamerLogin(ctx context.Context, streamerLogin string, streamerID int) error UpdateAvatarStreamer(token, avatarId string) error } diff --git a/internal/model/models.go b/internal/model/models.go index 467ef8a..557cf30 100644 --- a/internal/model/models.go +++ b/internal/model/models.go @@ -335,6 +335,22 @@ type PlayingDonat struct { OrderID string `json:"order_id"` } +type PlayingDonatResponse struct { + Duration int `json:"duration" example:"30"` + Image *string `json:"image_link"` + Audio *string `json:"audio_link"` + Text string `json:"text"` + Amount int `json:"amount"` + OrderID string `json:"order_id"` + // Добавляем новые поля для настроек голоса + VoiceSpeed string `json:"voice_speed,omitempty"` + Scenery string `json:"scenery,omitempty"` + VoiceSoundPercent int `json:"voice_sound_percent,omitempty"` + MinPrice int `json:"min_price,omitempty"` + Languages []Language `json:"languages,omitempty"` + VoiceEnabled bool `json:"voice_enabled"` +} + type UpdateLoginBody struct { AccountID int `json:"account_id"` Login string `json:"login"` diff --git a/internal/service/donat/donat.go b/internal/service/donat/donat.go index fd9fc60..350ffde 100644 --- a/internal/service/donat/donat.go +++ b/internal/service/donat/donat.go @@ -709,50 +709,70 @@ func replaceFilteredWords(text string, words []string) string { func (donatService *ServiceDonat) GetPlayingDonat( ctx context.Context, streamerID int, -) (model.PlayingDonat, error) { +) (model.PlayingDonatResponse, error) { playingDonat, err := donatService.donatRepo.GetPlayingDonat(ctx, streamerID) if err != nil { slog.Error("Failed to get playing donat", "error", err) - return model.PlayingDonat{}, err + return model.PlayingDonatResponse{}, err + } + + response := model.PlayingDonatResponse{ + Duration: playingDonat.Duration, + Image: playingDonat.Image, + Audio: playingDonat.Audio, + Text: playingDonat.Text, + Amount: playingDonat.Amount, + OrderID: playingDonat.OrderID, } filteredSettings, err := donatService.GetFiltersSettings(ctx, streamerID) if err != nil { slog.Error("Failed to get filtered words", "error", err) - return model.PlayingDonat{}, err + return model.PlayingDonatResponse{}, err + } + + voiceSettings, err := donatService.donatRepo.GetVoiceSettingsByStreamerID(ctx, streamerID) + if err != nil { + slog.Error("Failed to get voice settings", "error", err) + return model.PlayingDonatResponse{}, err } if len(filteredSettings.FilteredWords) > 0 { - playingDonat.Text = donatService.replaceFilteredWords(playingDonat.Text, filteredSettings.FilteredWords) + response.Text = donatService.replaceFilteredWords(response.Text, filteredSettings.FilteredWords) } if !filteredSettings.EnableLinks { - playingDonat.Text = donatService.replaceLinks(playingDonat.Text) + response.Text = donatService.replaceLinks(response.Text) } - if playingDonat.OrderID == "" { - return playingDonat, nil - } + response.VoiceSpeed = voiceSettings.VoiceSpeed + response.Scenery = voiceSettings.Scenery + response.VoiceSoundPercent = voiceSettings.VoiceSoundPercent + response.MinPrice = voiceSettings.MinPrice + response.Languages = voiceSettings.Languages + response.VoiceEnabled = voiceSettings.Enable - if playingDonat.Image != nil { - imageUuid, err := uuid.Parse(*playingDonat.Image) - if err != nil { - return model.PlayingDonat{}, err + if response.OrderID != "" { + if response.Image != nil { + imageUuid, err := uuid.Parse(*response.Image) + if err != nil { + return model.PlayingDonatResponse{}, err + } + fileUrl := donatService.storage.DownloadLink(imageUuid) + response.Image = &fileUrl } - fileUrl := donatService.storage.DownloadLink(imageUuid) - playingDonat.Image = &fileUrl - } - if playingDonat.Audio != nil { - audioUuid, err := uuid.Parse(*playingDonat.Audio) - if err != nil { - return model.PlayingDonat{}, err + if response.Audio != nil { + audioUuid, err := uuid.Parse(*response.Audio) + if err != nil { + return model.PlayingDonatResponse{}, err + } + fileUrl := donatService.storage.DownloadLink(audioUuid) + response.Audio = &fileUrl } - fileUrl := donatService.storage.DownloadLink(audioUuid) - playingDonat.Audio = &fileUrl } - return playingDonat, nil + return response, nil } func (donatService *ServiceDonat) UpdateStreamerLogin(