from datetime import datetime
import uuid
from oauthlib.common import urlencode, generate_token
-from pytz import utc
from random import randint
from django.db import models
from django.conf import settings
from django.core.exceptions import ValidationError
from django.core.mail import send_mail
from django.urls import reverse
-from django.utils.timezone import now
+from django.utils.timezone import now, utc
from catalogue.models import Book
from catalogue.utils import get_random_hash
from wolnelektury.utils import cached_render, clear_cached_renders
return self.banner or self.banner_group.get_banner()
+class UserProfile(models.Model):
+ user = models.OneToOneField(User, models.CASCADE)
+ notifications = models.BooleanField(default=False)
+
+ @classmethod
+ def get_for(cls, user):
+ obj, created = cls.objects.get_or_create(user=user)
+ return obj
+
+
class UserConfirmation(models.Model):
user = models.ForeignKey(User, models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
favorites=True
)
except cls.DoesNotExist:
+ n = now()
if create:
return cls.objects.create(
user=user,
favorites=True,
- slug=get_random_hash(name),
- updated_at=now()
+ slug=get_random_hash('favorites'),
+ updated_at=n,
+ reported_timestamp=n,
)
else:
return None
return ls.userlistitem_set.filter(deleted=False, book=book).exists()
def append(self, book):
- # TODO: check for duplicates?
n = now()
- item = self.userlistitem_set.create(
+ items = self.userlistitem_set.filter(
book=book,
- order=(self.userlistitem_set.aggregate(m=models.Max('order'))['m'] or 0) + 1,
- updated_at=n,
- reported_timestamp=n,
)
+ if items.exists():
+ items.update(
+ deleted=False,
+ reported_timestamp=n,
+ )
+ item = items.first()
+ else:
+ item = self.userlistitem_set.create(
+ book=book,
+ order=(self.userlistitem_set.aggregate(m=models.Max('order'))['m'] or 0) + 1,
+ updated_at=n,
+ reported_timestamp=n,
+ )
book.update_popularity()
return item