75 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 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操作
 | |
| 	Create(ctx context.Context, entity T) (T, error)
 | |
| 	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
 | |
| }
 |