From 7d421c24ab0b9e6786704478a49065609ebe67d7 Mon Sep 17 00:00:00 2001 From: harold Date: Sun, 9 Mar 2025 01:23:37 +0500 Subject: [PATCH] add update moderation router logic and some fixes --- internal/api/http/handlers/donat/donat.go | 27 ++++++++++++++++++++--- internal/docs/docs.go | 17 +++++++++++--- internal/docs/swagger.json | 17 +++++++++++--- internal/docs/swagger.yaml | 11 +++++++-- internal/model/interfaces.go | 3 ++- internal/model/models.go | 4 ++-- internal/model/sql/query.go | 8 +++++-- internal/service/donat/donat.go | 13 ++++++++++- 8 files changed, 83 insertions(+), 17 deletions(-) diff --git a/internal/api/http/handlers/donat/donat.go b/internal/api/http/handlers/donat/donat.go index ef4b5f5..bebd908 100644 --- a/internal/api/http/handlers/donat/donat.go +++ b/internal/api/http/handlers/donat/donat.go @@ -421,13 +421,34 @@ func GetModerationSettings(donatService model.DonatService) echo.HandlerFunc { // @Accept json // @Produce json // @Security BearerAuth -// @Success 200 {object} model.UpdateModeration "Update moderation settings" +// @Param request body model.UpdateModeration true "Update fields" +// @Success 200 {string} string "Moderation settings updated successfully" // @Failure 400 {object} echo.HTTPError "Bad request" // @Failure 401 {object} echo.HTTPError "Unauthorized or expired token" // @Failure 422 {object} echo.HTTPError "Validation error" // @Router /moderation-settings [patch] func UpdateModerationSettings(donatService model.DonatService) echo.HandlerFunc { - return func(c echo.Context) error { - return nil + return func(request echo.Context) error { + ctx := context.Background() + + var body model.UpdateModeration + err := validator.ParseAndValidate(&body, request) + if err != nil { + slog.Error(err.Error()) + return echo.NewHTTPError(http.StatusUnprocessableEntity, "Unprocessable Entity") + } + + authData, err := donatService.CheckToken(request) + if err != nil { + slog.Error("Unauthorized") + return echo.NewHTTPError(http.StatusUnauthorized, err.Error()) + } + + donatService.UpdateModerationSettings( + ctx, + authData.AccountID, + body, + ) + return request.JSON(http.StatusOK, "Success update") } } diff --git a/internal/docs/docs.go b/internal/docs/docs.go index 51dcee0..a808959 100644 --- a/internal/docs/docs.go +++ b/internal/docs/docs.go @@ -461,12 +461,23 @@ const docTemplate = `{ "Donate" ], "summary": "Update donat moderation settings", - "responses": { - "200": { - "description": "Update moderation settings", + "parameters": [ + { + "description": "Update fields", + "name": "request", + "in": "body", + "required": true, "schema": { "$ref": "#/definitions/donat-widget_internal_model.UpdateModeration" } + } + ], + "responses": { + "200": { + "description": "Moderation settings updated successfully", + "schema": { + "type": "string" + } }, "400": { "description": "Bad request", diff --git a/internal/docs/swagger.json b/internal/docs/swagger.json index 996a021..f8695f3 100644 --- a/internal/docs/swagger.json +++ b/internal/docs/swagger.json @@ -454,12 +454,23 @@ "Donate" ], "summary": "Update donat moderation settings", - "responses": { - "200": { - "description": "Update moderation settings", + "parameters": [ + { + "description": "Update fields", + "name": "request", + "in": "body", + "required": true, "schema": { "$ref": "#/definitions/donat-widget_internal_model.UpdateModeration" } + } + ], + "responses": { + "200": { + "description": "Moderation settings updated successfully", + "schema": { + "type": "string" + } }, "400": { "description": "Bad request", diff --git a/internal/docs/swagger.yaml b/internal/docs/swagger.yaml index d467b75..f40e3a4 100644 --- a/internal/docs/swagger.yaml +++ b/internal/docs/swagger.yaml @@ -570,13 +570,20 @@ paths: consumes: - application/json description: Update donat moderation settings + parameters: + - description: Update fields + in: body + name: request + required: true + schema: + $ref: '#/definitions/donat-widget_internal_model.UpdateModeration' produces: - application/json responses: "200": - description: Update moderation settings + description: Moderation settings updated successfully schema: - $ref: '#/definitions/donat-widget_internal_model.UpdateModeration' + type: string "400": description: Bad request schema: diff --git a/internal/model/interfaces.go b/internal/model/interfaces.go index ff0d116..91fb499 100644 --- a/internal/model/interfaces.go +++ b/internal/model/interfaces.go @@ -97,7 +97,7 @@ type DonatService interface { UpdateFiltersSettings(ctx context.Context, streamerID int, updateModel UpdateFilterSettings) error GetModerationSettings(ctx context.Context, streamerID int) (ModerationResponse, error) - UpdateModerationSettings(ctx context.Context, streamerID StreamerID, updateModel UpdateModeration) error + UpdateModerationSettings(ctx context.Context, streamerID int, updateModel UpdateModeration) error } type DonatRepo interface { @@ -137,6 +137,7 @@ type DonatRepo interface { GetFilterIDByStreamer(ctx context.Context, streamerID int) (int, error) GetModeration(ctx context.Context, streamerID int) (ModerationResponse, error) + UpdateModeration(ctx context.Context, streamerID int, enable *bool, duration *int) error } type TargetService interface { diff --git a/internal/model/models.go b/internal/model/models.go index be59ed0..aa8a27a 100644 --- a/internal/model/models.go +++ b/internal/model/models.go @@ -224,8 +224,8 @@ type ModerationResponse struct { } type UpdateModeration struct { - Enable bool `json:"enable"` - Duration int `json:"duration"` + Enable *bool `json:"enable"` + Duration *int `json:"duration"` } type CreateWidgetResponse struct { diff --git a/internal/model/sql/query.go b/internal/model/sql/query.go index 5cbdc54..53066ec 100644 --- a/internal/model/sql/query.go +++ b/internal/model/sql/query.go @@ -303,7 +303,11 @@ WHERE donat_filter_id = @donat_filter_id AND word = ANY(@words); ` var UpdateModeration = ` -UPDATE moderation SET (enable, duration) VALUES (@enable, duration) WHERE streamer_id = @streamer_id;` - +UPDATE moderation +SET + enable = COALESCE(@enable, enable), + duration = COALESCE(@duration, duration) +WHERE streamer_id = @streamer_id; +` var GetModeration = ` SELECT enable, duration FROM moderation WHERE streamer_id = @streamer_id;` diff --git a/internal/service/donat/donat.go b/internal/service/donat/donat.go index fde1226..087bc20 100644 --- a/internal/service/donat/donat.go +++ b/internal/service/donat/donat.go @@ -432,8 +432,19 @@ func (donatService *ServiceDonat) GetModerationSettings( func (donatService *ServiceDonat) UpdateModerationSettings( ctx context.Context, - streamerID model.StreamerID, + streamerID int, updateModel model.UpdateModeration, ) error { + err := donatService.donatRepo.UpdateModeration( + ctx, + streamerID, + updateModel.Enable, + updateModel.Duration, + ) + + if err != nil { + slog.Error("Failed to update moderation settings", "error", err) + return err + } return nil }