Skip to content

Commit 2c310c8

Browse files
committed
Add milestones field to project model
1 parent 9c0de8b commit 2c310c8

File tree

5 files changed

+36
-36
lines changed

5 files changed

+36
-36
lines changed

backend/apps/owasp/api/internal/nodes/project.py

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
from apps.github.api.internal.nodes.pull_request import PullRequestNode
1010
from apps.github.api.internal.nodes.release import ReleaseNode
1111
from apps.github.api.internal.nodes.repository import RepositoryNode
12-
from apps.github.models.milestone import Milestone
1312
from apps.owasp.api.internal.nodes.common import GenericEntityNode
1413
from apps.owasp.api.internal.nodes.project_health_metrics import (
1514
ProjectHealthMetricsNode,
@@ -84,24 +83,10 @@ def recent_issues(self, root: Project) -> list[IssueNode]:
8483
"""Resolve recent issues."""
8584
return root.issues.order_by("-created_at")[:RECENT_ISSUES_LIMIT]
8685

87-
@strawberry_django.field
86+
@strawberry_django.field(prefetch_related=["recent_milestones"])
8887
def recent_milestones(self, root: Project, limit: int = 5) -> list[MilestoneNode]:
8988
"""Resolve recent milestones."""
90-
return (
91-
Milestone.objects.filter(
92-
repository__in=root.repositories.all(),
93-
)
94-
.select_related(
95-
"repository__organization",
96-
"author__owasp_profile",
97-
)
98-
.prefetch_related(
99-
"labels",
100-
)
101-
.order_by("-created_at")[:limit]
102-
if (limit := min(limit, MAX_LIMIT)) > 0
103-
else []
104-
)
89+
return root.milestones.order_by("-created_at")[:limit]
10590

10691
@strawberry_django.field
10792
def recent_pull_requests(self, root: Project) -> list[PullRequestNode]:

backend/apps/owasp/management/commands/owasp_aggregate_projects.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from django.core.management.base import BaseCommand
44

5+
from apps.github.models.milestone import Milestone
56
from apps.owasp.models.project import Project
67

78

@@ -102,6 +103,11 @@ def handle(self, *_args, **options) -> None:
102103
project.languages = sorted(languages)
103104
project.licenses = sorted(licenses)
104105
project.topics = sorted(topics)
106+
project.milestones.set(
107+
Milestone.objects.filter(
108+
repository__in=project.repositories.all(),
109+
)
110+
)
105111

106112
project.has_active_repositories = project.repositories.filter(
107113
is_archived=False,
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Generated by Django 6.0 on 2026-01-23 08:59
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
dependencies = [
8+
("github", "0041_milestone_github_milestone_created_at_and_more"),
9+
("owasp", "0072_project_project_name_gin_idx_and_more"),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name="project",
15+
name="milestones",
16+
field=models.ManyToManyField(
17+
blank=True, to="github.milestone", verbose_name="Milestones"
18+
),
19+
),
20+
]

backend/apps/owasp/models/project.py

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
from apps.common.utils import get_absolute_url
1616
from apps.core.models.prompt import Prompt
1717
from apps.github.models.issue import Issue
18-
from apps.github.models.milestone import Milestone
1918
from apps.github.models.pull_request import PullRequest
2019
from apps.github.models.release import Release
2120
from apps.owasp.models.common import RepositoryBasedEntityModel
@@ -137,6 +136,12 @@ class Meta:
137136
)
138137

139138
# M2Ms.
139+
140+
milestones = models.ManyToManyField(
141+
"github.Milestone",
142+
verbose_name="Milestones",
143+
blank=True,
144+
)
140145
organizations = models.ManyToManyField(
141146
"github.Organization",
142147
verbose_name="Organizations",
@@ -301,22 +306,6 @@ def published_releases(self):
301306
"repository__organization",
302307
)
303308

304-
@property
305-
def recent_milestones(self):
306-
"""Return recent milestones."""
307-
return (
308-
Milestone.objects.filter(
309-
repository__in=self.repositories.all(),
310-
)
311-
.select_related(
312-
"author",
313-
"repository",
314-
)
315-
.prefetch_related(
316-
"labels",
317-
)
318-
)
319-
320309
@property
321310
def recent_releases_count(self) -> int:
322311
"""Return count of recent releases per a specific period."""

docker-compose/local/compose.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ services:
6666
networks:
6767
- nest-network
6868
volumes:
69-
- db-data:/var/lib/postgresql/data
69+
- db-data-milestones:/var/lib/postgresql/data
7070

7171
docs:
7272
container_name: nest-docs
@@ -143,7 +143,7 @@ networks:
143143
volumes:
144144
backend-venv:
145145
cache-data:
146-
db-data:
146+
db-data-milestones:
147147
docs-venv:
148148
frontend-next:
149149
frontend-node-modules:

0 commit comments

Comments
 (0)