diff --git a/src/account/migrations/0013_auto_20180203_2007.py b/src/account/migrations/0013_auto_20180203_2007.py new file mode 100644 index 0000000000000000000000000000000000000000..8ac041e4d538e265f8f47fdaae0960ed54edd6b2 --- /dev/null +++ b/src/account/migrations/0013_auto_20180203_2007.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.1 on 2018-02-03 19:07 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0012_auto_20180125_1957'), + ] + + operations = [ + migrations.AlterField( + model_name='profile', + name='join_date', + field=models.DateTimeField(auto_now=True), + ), + ] diff --git a/src/account/migrations/0014_auto_20180203_2010.py b/src/account/migrations/0014_auto_20180203_2010.py new file mode 100644 index 0000000000000000000000000000000000000000..0ad3c0554ec582ff41cc7536f02287c77f3fdb66 --- /dev/null +++ b/src/account/migrations/0014_auto_20180203_2010.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.1 on 2018-02-03 19:10 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0013_auto_20180203_2007'), + ] + + operations = [ + migrations.AlterField( + model_name='deadline', + name='deadline', + field=models.DateTimeField(null=True), + ), + ] diff --git a/src/account/migrations/0015_auto_20180203_2014.py b/src/account/migrations/0015_auto_20180203_2014.py new file mode 100644 index 0000000000000000000000000000000000000000..e823387e6830f772c4651f21c876c0ae0534f4cc --- /dev/null +++ b/src/account/migrations/0015_auto_20180203_2014.py @@ -0,0 +1,23 @@ +# Generated by Django 2.0.1 on 2018-02-03 19:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0014_auto_20180203_2010'), + ] + + operations = [ + migrations.AddField( + model_name='profile', + name='updated_at', + field=models.DateTimeField(auto_now=True), + ), + migrations.AlterField( + model_name='profile', + name='join_date', + field=models.DateTimeField(auto_now_add=True), + ), + ] diff --git a/src/account/models.py b/src/account/models.py index 08fe3b72af54ba8e9eaa5fbee8dd8e38f31e4e79..8e86ff99fb2d707a671af6cb5b92b540f8eb2874 100644 --- a/src/account/models.py +++ b/src/account/models.py @@ -19,7 +19,8 @@ class GroupChoice(models.Model): class Profile(models.Model): - join_date = models.DateField(auto_now=True) + join_date = models.DateTimeField(auto_now_add=True, editable=False) + updated_at = models.DateTimeField(auto_now=True, editable=False) user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE) motivation = models.TextField(null=True) nick = models.CharField(max_length=15, blank=True, null=True) @@ -32,4 +33,4 @@ class Profile(models.Model): class Deadline(SingletonModel): - deadline = models.DateField(null=True) + deadline = models.DateTimeField(null=True) diff --git a/src/account/serializers.py b/src/account/serializers.py index e04ea5808d8183f6be4c64d23ec826497cfe6ba5..bee56c0464103291cef16fc206fcb781b6edc0b1 100644 --- a/src/account/serializers.py +++ b/src/account/serializers.py @@ -10,12 +10,19 @@ class ChoiceSerializer(serializers.ModelSerializer): class ProfileSerializer(serializers.ModelSerializer): groups = serializers.SlugRelatedField(many=True, slug_field="choice", queryset=models.GroupChoice.objects.all()) + updated_at = serializers.DateTimeField(read_only=True) + signed = serializers.BooleanField() class Meta: model = models.Profile - fields = ('id', 'join_date', 'user', 'nick', 'motivation', 'signed', 'groups') + fields = ('id', 'join_date', 'updated_at', 'user', 'nick', 'motivation', 'signed', 'groups') def validate(self, data): - if data['join_date'] > models.Deadline.get_solo().deadline: - raise serializers.ValidationError("join_date more than deadline") + deadline = models.Deadline.get_solo().deadline + if deadline is None: + return data + + if data['signed'] is True and data['updated_at'] > deadline: + raise serializers.ValidationError("You cannot join after the deadline") + return data