Skip to content

Commit e9014b9

Browse files
committed
Update code
1 parent f0d7376 commit e9014b9

File tree

14 files changed

+110
-59
lines changed

14 files changed

+110
-59
lines changed

backend/apps/github/migrations/0035_alter_user_bio_alter_user_is_owasp_staff.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Generated by Django 5.2.5 on 2025-08-12 18:32
1+
# Generated by Django 5.2.5 on 2025-08-16 02:30
22

33
from django.db import migrations, models
44

@@ -19,7 +19,7 @@ class Migration(migrations.Migration):
1919
name="is_owasp_staff",
2020
field=models.BooleanField(
2121
default=False,
22-
help_text="Indicates if the user is an OWASP Foundation employee.",
22+
help_text="Indicates if the user is OWASP Foundation staff.",
2323
verbose_name="Is OWASP Staff",
2424
),
2525
),

backend/apps/github/migrations/0035_user_badges_alter_user_is_owasp_staff.py

Lines changed: 0 additions & 40 deletions
This file was deleted.

backend/apps/github/models/user.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
from apps.github.models.common import GenericUserModel, NodeModel
1515
from apps.github.models.mixins.user import UserIndexMixin
1616
from apps.github.models.organization import Organization
17-
from apps.owasp.models.badge import Badge
1817

1918

2019
class User(NodeModel, GenericUserModel, TimestampedModel, UserIndexMixin):
@@ -46,14 +45,6 @@ class Meta:
4645
verbose_name="Contributions count", default=0
4746
)
4847

49-
badges = models.ManyToManyField(
50-
Badge,
51-
related_name="users",
52-
blank=True,
53-
verbose_name="Badges",
54-
help_text="Badges assigned to this user.",
55-
)
56-
5748
def __str__(self) -> str:
5849
"""Return a human-readable representation of the user.
5950

backend/apps/nest/Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
nest-update-badges:
2+
@echo "Updating Nest user badges"
3+
@CMD="python manage.py nest_update_badges" $(MAKE) exec-backend-command

backend/apps/nest/management/__init__.py

Whitespace-only changes.

backend/apps/nest/management/commands/__init__.py

Whitespace-only changes.

backend/apps/owasp/management/commands/owasp_update_badges.py renamed to backend/apps/nest/management/commands/nest_update_badges.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from django.core.management.base import BaseCommand
66

77
from apps.github.models.user import User
8-
from apps.owasp.models.badge import Badge
8+
from apps.nest.models.badge import Badge
99

1010
logger = logging.getLogger(__name__)
1111

@@ -20,10 +20,10 @@ class Command(BaseCommand):
2020
def handle(self, *args, **options):
2121
"""Execute the command."""
2222
self.stdout.write("Syncing user badges...")
23-
self.sync_owasp_staff_badge()
23+
self.update_owasp_staff_badge()
2424
self.stdout.write(self.style.SUCCESS("User badges sync completed"))
2525

26-
def sync_owasp_staff_badge(self):
26+
def update_owasp_staff_badge(self):
2727
"""Sync OWASP Staff badge for users."""
2828
# Get or create the OWASP Staff badge
2929
badge, created = Badge.objects.get_or_create(
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Generated by Django 5.2.5 on 2025-08-16 02:30
2+
3+
import django.db.models.deletion
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
dependencies = [
9+
("github", "0035_alter_user_bio_alter_user_is_owasp_staff"),
10+
("nest", "0003_badge"),
11+
]
12+
13+
operations = [
14+
migrations.CreateModel(
15+
name="UserBadge",
16+
fields=[
17+
(
18+
"id",
19+
models.BigAutoField(
20+
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
21+
),
22+
),
23+
("nest_created_at", models.DateTimeField(auto_now_add=True)),
24+
("nest_updated_at", models.DateTimeField(auto_now=True)),
25+
(
26+
"note",
27+
models.CharField(
28+
blank=True,
29+
default="",
30+
help_text="Optional note of the user badge.",
31+
max_length=255,
32+
verbose_name="Note",
33+
),
34+
),
35+
(
36+
"badge",
37+
models.ForeignKey(
38+
on_delete=django.db.models.deletion.CASCADE,
39+
related_name="users",
40+
to="nest.badge",
41+
verbose_name="Badge",
42+
),
43+
),
44+
(
45+
"user",
46+
models.ForeignKey(
47+
on_delete=django.db.models.deletion.CASCADE,
48+
related_name="badges",
49+
to="github.user",
50+
verbose_name="User",
51+
),
52+
),
53+
],
54+
options={
55+
"verbose_name_plural": "User badges",
56+
"db_table": "nest_user_badges",
57+
},
58+
),
59+
]

backend/apps/nest/models/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
from .api_key import ApiKey
22
from .badge import Badge
33
from .user import User
4+
from .user_badges import UserBadge
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
"""A model representing badges linked to users (GitHub user entity)."""
2+
3+
from __future__ import annotations
4+
5+
from django.db import models
6+
7+
from apps.common.models import BulkSaveModel, TimestampedModel
8+
9+
10+
class UserBadge(BulkSaveModel, TimestampedModel):
11+
"""Represents a user badge relation."""
12+
13+
class Meta:
14+
db_table = "nest_user_badges"
15+
verbose_name_plural = "User badges"
16+
17+
note = models.CharField(
18+
verbose_name="Note",
19+
max_length=255,
20+
blank=True,
21+
default="",
22+
help_text="Optional note of the user badge.",
23+
)
24+
25+
# FKs.
26+
badge = models.ForeignKey(
27+
"nest.Badge",
28+
related_name="users",
29+
on_delete=models.CASCADE,
30+
verbose_name="Badge",
31+
)
32+
user = models.ForeignKey(
33+
"github.User",
34+
related_name="badges",
35+
on_delete=models.CASCADE,
36+
verbose_name="User",
37+
)
38+
39+
def __str__(self) -> str:
40+
"""Return a human-readable representation of the user badge."""
41+
return f"{self.user.username} - {self.badge.name}"

0 commit comments

Comments
 (0)