Skip to content

Commit 11d718e

Browse files
committed
feat: add field to track the latest advisory for an avid
Signed-off-by: Keshav Priyadarshi <git@keshav.space>
1 parent 1707d1c commit 11d718e

1 file changed

Lines changed: 15 additions & 5 deletions

File tree

vulnerabilities/models.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2886,11 +2886,7 @@ def latest_for_avid(self, avid: str):
28862886
)
28872887

28882888
def latest_per_avid(self):
2889-
return self.order_by(
2890-
"avid",
2891-
F("date_collected").desc(nulls_last=True),
2892-
"-id",
2893-
).distinct("avid")
2889+
return self.filter(is_latest=True)
28942890

28952891
def latest_for_avids(self, avids):
28962892
return self.filter(avid__in=avids).latest_per_avid()
@@ -3007,6 +3003,7 @@ class AdvisoryV2(models.Model):
30073003
max_length=200,
30083004
blank=False,
30093005
null=False,
3006+
db_index=True,
30103007
help_text="Unique ID for the datasource used for this advisory ." "e.g.: nginx_importer_v2",
30113008
)
30123009

@@ -3090,6 +3087,14 @@ class AdvisoryV2(models.Model):
30903087
help_text="UTC Date on which the advisory was collected",
30913088
)
30923089

3090+
is_latest = models.BooleanField(
3091+
default=False,
3092+
blank=False,
3093+
null=False,
3094+
db_index=True,
3095+
help_text="Indicates whether this is the latest version of the advisory identified by its AVID.",
3096+
)
3097+
30933098
original_advisory_text = models.TextField(
30943099
blank=True,
30953100
null=True,
@@ -3142,6 +3147,11 @@ class AdvisoryV2(models.Model):
31423147
class Meta:
31433148
unique_together = ["datasource_id", "advisory_id", "unique_content_id"]
31443149
ordering = ["datasource_id", "advisory_id", "date_published", "unique_content_id"]
3150+
constraints = [
3151+
models.UniqueConstraint(
3152+
fields=["avid"], condition=Q(is_latest=True), name="unique_latest_per_avid"
3153+
)
3154+
]
31453155
indexes = [
31463156
models.Index(
31473157
fields=["avid", "-date_collected", "-id"],

0 commit comments

Comments
 (0)