+ @classmethod
+ def sync(cls, user, slug, ts, data):
+ obj, _created = cls.objects.get_or_create(user=user, book__slug=slug)
+ if _created or obj.updated_at < ts:
+ if data is not None:
+ obj.deleted = False
+ for k, v in data.items():
+ setattr(obj, k, v)
+ else:
+ obj.deleted = True
+ obj.save()
+