package engine import ( "context" "time" "git.kingecg.top/kingecg/gomog/internal/database" "git.kingecg.top/kingecg/gomog/pkg/types" ) // CRUDHandler CRUD 操作处理器 type CRUDHandler struct { store *MemoryStore adapter database.DatabaseAdapter } // NewCRUDHandler 创建 CRUD 处理器 func NewCRUDHandler(store *MemoryStore, adapter database.DatabaseAdapter) *CRUDHandler { return &CRUDHandler{ store: store, adapter: adapter, } } // Insert 插入文档 func (h *CRUDHandler) Insert(ctx context.Context, collection string, docs []map[string]interface{}) (*types.InsertResult, error) { result := &types.InsertResult{ OK: 1, InsertedIDs: make(map[int]string), } for i, data := range docs { id := GenerateID() doc := types.Document{ ID: id, Data: data, CreatedAt: time.Now(), UpdatedAt: time.Now(), } if err := h.store.Insert(collection, doc); err != nil { return nil, err } result.InsertedIDs[i] = id result.N++ } // 异步持久化到数据库 go h.persistToDB(ctx, collection) return result, nil } // Update 更新文档 func (h *CRUDHandler) Update(ctx context.Context, collection string, filter types.Filter, update types.Update) (*types.UpdateResult, error) { matched, modified, _, err := h.store.Update(collection, filter, update, false, nil) if err != nil { return nil, err } // 异步持久化到数据库 go h.persistToDB(ctx, collection) return &types.UpdateResult{ OK: 1, N: matched, NModified: modified, }, nil } // Delete 删除文档 func (h *CRUDHandler) Delete(ctx context.Context, collection string, filter types.Filter) (*types.DeleteResult, error) { deleted, err := h.store.Delete(collection, filter) if err != nil { return nil, err } // 异步持久化到数据库 go h.persistToDB(ctx, collection) return &types.DeleteResult{ OK: 1, N: deleted, DeletedCount: deleted, }, nil } // persistToDB 持久化集合到数据库 func (h *CRUDHandler) persistToDB(ctx context.Context, collection string) { if err := h.store.SyncToDB(ctx, collection); err != nil { // 记录错误但不返回 // TODO: 使用日志记录 } } // Now 返回当前时间(用于测试) var Now = time.Now // GenerateID 生成唯一 ID func GenerateID() string { return time.Now().Format("20060102150405.000000000") }