| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- 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()
- }
|