56 lines
1.7 KiB
Go
56 lines
1.7 KiB
Go
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
|
||
}
|