add router for update filter words
This commit is contained in:
parent
3346e4db1b
commit
62b457d42b
@ -350,16 +350,36 @@ func GetFiltersSettings(donatService model.DonatService) echo.HandlerFunc {
|
||||
// @Tags Donate
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Security BearerAuth
|
||||
// @Param request body model.UpdateFilterSettings true "Update fields"
|
||||
// @Param background formData file false "Background image"
|
||||
// @Success 200 {string} string "Voice 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 /filters-settings [patch]
|
||||
func UpdateFiltersSettings(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.UpdateFilterSettings
|
||||
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())
|
||||
}
|
||||
|
||||
err = donatService.UpdateFiltersSettings(
|
||||
ctx,
|
||||
authData.AccountID,
|
||||
body,
|
||||
)
|
||||
return request.JSON(http.StatusOK, "Success update")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -79,6 +79,7 @@ func IncludeDonatHandlers(
|
||||
server.PATCH(PREFIX+"/voice-settings", UpdateVoiceSettings(donatService))
|
||||
|
||||
server.GET(PREFIX+"/filters-settings", GetFiltersSettings(donatService))
|
||||
server.PATCH(PREFIX+"/filters-settings", UpdateFiltersSettings(donatService))
|
||||
|
||||
server.GET(PREFIX+"/donat/get/:streamerID", GetDonat(donatService))
|
||||
|
||||
|
@ -298,6 +298,11 @@ const docTemplate = `{
|
||||
}
|
||||
},
|
||||
"patch": {
|
||||
"security": [
|
||||
{
|
||||
"BearerAuth": []
|
||||
}
|
||||
],
|
||||
"description": "Update donat filters settings.",
|
||||
"consumes": [
|
||||
"application/json"
|
||||
|
@ -291,6 +291,11 @@
|
||||
}
|
||||
},
|
||||
"patch": {
|
||||
"security": [
|
||||
{
|
||||
"BearerAuth": []
|
||||
}
|
||||
],
|
||||
"description": "Update donat filters settings.",
|
||||
"consumes": [
|
||||
"application/json"
|
||||
|
@ -507,6 +507,8 @@ paths:
|
||||
description: Validation error
|
||||
schema:
|
||||
$ref: '#/definitions/echo.HTTPError'
|
||||
security:
|
||||
- BearerAuth: []
|
||||
summary: Update donat filters settings.
|
||||
tags:
|
||||
- Donate
|
||||
|
@ -94,7 +94,7 @@ type DonatService interface {
|
||||
UpdateVoiceSettings(ctx context.Context, streamerID int, updateModel UpdateVoiceSettings) error
|
||||
|
||||
GetFiltersSettings(ctx context.Context, streamerID int) (FilterSettingResponse, error)
|
||||
UpdateFiltersSettings(ctx context.Context, streamerID StreamerID, updateModel UpdateFilterSettings) error
|
||||
UpdateFiltersSettings(ctx context.Context, streamerID int, updateModel UpdateFilterSettings) error
|
||||
|
||||
GetModerationSettings(ctx context.Context, streamerID StreamerID) (ModerationResponse, error)
|
||||
UpdateModerationSettings(ctx context.Context, streamerID StreamerID, updateModel UpdateModeration) error
|
||||
@ -131,6 +131,10 @@ type DonatRepo interface {
|
||||
|
||||
GetFilterSettingsByStreamerID(ctx context.Context, streamerID int) (int, bool, error)
|
||||
GetFilteredWords(ctx context.Context, streamerID int) ([]string, error)
|
||||
UpdateFilterSettings(ctx context.Context, streamerID int, enableLinks *bool) error
|
||||
AddFilteredWords(ctx context.Context, filterID int, words []string) error
|
||||
RemoveFilteredWords(ctx context.Context, filterID int, words []string) error
|
||||
GetFilterIDByStreamer(ctx context.Context, streamerID int) (int, error)
|
||||
}
|
||||
|
||||
type TargetService interface {
|
||||
|
@ -213,7 +213,7 @@ type FilterSettingResponse struct {
|
||||
}
|
||||
|
||||
type UpdateFilterSettings struct {
|
||||
EnableLinks bool `json:"enable_links"`
|
||||
EnableLinks *bool `json:"enable_links"`
|
||||
AddWords []string `json:"add_words"`
|
||||
RemoveWords []string `json:"remove_words"`
|
||||
}
|
||||
|
@ -285,3 +285,19 @@ SELECT id, enable_links FROM filters WHERE streamer_id = @streamer_id;
|
||||
|
||||
var GetFilterWords = `
|
||||
SELECT word FROM filters_words WHERE donat_filter_id = @donat_filter_id;`
|
||||
|
||||
var UpdateFilterSettings = `
|
||||
UPDATE filters SET enable_links = @enable_links WHERE streamer_id = @streamer_id;`
|
||||
|
||||
var InsertFilteredWordsBatch = `
|
||||
INSERT INTO filters_words (donat_filter_id, word)
|
||||
VALUES %s;
|
||||
`
|
||||
|
||||
var GetFilterIdByStreamerID = `
|
||||
SELECT id FROM filters WHERE streamer_id = @streamer_id;`
|
||||
|
||||
var DeleteFilteredWordsBatch = `
|
||||
DELETE FROM filters_words
|
||||
WHERE donat_filter_id = @donat_filter_id AND word = ANY(@words);
|
||||
`
|
||||
|
@ -465,5 +465,97 @@ func (repoDonat *RepoDonat) GetFilteredWords(
|
||||
}
|
||||
|
||||
return filterWords, nil
|
||||
|
||||
}
|
||||
|
||||
func (repoDonat RepoDonat) UpdateFilterSettings(
|
||||
ctx context.Context,
|
||||
streamerID int,
|
||||
enableLinks *bool,
|
||||
) error {
|
||||
if enableLinks != nil {
|
||||
args := pgx.NamedArgs{
|
||||
"streamer_id": streamerID,
|
||||
"enable_links": enableLinks,
|
||||
}
|
||||
|
||||
err := repoDonat.db.Exec(ctx, sql.UpdateFilterSettings, args)
|
||||
if err != nil {
|
||||
slog.Error("Failed to update filter settings", "error", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (repoDonat *RepoDonat) GetFilterIDByStreamer(
|
||||
ctx context.Context,
|
||||
streamerID int,
|
||||
) (int, error) {
|
||||
args := pgx.NamedArgs{
|
||||
"streamer_id": streamerID,
|
||||
}
|
||||
|
||||
row, err := repoDonat.db.SelectOne(ctx, sql.GetFilterIdByStreamerID, args)
|
||||
if err != nil {
|
||||
slog.Error("Failed to get filter settings", "error", err)
|
||||
return 0, err
|
||||
}
|
||||
var filterID int
|
||||
err = row.Scan(&filterID)
|
||||
if err != nil {
|
||||
slog.Error("Failed to scan filter settings", "error", err)
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return filterID, nil
|
||||
}
|
||||
|
||||
func (repoDonat *RepoDonat) AddFilteredWords(
|
||||
ctx context.Context,
|
||||
filterID int,
|
||||
words []string,
|
||||
) error {
|
||||
if len(words) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
var valueStrings []string
|
||||
var valueArgs []interface{}
|
||||
for i, word := range words {
|
||||
valueStrings = append(valueStrings, fmt.Sprintf("($%d, $%d)", i*2+1, i*2+2))
|
||||
valueArgs = append(valueArgs, filterID, word)
|
||||
}
|
||||
|
||||
query := fmt.Sprintf(sql.InsertFilteredWordsBatch, strings.Join(valueStrings, ","))
|
||||
|
||||
err := repoDonat.db.Exec(ctx, query, valueArgs...)
|
||||
if err != nil {
|
||||
slog.Error("Failed to add filtered words", "error", err)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (repoDonat *RepoDonat) RemoveFilteredWords(
|
||||
ctx context.Context,
|
||||
filterID int,
|
||||
words []string,
|
||||
) error {
|
||||
if len(words) == 0 {
|
||||
return nil // Нет слов для удаления
|
||||
}
|
||||
|
||||
args := pgx.NamedArgs{
|
||||
"donat_filter_id": filterID,
|
||||
"words": words,
|
||||
}
|
||||
|
||||
err := repoDonat.db.Exec(ctx, sql.DeleteFilteredWordsBatch, args)
|
||||
if err != nil {
|
||||
slog.Error("Failed to remove filtered words", "error", err)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -378,9 +378,39 @@ func (donatService *ServiceDonat) GetFiltersSettings(
|
||||
|
||||
func (donatService *ServiceDonat) UpdateFiltersSettings(
|
||||
ctx context.Context,
|
||||
streamerID model.StreamerID,
|
||||
streamerID int,
|
||||
updateModel model.UpdateFilterSettings,
|
||||
) error {
|
||||
filterID, err := donatService.donatRepo.GetFilterIDByStreamer(ctx, streamerID)
|
||||
if err != nil {
|
||||
slog.Error("Failed to get filter ID", "error", err)
|
||||
return err
|
||||
}
|
||||
|
||||
if updateModel.EnableLinks != nil {
|
||||
err = donatService.donatRepo.UpdateFilterSettings(ctx, streamerID, updateModel.EnableLinks)
|
||||
if err != nil {
|
||||
slog.Error("Failed to update filter settings", "error", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if len(updateModel.AddWords) > 0 {
|
||||
err = donatService.donatRepo.AddFilteredWords(ctx, filterID, updateModel.AddWords)
|
||||
if err != nil {
|
||||
slog.Error("Failed to add filtered words", "error", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if len(updateModel.RemoveWords) > 0 {
|
||||
err = donatService.donatRepo.RemoveFilteredWords(ctx, streamerID, updateModel.RemoveWords)
|
||||
if err != nil {
|
||||
slog.Error("Failed to remove filtered words", "error", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user