Initial commit: Basic project structure and dependencies
This commit is contained in:
74
internal/shared/interfaces/repository.go
Normal file
74
internal/shared/interfaces/repository.go
Normal file
@@ -0,0 +1,74 @@
|
||||
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) 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
|
||||
}
|
||||
Reference in New Issue
Block a user