diff --git a/internal/api/http/handlers/donat/donat.go b/internal/api/http/handlers/donat/donat.go index 59355b9..c3b0984 100644 --- a/internal/api/http/handlers/donat/donat.go +++ b/internal/api/http/handlers/donat/donat.go @@ -6,6 +6,7 @@ import ( _ "donat-widget/internal/model/api" "donat-widget/pkg/custom_response" "donat-widget/pkg/validator" + "github.com/google/uuid" "github.com/labstack/echo/v4" "log/slog" "mime/multipart" @@ -743,3 +744,42 @@ func UpdateLoginDonatePage(donatService model.DonatService) echo.HandlerFunc { } } + +// GetMessageAfterDonat godoc +// @Summary Get message after donat +// @Description Получает список донатов для указанного стримера с пагинацией +// @Tags Donate +// @Accept json +// @Produce json +// @Param order-id path string true "OrderID стримера" +// @Success 200 {object} model.TextAfterPaidDonat "Успешный возврат списка донатов" +// @Failure 400 {object} echo.HTTPError "Некорректный формат streamerID" +// @Failure 500 {object} echo.HTTPError "Внутренняя ошибка сервера" +// @Router /text-after-donat/{order-id} [get] +func GetMessageAfterDonat(donatService model.DonatService) echo.HandlerFunc { + return func(request echo.Context) error { + ctx := context.Background() + + orderId, err := uuid.Parse(request.Param("order-id")) + if err != nil { + return echo.NewHTTPError(http.StatusUnprocessableEntity, "Invalid order id") + } + + textAfterDonat, err := donatService.GetTextAfterDonatByOrder( + ctx, + orderId, + ) + if err != nil { + slog.Error(err.Error()) + if err.Error() == "not found" { + return echo.NewHTTPError(http.StatusNotFound, "Not found active paid donat ") + } + return request.JSON(http.StatusInternalServerError, err.Error()) + } + textAfterDonatResp := model.TextAfterPaidDonat{TextAfterDonat: textAfterDonat} + + slog.Info("get text afetr donat successfully") + return request.JSON(200, textAfterDonatResp) + + } +} diff --git a/internal/app/http/app.go b/internal/app/http/app.go index 3ef5e8c..76bbedf 100644 --- a/internal/app/http/app.go +++ b/internal/app/http/app.go @@ -105,6 +105,7 @@ func IncludeDonatHandlers( server.PATCH(PREFIX+"/donat-moderate/:donat-id", ModerateDonat(donatService)) server.GET(PREFIX+"/get-donat-for-playing/:streamer-id", GetDonatForPlaying(donatService)) + server.GET(PREFIX+"/text-after-donat/:order-id", GetMessageAfterDonat(donatService)) server.POST(PREFIX+"/update-login-donate", UpdateLoginDonatePage(donatService)) } diff --git a/internal/docs/docs.go b/internal/docs/docs.go index 43c5d6a..bb1000d 100644 --- a/internal/docs/docs.go +++ b/internal/docs/docs.go @@ -1105,6 +1105,50 @@ const docTemplate = `{ } } }, + "/text-after-donat/{order-id}": { + "get": { + "description": "Получает список донатов для указанного стримера с пагинацией", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Donate" + ], + "summary": "Get message after donat", + "parameters": [ + { + "type": "string", + "description": "OrderID стримера", + "name": "order-id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Успешный возврат списка донатов", + "schema": { + "$ref": "#/definitions/donat-widget_internal_model.TextAfterPaidDonat" + } + }, + "400": { + "description": "Некорректный формат streamerID", + "schema": { + "$ref": "#/definitions/echo.HTTPError" + } + }, + "500": { + "description": "Внутренняя ошибка сервера", + "schema": { + "$ref": "#/definitions/echo.HTTPError" + } + } + } + } + }, "/update-login-donate": { "post": { "description": "Updates the streamer login associated with the donate page", @@ -2108,6 +2152,14 @@ const docTemplate = `{ } } }, + "donat-widget_internal_model.TextAfterPaidDonat": { + "type": "object", + "properties": { + "text_after_donat": { + "type": "string" + } + } + }, "donat-widget_internal_model.UpdateFilterSettings": { "type": "object", "properties": { diff --git a/internal/docs/swagger.json b/internal/docs/swagger.json index 0503c63..49a719c 100644 --- a/internal/docs/swagger.json +++ b/internal/docs/swagger.json @@ -1098,6 +1098,50 @@ } } }, + "/text-after-donat/{order-id}": { + "get": { + "description": "Получает список донатов для указанного стримера с пагинацией", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Donate" + ], + "summary": "Get message after donat", + "parameters": [ + { + "type": "string", + "description": "OrderID стримера", + "name": "order-id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Успешный возврат списка донатов", + "schema": { + "$ref": "#/definitions/donat-widget_internal_model.TextAfterPaidDonat" + } + }, + "400": { + "description": "Некорректный формат streamerID", + "schema": { + "$ref": "#/definitions/echo.HTTPError" + } + }, + "500": { + "description": "Внутренняя ошибка сервера", + "schema": { + "$ref": "#/definitions/echo.HTTPError" + } + } + } + } + }, "/update-login-donate": { "post": { "description": "Updates the streamer login associated with the donate page", @@ -2101,6 +2145,14 @@ } } }, + "donat-widget_internal_model.TextAfterPaidDonat": { + "type": "object", + "properties": { + "text_after_donat": { + "type": "string" + } + } + }, "donat-widget_internal_model.UpdateFilterSettings": { "type": "object", "properties": { diff --git a/internal/docs/swagger.yaml b/internal/docs/swagger.yaml index 6f7888e..5abb707 100644 --- a/internal/docs/swagger.yaml +++ b/internal/docs/swagger.yaml @@ -441,6 +441,11 @@ definitions: description: Добавляем новые поля для настроек голоса type: string type: object + donat-widget_internal_model.TextAfterPaidDonat: + properties: + text_after_donat: + type: string + type: object donat-widget_internal_model.UpdateFilterSettings: properties: add_words: @@ -1260,6 +1265,35 @@ paths: summary: Get outer donate page info tags: - Donate + /text-after-donat/{order-id}: + get: + consumes: + - application/json + description: Получает список донатов для указанного стримера с пагинацией + parameters: + - description: OrderID стримера + in: path + name: order-id + required: true + type: string + produces: + - application/json + responses: + "200": + description: Успешный возврат списка донатов + schema: + $ref: '#/definitions/donat-widget_internal_model.TextAfterPaidDonat' + "400": + description: Некорректный формат streamerID + schema: + $ref: '#/definitions/echo.HTTPError' + "500": + description: Внутренняя ошибка сервера + schema: + $ref: '#/definitions/echo.HTTPError' + summary: Get message after donat + tags: + - Donate /update-login-donate: post: consumes: diff --git a/internal/model/interfaces.go b/internal/model/interfaces.go index 9231628..ab7f4a1 100644 --- a/internal/model/interfaces.go +++ b/internal/model/interfaces.go @@ -107,6 +107,7 @@ type DonatService interface { GetPlayingDonat(ctx context.Context, streamerID int) (PlayingDonatResponse, error) UpdateStreamerLogin(ctx context.Context, streamerLogin string, streamerID int) error UpdateAvatarStreamer(token, avatarId string) error + GetTextAfterDonatByOrder(ctx context.Context, orderID uuid.UUID) (string, error) } type DonatRepo interface { diff --git a/internal/model/models.go b/internal/model/models.go index 1a5f56a..439253e 100644 --- a/internal/model/models.go +++ b/internal/model/models.go @@ -380,3 +380,7 @@ type CreateDonatResponse struct { PaymentUrl string `json:"payment_url"` OrderID uuid.UUID `json:"order_id"` } + +type TextAfterPaidDonat struct { + TextAfterDonat string `json:"text_after_donat"` +} diff --git a/internal/model/sql/query.go b/internal/model/sql/query.go index b79c459..09ae50d 100644 --- a/internal/model/sql/query.go +++ b/internal/model/sql/query.go @@ -94,6 +94,7 @@ text, amount, donat_user, accepted_time, +paid_time, show_name, show_text, play_content, diff --git a/internal/service/donat/donat.go b/internal/service/donat/donat.go index 6789add..ff60c25 100644 --- a/internal/service/donat/donat.go +++ b/internal/service/donat/donat.go @@ -4,6 +4,7 @@ import ( "context" "donat-widget/internal/model" "donat-widget/internal/model/api" + "errors" "fmt" "github.com/google/uuid" "github.com/labstack/echo/v4" @@ -810,6 +811,25 @@ func (donatService *ServiceDonat) UpdateAvatarStreamer( return nil } +func (donatService *ServiceDonat) GetTextAfterDonatByOrder( + ctx context.Context, + orderID uuid.UUID, +) (string, error) { + donat, err := donatService.donatRepo.GetDonatByOrderID(ctx, orderID.String()) + if err != nil { + return "", err + } + if donat.Paid == nil { + return "", errors.New("not found") + } + + donatePage, err := donatService.donatRepo.GetDonatPage(ctx, donat.StreamerID) + if err != nil { + return "", err + } + return donatePage.TextAfterDonat, nil +} + func (donatService *ServiceDonat) replaceFilteredWords(text string, words []string) string { if len(words) == 0 { return text