package services import ( "go-todo-api/models" "go-todo-api/repositories" ) // TodoServiceImpl 结构体持有 TodoRepository 接口,实现业务逻辑 type TodoServiceImpl struct { // Repo 字段是 Repository 接口类型,而不是具体实现 Repo repositories.TodoRepository } // NewTodoService 实例化一个新的 TodoService func NewTodoService(repo repositories.TodoRepository) TodoService { return &TodoServiceImpl{Repo: repo} } // FindAllTodos 实现了 Service 接口,直接调用 Repository func (s *TodoServiceImpl) FindAllTodos(userID uint) ([]models.Todo, error) { // 业务逻辑(例如:权限检查、数据缓存等)会在这里添加 // ❗ 修正:将 userID 传递给 Repo return s.Repo.FindAll(userID) } // FindTodoByID 实现了 Service 接口,并处理 Repository 可能返回的错误 func (s *TodoServiceImpl) FindTodoByID(id uint, userID uint) (*models.Todo, error) { // 调用 Repository 查找数据 return s.Repo.FindByID(id, userID) } // DeleteTodoByID 实现了 Service 接口的删除方法 func (s *TodoServiceImpl) DeleteTodoByID(id uint, userID uint) error { // ❗ 调用 Repository 层执行删除 return s.Repo.Delete(id, userID) } // CreateTodo 实现了 Service 接口的创建方法 func (s *TodoServiceImpl) CreateTodo(todo *models.Todo, userID uint) error { // 1. 设置 UserID (这是业务逻辑,在 Service 层完成) todo.UserID = userID // ❗ 调用 Repository 层执行创建 return s.Repo.Create(todo) } // UpdateTodo 实现了 Service 接口的更新方法 func (s *TodoServiceImpl) UpdateTodo(id uint, userID uint, input map[string]interface{}) (*models.Todo, error) { // 1. 先查找记录(Repository层 FindByID 已经实现了) // ❗ 修正:将 userID 传递给 FindByID todo, err := s.Repo.FindByID(id, userID) if err != nil { // 如果未找到或有其他错误,直接返回 return nil, err } // 2. 使用 Repository 层执行更新 // 2. Repository 层执行更新 (Repository 不需知道 UserID,因为它操作的是已找到的 todo 对象) if err := s.Repo.Update(todo, input); err != nil { return nil, err } // 3. 返回更新后的对象 return todo, nil }