mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-04 14:29:15 +02:00
See #248: model / migration
This commit is contained in:
parent
33b6db8dc1
commit
789bef38cb
5 changed files with 119 additions and 0 deletions
|
@ -4,6 +4,8 @@ from __future__ import absolute_import, unicode_literals
|
|||
import binascii
|
||||
import datetime
|
||||
import os
|
||||
import random
|
||||
import string
|
||||
import uuid
|
||||
|
||||
from django.conf import settings
|
||||
|
@ -79,6 +81,14 @@ class User(AbstractUser):
|
|||
|
||||
last_activity = models.DateTimeField(default=None, null=True, blank=True)
|
||||
|
||||
invitation = models.ForeignKey(
|
||||
"Invitation",
|
||||
related_name="users",
|
||||
null=True,
|
||||
blank=True,
|
||||
on_delete=models.SET_NULL,
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.username
|
||||
|
||||
|
@ -138,3 +148,39 @@ class User(AbstractUser):
|
|||
if current is None or current < now - datetime.timedelta(seconds=delay):
|
||||
self.last_activity = now
|
||||
self.save(update_fields=["last_activity"])
|
||||
|
||||
|
||||
def generate_code(length=10):
|
||||
return "".join(
|
||||
random.SystemRandom().choice(string.ascii_lowercase) for _ in range(length)
|
||||
)
|
||||
|
||||
|
||||
class InvitationQuerySet(models.QuerySet):
|
||||
def open(self):
|
||||
now = timezone.now()
|
||||
qs = self.annotate(_users=models.Count("users"))
|
||||
qs = qs.filter(_users=0)
|
||||
qs = qs.exclude(expiration_date__lte=now)
|
||||
return qs
|
||||
|
||||
|
||||
class Invitation(models.Model):
|
||||
creation_date = models.DateTimeField(default=timezone.now)
|
||||
expiration_date = models.DateTimeField()
|
||||
owner = models.ForeignKey(
|
||||
User, related_name="invitations", on_delete=models.CASCADE
|
||||
)
|
||||
code = models.CharField(max_length=50, unique=True)
|
||||
|
||||
objects = InvitationQuerySet.as_manager()
|
||||
|
||||
def save(self, **kwargs):
|
||||
if not self.code:
|
||||
self.code = generate_code()
|
||||
if not self.expiration_date:
|
||||
self.expiration_date = self.creation_date + datetime.timedelta(
|
||||
days=settings.USERS_INVITATION_EXPIRATION_DAYS
|
||||
)
|
||||
|
||||
return super().save(**kwargs)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue