starting work on new sync algorithm
This commit is contained in:
parent
475ce44df9
commit
c76f5d9482
18
cookbook/migrations/0206_shoppinglistentry_updated_at.py
Normal file
18
cookbook/migrations/0206_shoppinglistentry_updated_at.py
Normal 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),
|
||||||
|
),
|
||||||
|
]
|
@ -1050,6 +1050,8 @@ class ShoppingListEntry(ExportModelOperationsMixin('shopping_list_entry'), model
|
|||||||
checked = models.BooleanField(default=False)
|
checked = models.BooleanField(default=False)
|
||||||
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
|
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
|
updated_at = models.DateTimeField(auto_now=True)
|
||||||
|
|
||||||
completed_at = models.DateTimeField(null=True, blank=True)
|
completed_at = models.DateTimeField(null=True, blank=True)
|
||||||
delay_until = models.DateTimeField(null=True, blank=True)
|
delay_until = models.DateTimeField(null=True, blank=True)
|
||||||
|
|
||||||
|
@ -1074,7 +1074,7 @@ class ShoppingListEntrySerializer(WritableNestedModelSerializer):
|
|||||||
|
|
||||||
# autosync values are only needed for frequent 'checked' value updating
|
# 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))):
|
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]
|
del fields[f]
|
||||||
return fields
|
return fields
|
||||||
|
|
||||||
@ -1118,7 +1118,7 @@ class ShoppingListEntrySerializer(WritableNestedModelSerializer):
|
|||||||
fields = (
|
fields = (
|
||||||
'id', 'list_recipe', 'food', 'unit', 'ingredient', 'ingredient_note', 'amount', 'order', 'checked',
|
'id', 'list_recipe', 'food', 'unit', 'ingredient', 'ingredient_note', 'amount', 'order', 'checked',
|
||||||
'recipe_mealplan',
|
'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',)
|
read_only_fields = ('id', 'created_by', 'created_at',)
|
||||||
|
|
||||||
|
@ -1163,6 +1163,11 @@ class ShoppingListEntryViewSet(viewsets.ModelViewSet):
|
|||||||
if 'checked' in self.request.query_params or 'recent' in self.request.query_params:
|
if 'checked' in self.request.query_params or 'recent' in self.request.query_params:
|
||||||
return shopping_helper(self.queryset, self.request)
|
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
|
# TODO once old shopping list is removed this needs updated to sharing users in preferences
|
||||||
return self.queryset
|
return self.queryset
|
||||||
|
|
||||||
@ -1174,11 +1179,13 @@ class ShoppingListViewSet(viewsets.ModelViewSet):
|
|||||||
permission_classes = [(CustomIsOwner | CustomIsShared) & CustomTokenHasReadWriteScope]
|
permission_classes = [(CustomIsOwner | CustomIsShared) & CustomTokenHasReadWriteScope]
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
return self.queryset.filter(
|
self.queryset = self.queryset.filter(
|
||||||
Q(created_by=self.request.user)
|
Q(created_by=self.request.user)
|
||||||
| Q(shared=self.request.user)
|
| Q(shared=self.request.user)
|
||||||
| Q(created_by__in=list(self.request.user.get_shopping_share()))
|
| 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):
|
def get_serializer_class(self):
|
||||||
try:
|
try:
|
||||||
|
Loading…
Reference in New Issue
Block a user