package store import ( "context" "proxyrotator/internal/model" ) // ProxyStore 代理存储接口 type ProxyStore interface { // UpsertMany 批量导入代理(upsert + 去重统计) UpsertMany(ctx context.Context, proxies []model.Proxy) (imported, duplicated int, err error) // List 查询代理列表 List(ctx context.Context, q model.ProxyQuery) ([]model.Proxy, error) // ListPaginated 分页查询代理列表,返回数据和总数 ListPaginated(ctx context.Context, q model.ProxyListQuery) ([]model.Proxy, int, error) // GetByID 根据 ID 获取代理 GetByID(ctx context.Context, id string) (*model.Proxy, error) // UpdateHealth 更新代理健康度 UpdateHealth(ctx context.Context, proxyID string, patch model.HealthPatch) error // Update 更新代理字段 Update(ctx context.Context, id string, patch model.ProxyPatch) error // Delete 删除单个代理 Delete(ctx context.Context, id string) error // DeleteMany 批量删除代理 DeleteMany(ctx context.Context, req model.BulkDeleteRequest) (int64, error) // GetStats 获取代理统计信息 GetStats(ctx context.Context) (*model.ProxyStats, error) // NextIndex RR 原子游标:返回 [0, modulo) 的索引 NextIndex(ctx context.Context, key string, modulo int) (int, error) // CreateLease 创建租约 CreateLease(ctx context.Context, lease model.Lease) error // GetLease 获取租约 GetLease(ctx context.Context, leaseID string) (*model.Lease, error) // DeleteExpiredLeases 删除过期租约 DeleteExpiredLeases(ctx context.Context) (int64, error) // InsertTestLog 插入测试日志 InsertTestLog(ctx context.Context, r model.TestResult, site string) error // Close 关闭连接 Close() error }