Skip to content

Commit e7f0fb8

Browse files
committed
models: add fields to allow non delegate users to declare interest in reviewing a patch
Users interested in a Patch are linked by the `interested_users` attribute on a Patch through the PatchInterest model. Also added a field to State to indicate how long an interest can last before it expires Signed-off-by: andrepapoti <[email protected]>
1 parent 7494873 commit e7f0fb8

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# Generated by Django 5.0.3 on 2024-04-02 00:11
2+
3+
import datetime
4+
import django.db.models.deletion
5+
import django.utils.timezone
6+
from django.conf import settings
7+
from django.db import migrations, models
8+
9+
10+
class Migration(migrations.Migration):
11+
dependencies = [
12+
('patchwork', '0046_patch_comment_events'),
13+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14+
]
15+
16+
operations = [
17+
migrations.AddField(
18+
model_name='patch',
19+
name='pending_review',
20+
field=models.BooleanField(default=False),
21+
),
22+
migrations.AddField(
23+
model_name='state',
24+
name='review_interest_expiration_time',
25+
field=models.DurationField(default=datetime.timedelta(days=30)),
26+
),
27+
migrations.CreateModel(
28+
name='PatchInterest',
29+
fields=[
30+
(
31+
'id',
32+
models.AutoField(
33+
auto_created=True,
34+
primary_key=True,
35+
serialize=False,
36+
verbose_name='ID',
37+
),
38+
),
39+
(
40+
'last_time_marked_for_review',
41+
models.DateTimeField(default=django.utils.timezone.now),
42+
),
43+
(
44+
'patch',
45+
models.ForeignKey(
46+
on_delete=django.db.models.deletion.CASCADE,
47+
to='patchwork.patch',
48+
),
49+
),
50+
(
51+
'user',
52+
models.ForeignKey(
53+
on_delete=django.db.models.deletion.CASCADE,
54+
to=settings.AUTH_USER_MODEL,
55+
),
56+
),
57+
],
58+
options={
59+
'unique_together': {('patch', 'user')},
60+
},
61+
),
62+
migrations.AddField(
63+
model_name='patch',
64+
name='interested_users',
65+
field=models.ManyToManyField(
66+
related_name='interested_patches',
67+
through='patchwork.PatchInterest',
68+
to=settings.AUTH_USER_MODEL,
69+
),
70+
),
71+
]

patchwork/models.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,9 @@ class State(models.Model):
245245
slug = models.SlugField(max_length=100, unique=True)
246246
ordering = models.IntegerField(unique=True)
247247
action_required = models.BooleanField(default=True)
248+
review_interest_expiration_time = models.DurationField(
249+
default=datetime.timedelta(days=30)
250+
)
248251

249252
def __str__(self):
250253
return self.name
@@ -499,6 +502,10 @@ class Patch(SubmissionMixin):
499502
null=True,
500503
on_delete=models.CASCADE,
501504
)
505+
interested_users = models.ManyToManyField(
506+
User, through='PatchInterest', related_name='interested_patches'
507+
)
508+
pending_review = models.BooleanField(default=False)
502509
state = models.ForeignKey(State, null=True, on_delete=models.CASCADE)
503510
archived = models.BooleanField(default=False)
504511
hash = HashField(null=True, blank=True)
@@ -729,6 +736,15 @@ class Meta:
729736
]
730737

731738

739+
class PatchInterest(models.Model):
740+
patch = models.ForeignKey(Patch, on_delete=models.CASCADE)
741+
user = models.ForeignKey(User, on_delete=models.CASCADE)
742+
last_time_marked_for_review = models.DateTimeField(default=tz_utils.now)
743+
744+
class Meta:
745+
unique_together = [('patch', 'user')]
746+
747+
732748
class CoverComment(EmailMixin, models.Model):
733749
cover = models.ForeignKey(
734750
Cover,

0 commit comments

Comments
 (0)