starting work on new sync algorithm

This commit is contained in:
vabene1111 2024-01-01 12:01:39 +01:00
parent 475ce44df9
commit c76f5d9482
4 changed files with 32 additions and 5 deletions

View File

@ -0,0 +1,18 @@
# Generated by Django 4.2.7 on 2023-12-30 08:00
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('cookbook', '0205_alter_food_fdc_id_alter_propertytype_fdc_id'),
]
operations = [
migrations.AddField(
model_name='shoppinglistentry',
name='updated_at',
field=models.DateTimeField(auto_now=True),
),
]

View File

@ -1050,6 +1050,8 @@ class ShoppingListEntry(ExportModelOperationsMixin('shopping_list_entry'), model
checked = models.BooleanField(default=False)
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
completed_at = models.DateTimeField(null=True, blank=True)
delay_until = models.DateTimeField(null=True, blank=True)

View File

@ -1074,7 +1074,7 @@ class ShoppingListEntrySerializer(WritableNestedModelSerializer):
# autosync values are only needed for frequent 'checked' value updating
if self.context['request'] and bool(int(self.context['request'].query_params.get('autosync', False))):
for f in list(set(fields) - set(['id', 'checked'])):
for f in list(set(fields) - set(['id', 'checked', 'updated_at', ])):
del fields[f]
return fields
@ -1118,7 +1118,7 @@ class ShoppingListEntrySerializer(WritableNestedModelSerializer):
fields = (
'id', 'list_recipe', 'food', 'unit', 'ingredient', 'ingredient_note', 'amount', 'order', 'checked',
'recipe_mealplan',
'created_by', 'created_at', 'completed_at', 'delay_until'
'created_by', 'created_at', 'updated_at', 'completed_at', 'delay_until'
)
read_only_fields = ('id', 'created_by', 'created_at',)

View File

@ -1163,6 +1163,11 @@ class ShoppingListEntryViewSet(viewsets.ModelViewSet):
if 'checked' in self.request.query_params or 'recent' in self.request.query_params:
return shopping_helper(self.queryset, self.request)
last_autosync = self.request.query_params.get('last_autosync', None)
if last_autosync:
last_autosync = datetime.datetime.now() # TODO implement
self.queryset = self.queryset.filter(updated_at__gte=last_autosync)
# TODO once old shopping list is removed this needs updated to sharing users in preferences
return self.queryset
@ -1174,11 +1179,13 @@ class ShoppingListViewSet(viewsets.ModelViewSet):
permission_classes = [(CustomIsOwner | CustomIsShared) & CustomTokenHasReadWriteScope]
def get_queryset(self):
return self.queryset.filter(
self.queryset = self.queryset.filter(
Q(created_by=self.request.user)
| Q(shared=self.request.user)
| Q(created_by__in=list(self.request.user.get_shopping_share()))
).filter(space=self.request.space).distinct()
).filter(space=self.request.space)
return self.queryset.distinct()
def get_serializer_class(self):
try: