package service import ( "errors" "gorm.io/gorm" "github.com/sundynix/pets-be/internal/ai" "github.com/sundynix/pets-be/internal/config" "github.com/sundynix/pets-be/internal/model" "github.com/sundynix/pets-be/internal/storage" ) // ErrNotFound 资源不存在(handler 据此返回 40400) var ErrNotFound = errors.New("not found") // Service 业务逻辑聚合,方法按领域分散在各文件 type Service struct { db *gorm.DB storage *storage.Storage cfg *config.Config ai *ai.Engine } func New(db *gorm.DB, st *storage.Storage, cfg *config.Config, engine *ai.Engine) *Service { return &Service{db: db, storage: st, cfg: cfg, ai: engine} } // ownedPet 校验宠物归属当前用户并返回 func (s *Service) ownedPet(userID, petID uint) (*model.Pet, error) { var pet model.Pet err := s.db.Where("id = ? AND user_id = ?", petID, userID).First(&pet).Error if errors.Is(err, gorm.ErrRecordNotFound) { return nil, ErrNotFound } if err != nil { return nil, err } return &pet, nil }