72 lines
2.0 KiB
Go
72 lines
2.0 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
|
|
"github.com/Wei-Shaw/sub2api/internal/service"
|
|
"github.com/redis/go-redis/v9"
|
|
)
|
|
|
|
const contentModerationFlaggedHashSetKey = "content_moderation:flagged_hashes"
|
|
|
|
type contentModerationHashCache struct {
|
|
rdb *redis.Client
|
|
}
|
|
|
|
func NewContentModerationHashCache(rdb *redis.Client) service.ContentModerationHashCache {
|
|
return &contentModerationHashCache{rdb: rdb}
|
|
}
|
|
|
|
func (c *contentModerationHashCache) RecordFlaggedInputHash(ctx context.Context, inputHash string) error {
|
|
inputHash = strings.TrimSpace(inputHash)
|
|
if c == nil || c.rdb == nil || inputHash == "" {
|
|
return nil
|
|
}
|
|
return c.rdb.SAdd(ctx, contentModerationFlaggedHashSetKey, inputHash).Err()
|
|
}
|
|
|
|
func (c *contentModerationHashCache) HasFlaggedInputHash(ctx context.Context, inputHash string) (bool, error) {
|
|
inputHash = strings.TrimSpace(inputHash)
|
|
if c == nil || c.rdb == nil || inputHash == "" {
|
|
return false, nil
|
|
}
|
|
return c.rdb.SIsMember(ctx, contentModerationFlaggedHashSetKey, inputHash).Result()
|
|
}
|
|
|
|
func (c *contentModerationHashCache) DeleteFlaggedInputHash(ctx context.Context, inputHash string) (bool, error) {
|
|
inputHash = strings.TrimSpace(inputHash)
|
|
if c == nil || c.rdb == nil || inputHash == "" {
|
|
return false, nil
|
|
}
|
|
deleted, err := c.rdb.SRem(ctx, contentModerationFlaggedHashSetKey, inputHash).Result()
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
return deleted > 0, nil
|
|
}
|
|
|
|
func (c *contentModerationHashCache) ClearFlaggedInputHashes(ctx context.Context) (int64, error) {
|
|
if c == nil || c.rdb == nil {
|
|
return 0, nil
|
|
}
|
|
deleted, err := c.rdb.SCard(ctx, contentModerationFlaggedHashSetKey).Result()
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
if deleted == 0 {
|
|
return 0, nil
|
|
}
|
|
if err := c.rdb.Del(ctx, contentModerationFlaggedHashSetKey).Err(); err != nil {
|
|
return 0, err
|
|
}
|
|
return deleted, nil
|
|
}
|
|
|
|
func (c *contentModerationHashCache) CountFlaggedInputHashes(ctx context.Context) (int64, error) {
|
|
if c == nil || c.rdb == nil {
|
|
return 0, nil
|
|
}
|
|
return c.rdb.SCard(ctx, contentModerationFlaggedHashSetKey).Result()
|
|
}
|