package product import "backend/internal/model" // BatchDeleteResult 批量删除结果 // Logan.Li type BatchDeleteResult struct { Deleted int `json:"deleted"` Skipped int `json:"skipped"` Failed int `json:"failed"` SkippedIDs []uint `json:"skipped_ids,omitempty"` } // BatchDelete 批量删除产品:被 License 引用的跳过;未引用的连同其定价计划一并删除 // Logan.Li func (s *ProductService) BatchDelete(ids []uint) (*BatchDeleteResult, error) { result := &BatchDeleteResult{} seen := map[uint]struct{}{} for _, id := range ids { if id == 0 { continue } if _, ok := seen[id]; ok { continue } seen[id] = struct{}{} var licCount int64 s.db.Model(&model.License{}).Where("product_id = ?", id).Count(&licCount) if licCount > 0 { result.Skipped++ result.SkippedIDs = append(result.SkippedIDs, id) continue } if err := s.db.Delete(&model.Product{}, id).Error; err != nil { result.Failed++ continue } s.db.Where("product_id = ?", id).Delete(&model.Plan{}) result.Deleted++ } return result, nil }