package repository import ( "context" "haixun-backend/internal/model/scan_post/domain/entity" ) type ListFilter struct { BrandID string TopicID string Priority string ProductFitMin int Recent7dOnly bool Limit int } type PersonaListFilter struct { PersonaID string CopyMissionID string Flow string Limit int } type Repository interface { EnsureIndexes(ctx context.Context) error ClearForPlacementScan(ctx context.Context, tenantID, ownerUID, brandID, topicID string) error UpsertBatchForScan(ctx context.Context, tenantID, ownerUID, brandID, topicID string, posts []entity.ScanPost) (int, error) PruneScanJobPosts(ctx context.Context, tenantID, ownerUID, brandID, topicID, scanJobID string, keepPermalinks []string) error ReplaceForScan(ctx context.Context, tenantID, ownerUID, brandID, scanJobID string, posts []entity.ScanPost) error ReplaceForViralScan(ctx context.Context, tenantID, ownerUID, personaID, copyMissionID, scanJobID string, posts []entity.ScanPost) error Get(ctx context.Context, tenantID, ownerUID, brandID, postID string) (*entity.ScanPost, error) GetForPersona(ctx context.Context, tenantID, ownerUID, personaID, postID string) (*entity.ScanPost, error) UpdateOutreach(ctx context.Context, tenantID, ownerUID, brandID, postID string, patch entity.OutreachPatch) (*entity.ScanPost, error) Delete(ctx context.Context, tenantID, ownerUID, brandID, topicID, postID string) error DeleteMany(ctx context.Context, tenantID, ownerUID, brandID, topicID string, postIDs []string) (int, error) List(ctx context.Context, tenantID, ownerUID string, filter ListFilter) ([]entity.ScanPost, error) ListForPersona(ctx context.Context, tenantID, ownerUID string, filter PersonaListFilter) ([]entity.ScanPost, error) CountByBrand(ctx context.Context, tenantID, ownerUID, brandID string) (int, error) AttachTopicID(ctx context.Context, tenantID, ownerUID, brandID, topicID string) error }