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
|
// @Tags Donate
|
||||||
// @Accept json
|
// @Accept json
|
||||||
// @Produce json
|
// @Produce json
|
||||||
|
// @Security BearerAuth
|
||||||
// @Param request body model.UpdateFilterSettings true "Update fields"
|
// @Param request body model.UpdateFilterSettings true "Update fields"
|
||||||
// @Param background formData file false "Background image"
|
|
||||||
// @Success 200 {string} string "Voice settings updated successfully"
|
// @Success 200 {string} string "Voice settings updated successfully"
|
||||||
// @Failure 400 {object} echo.HTTPError "Bad request"
|
// @Failure 400 {object} echo.HTTPError "Bad request"
|
||||||
// @Failure 401 {object} echo.HTTPError "Unauthorized or expired token"
|
// @Failure 401 {object} echo.HTTPError "Unauthorized or expired token"
|
||||||
// @Failure 422 {object} echo.HTTPError "Validation error"
|
// @Failure 422 {object} echo.HTTPError "Validation error"
|
||||||
// @Router /filters-settings [patch]
|
// @Router /filters-settings [patch]
|
||||||
func UpdateFiltersSettings(donatService model.DonatService) echo.HandlerFunc {
|
func UpdateFiltersSettings(donatService model.DonatService) echo.HandlerFunc {
|
||||||
return func(c echo.Context) error {
|
return func(request echo.Context) error {
|
||||||
return nil
|
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.PATCH(PREFIX+"/voice-settings", UpdateVoiceSettings(donatService))
|
||||||
|
|
||||||
server.GET(PREFIX+"/filters-settings", GetFiltersSettings(donatService))
|
server.GET(PREFIX+"/filters-settings", GetFiltersSettings(donatService))
|
||||||
|
server.PATCH(PREFIX+"/filters-settings", UpdateFiltersSettings(donatService))
|
||||||
|
|
||||||
server.GET(PREFIX+"/donat/get/:streamerID", GetDonat(donatService))
|
server.GET(PREFIX+"/donat/get/:streamerID", GetDonat(donatService))
|
||||||
|
|
||||||
|
@ -298,6 +298,11 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"patch": {
|
"patch": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"BearerAuth": []
|
||||||
|
}
|
||||||
|
],
|
||||||
"description": "Update donat filters settings.",
|
"description": "Update donat filters settings.",
|
||||||
"consumes": [
|
"consumes": [
|
||||||
"application/json"
|
"application/json"
|
||||||
|
@ -291,6 +291,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"patch": {
|
"patch": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"BearerAuth": []
|
||||||
|
}
|
||||||
|
],
|
||||||
"description": "Update donat filters settings.",
|
"description": "Update donat filters settings.",
|
||||||
"consumes": [
|
"consumes": [
|
||||||
"application/json"
|
"application/json"
|
||||||
|
@ -507,6 +507,8 @@ paths:
|
|||||||
description: Validation error
|
description: Validation error
|
||||||
schema:
|
schema:
|
||||||
$ref: '#/definitions/echo.HTTPError'
|
$ref: '#/definitions/echo.HTTPError'
|
||||||
|
security:
|
||||||
|
- BearerAuth: []
|
||||||
summary: Update donat filters settings.
|
summary: Update donat filters settings.
|
||||||
tags:
|
tags:
|
||||||
- Donate
|
- Donate
|
||||||
|
@ -94,7 +94,7 @@ type DonatService interface {
|
|||||||
UpdateVoiceSettings(ctx context.Context, streamerID int, updateModel UpdateVoiceSettings) error
|
UpdateVoiceSettings(ctx context.Context, streamerID int, updateModel UpdateVoiceSettings) error
|
||||||
|
|
||||||
GetFiltersSettings(ctx context.Context, streamerID int) (FilterSettingResponse, 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)
|
GetModerationSettings(ctx context.Context, streamerID StreamerID) (ModerationResponse, error)
|
||||||
UpdateModerationSettings(ctx context.Context, streamerID StreamerID, updateModel UpdateModeration) 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)
|
GetFilterSettingsByStreamerID(ctx context.Context, streamerID int) (int, bool, error)
|
||||||
GetFilteredWords(ctx context.Context, streamerID int) ([]string, 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 {
|
type TargetService interface {
|
||||||
|
@ -213,7 +213,7 @@ type FilterSettingResponse struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type UpdateFilterSettings struct {
|
type UpdateFilterSettings struct {
|
||||||
EnableLinks bool `json:"enable_links"`
|
EnableLinks *bool `json:"enable_links"`
|
||||||
AddWords []string `json:"add_words"`
|
AddWords []string `json:"add_words"`
|
||||||
RemoveWords []string `json:"remove_words"`
|
RemoveWords []string `json:"remove_words"`
|
||||||
}
|
}
|
||||||
|
@ -285,3 +285,19 @@ SELECT id, enable_links FROM filters WHERE streamer_id = @streamer_id;
|
|||||||
|
|
||||||
var GetFilterWords = `
|
var GetFilterWords = `
|
||||||
SELECT word FROM filters_words WHERE donat_filter_id = @donat_filter_id;`
|
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
|
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(
|
func (donatService *ServiceDonat) UpdateFiltersSettings(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
streamerID model.StreamerID,
|
streamerID int,
|
||||||
updateModel model.UpdateFilterSettings,
|
updateModel model.UpdateFilterSettings,
|
||||||
) error {
|
) 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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user