@@ -2862,37 +2862,58 @@ def latest_for_avid(self, avid: str):
28622862 )
28632863
28642864 def latest_per_avid (self ):
2865- latest_ids = (
2866- self .filter (avid = OuterRef ("avid" ))
2867- .order_by (
2868- F ("date_collected" ).desc (nulls_last = True ),
2869- "-id" ,
2870- )
2871- .values ("id" )[:1 ]
2872- )
2873-
2874- return self .filter (id = Subquery (latest_ids ))
2865+ return self .order_by (
2866+ "avid" ,
2867+ F ("date_collected" ).desc (nulls_last = True ),
2868+ "-id" ,
2869+ ).distinct ("avid" )
28752870
28762871 def latest_for_avids (self , avids ):
28772872 return self .filter (avid__in = avids ).latest_per_avid ()
28782873
28792874 def latest_affecting_advisories_for_purl (self , purl ):
2880- return self .filter (
2881- impacted_packages__affecting_packages__package_url = purl
2882- ).latest_per_avid ()
2875+ affecting_exists = ImpactedPackageAffecting .objects .filter (
2876+ impacted_package__advisory_id = OuterRef ("pk" ),
2877+ package__package_url = purl ,
2878+ )
2879+
2880+ return (
2881+ self .annotate (has_affecting = Exists (affecting_exists ))
2882+ .filter (has_affecting = True )
2883+ .latest_per_avid ()
2884+ )
28832885
28842886 def latest_affecting_advisories_for_purls (self , purls ):
2885- return self .filter (
2886- impacted_packages__affecting_packages__package_url__in = purls
2887- ).latest_per_avid ()
2887+ affecting_exists = ImpactedPackageAffecting .objects .filter (
2888+ impacted_package__advisory_id = OuterRef ("pk" ),
2889+ package__package_url__in = purls ,
2890+ )
2891+
2892+ return (
2893+ self .annotate (has_affecting = Exists (affecting_exists ))
2894+ .filter (has_affecting = True )
2895+ .latest_per_avid ()
2896+ )
28882897
28892898 def latest_fixed_by_advisories_for_purl (self , purl ):
2890- return self .filter (impacted_packages__fixed_by_packages__package_url = purl ).latest_per_avid ()
2899+ fixed_exists = ImpactedPackageFixedBy .objects .filter (
2900+ impacted_package__advisory_id = OuterRef ("pk" ),
2901+ package__package_url = purl ,
2902+ )
2903+
2904+ return (
2905+ self .annotate (has_fixed = Exists (fixed_exists )).filter (has_fixed = True ).latest_per_avid ()
2906+ )
28912907
28922908 def latest_fixed_by_advisories_for_purls (self , purls ):
2893- return self .filter (
2894- impacted_packages__fixed_by_packages__package_url__in = purls
2895- ).latest_per_avid ()
2909+ fixed_exists = ImpactedPackageFixedBy .objects .filter (
2910+ impacted_package__advisory_id = OuterRef ("pk" ),
2911+ package__package_url__in = purls ,
2912+ )
2913+
2914+ return (
2915+ self .annotate (has_fixed = Exists (fixed_exists )).filter (has_fixed = True ).latest_per_avid ()
2916+ )
28962917
28972918 def latest_advisories_for_purl (self , purl ):
28982919 return self .filter (
0 commit comments