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") // ErrPayNotReady 支付未接入。会员开通必须走真实支付,未接入前一律拒绝, // 避免「点一下白拿会员」。 var ErrPayNotReady = errors.New("支付功能即将开放,敬请期待") // ErrForbidden 越权操作(如删除别人的内容) var ErrForbidden = errors.New("无权操作") // 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 string) (*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 }