2025-06-30 19:21:56 +08:00
|
|
|
package interfaces
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"time"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// Entity 通用实体接口
|
|
|
|
|
type Entity interface {
|
|
|
|
|
GetID() string
|
|
|
|
|
GetCreatedAt() time.Time
|
|
|
|
|
GetUpdatedAt() time.Time
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// BaseRepository 基础仓储接口
|
|
|
|
|
type BaseRepository interface {
|
|
|
|
|
// 基础操作
|
|
|
|
|
Delete(ctx context.Context, id string) error
|
|
|
|
|
Count(ctx context.Context, options CountOptions) (int64, error)
|
|
|
|
|
Exists(ctx context.Context, id string) (bool, error)
|
|
|
|
|
|
|
|
|
|
// 软删除支持
|
|
|
|
|
SoftDelete(ctx context.Context, id string) error
|
|
|
|
|
Restore(ctx context.Context, id string) error
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Repository 通用仓储接口,支持泛型
|
|
|
|
|
type Repository[T any] interface {
|
|
|
|
|
BaseRepository
|
|
|
|
|
|
|
|
|
|
// 基础CRUD操作
|
2025-07-13 16:36:20 +08:00
|
|
|
Create(ctx context.Context, entity T) (T, error)
|
2025-06-30 19:21:56 +08:00
|
|
|
GetByID(ctx context.Context, id string) (T, error)
|
|
|
|
|
Update(ctx context.Context, entity T) error
|
|
|
|
|
|
|
|
|
|
// 批量操作
|
|
|
|
|
CreateBatch(ctx context.Context, entities []T) error
|
|
|
|
|
GetByIDs(ctx context.Context, ids []string) ([]T, error)
|
|
|
|
|
UpdateBatch(ctx context.Context, entities []T) error
|
|
|
|
|
DeleteBatch(ctx context.Context, ids []string) error
|
|
|
|
|
|
|
|
|
|
// 查询操作
|
|
|
|
|
List(ctx context.Context, options ListOptions) ([]T, error)
|
|
|
|
|
|
|
|
|
|
// 事务支持
|
|
|
|
|
WithTx(tx interface{}) Repository[T]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ListOptions 列表查询选项
|
|
|
|
|
type ListOptions struct {
|
|
|
|
|
Page int `json:"page"`
|
|
|
|
|
PageSize int `json:"page_size"`
|
|
|
|
|
Sort string `json:"sort"`
|
|
|
|
|
Order string `json:"order"`
|
|
|
|
|
Filters map[string]interface{} `json:"filters"`
|
|
|
|
|
Search string `json:"search"`
|
|
|
|
|
Include []string `json:"include"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// CountOptions 计数查询选项
|
|
|
|
|
type CountOptions struct {
|
|
|
|
|
Filters map[string]interface{} `json:"filters"`
|
|
|
|
|
Search string `json:"search"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// CachedRepository 支持缓存的仓储接口
|
|
|
|
|
type CachedRepository[T Entity] interface {
|
|
|
|
|
Repository[T]
|
|
|
|
|
|
|
|
|
|
// 缓存操作
|
|
|
|
|
InvalidateCache(ctx context.Context, keys ...string) error
|
|
|
|
|
WarmupCache(ctx context.Context) error
|
|
|
|
|
GetCacheKey(id string) string
|
|
|
|
|
}
|