X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/044ee915f89f30b2935dbbcb4a5d5e4a91cbfca9..102acc0b6eb715826f26b5082611604cf6ebe240:/src/social/models.py diff --git a/src/social/models.py b/src/social/models.py index 0b366fc29..7f22f97d2 100644 --- a/src/social/models.py +++ b/src/social/models.py @@ -16,6 +16,7 @@ from django.utils.timezone import now from catalogue.models import Book from catalogue.utils import get_random_hash from wolnelektury.utils import cached_render, clear_cached_renders +from .syncable import Syncable class BannerGroup(models.Model): @@ -180,6 +181,16 @@ class CarouselItem(models.Model): 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) @@ -207,44 +218,6 @@ class UserConfirmation(models.Model): ).send() - -class Syncable: - @classmethod - def sync(cls, user, instance, data): - ts = data.get('timestamp') - if ts is None: - ts = now() - else: - ts = datetime.fromtimestamp(ts, tz=utc) - - if instance is not None: - if ts and ts < instance.reported_timestamp: - return - - if instance is None: - if data.get('deleted'): - return - instance = cls.create_from_data(user, data) - if instance is None: - return - - instance.reported_timestamp = ts - for f in cls.syncable_fields: - if f in data: - setattr(instance, f, data[f]) - - instance.save() - return instance - - @property - def timestamp(self): - return self.updated_at.timestamp() - - @classmethod - def create_from_data(cls, user, data): - raise NotImplementedError - - class Progress(Syncable, models.Model): user = models.ForeignKey(User, models.CASCADE) book = models.ForeignKey('catalogue.Book', models.CASCADE) @@ -281,7 +254,8 @@ class Progress(Syncable, models.Model): def create_from_data(cls, user, data): return cls.objects.create( user=user, - book=data['book'] + book=data['book'], + reported_timestamp=now(), ) def save(self, *args, **kwargs): @@ -363,12 +337,14 @@ class UserList(Syncable, models.Model): 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