diff --git a/api/sync.py b/api/sync.py index 44b0a8b..1c27b02 100644 --- a/api/sync.py +++ b/api/sync.py @@ -34,31 +34,8 @@ class DataApi(APIView): model = apps.get_model(app_label='tournaments', model_name=model_name) now = timezone.localtime(timezone.now()) - try: - data_id = data.get('id') - instance = get_data('tournaments', model_name, data_id) - if model_operation == 'DELETE': - # parent_model, parent_id = instance.get_parent_reference() - instance = get_data('tournaments', model_name, data_id) - instance.delete() - return Response(status=status.HTTP_204_NO_CONTENT) - # return self.delete_and_save_log(request, data_id, model_operation, model_name, store_id, now) - else: # PUT - serializer = serializer_class(instance, data=data, context={'request': request}) - if serializer.is_valid(): - if instance.last_update <= serializer.validated_data.get('last_update'): - print('>>> update') - serializer.save() - return Response(serializer.data, status=status.HTTP_200_OK) - # return self.save_and_create_log(request, serializer, model_operation, model_name, store_id, now) - else: - print('>>> return 203') - return Response(serializer.data, status=status.HTTP_203_NON_AUTHORITATIVE_INFORMATION) - else: - return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - except model.DoesNotExist: # POST - print('>>> insert') + if model_operation == 'POST': serializer = serializer_class(data=data, context={'request': request}) if serializer.is_valid(): serializer.save() @@ -66,6 +43,34 @@ class DataApi(APIView): # return self.save_and_create_log(request, serializer, model_operation, model_name, store_id, now) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + elif model_operation == 'PUT': + data_id = data.get('id') + instance = get_data('tournaments', model_name, data_id) + serializer = serializer_class(instance, data=data, context={'request': request}) + if serializer.is_valid(): + if instance.last_update <= serializer.validated_data.get('last_update'): + print('>>> update') + serializer.save() + return Response(serializer.data, status=status.HTTP_200_OK) + # return self.save_and_create_log(request, serializer, model_operation, model_name, store_id, now) + else: + print('>>> return 203') + return Response(serializer.data, status=status.HTTP_203_NON_AUTHORITATIVE_INFORMATION) + else: + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + elif model_operation == 'DELETE': + data_id = data.get('id') + try: + instance = get_data('tournaments', model_name, data_id) + instance.delete() + return Response(status=status.HTTP_204_NO_CONTENT) + except model.DoesNotExist: # POST + delete = ModelLog.objects.filter(model_id=data_id, operation=model_operation).first() + if delete: + return Response(status=status.HTTP_208_ALREADY_REPORTED) + else: + return Response(status=status.HTTP_404_NOT_FOUND) + def get(self, request, *args, **kwargs): last_update_str = request.query_params.get('last_update') diff --git a/api/views.py b/api/views.py index 955c32f..d2a57f4 100644 --- a/api/views.py +++ b/api/views.py @@ -36,7 +36,7 @@ class CustomAuthToken(APIView): true_username = self.get_username_from_email(username) user = authenticate(username=true_username, password=password) - if user is not None: + if user: # if user.device_id is None or user.device_id == device_id or user.username == 'apple-test': # if user.device_id is None or user.device_id == device_id or user.username == 'apple-test': diff --git a/tournaments/signals.py b/tournaments/signals.py index 81c2e29..64e5e66 100644 --- a/tournaments/signals.py +++ b/tournaments/signals.py @@ -54,7 +54,7 @@ def notify_impacted_users(instance, signal): user_ids.add(instance.id) elif isinstance(instance, BaseModel): owner = instance.last_updated_by - if owner is not None: + if owner: user_ids.add(owner.id) if isinstance(instance, BaseModel): @@ -69,7 +69,7 @@ def notify_impacted_users(instance, signal): def save_model_log_if_possible(instance, signal, created): user = instance.last_updated_by - if user is not None: + if user: if signal == post_save or signal == pre_save: if created: operation = ModelOperation.POST @@ -89,6 +89,7 @@ def save_model_log_if_possible(instance, signal, created): users = {user} data_access_list = related_data_access(instance) for data_access in data_access_list: + users.add(data_access.owner) users.update(data_access.shared_with.all()) if isinstance(instance, DataAccess): users.add(instance.owner) @@ -107,9 +108,11 @@ def save_model_log(users, model_operation, model_name, model_id, store_id): now = timezone.now() existing_log = ModelLog.objects.filter(users__in=users, model_id=model_id, operation=model_operation).first() if existing_log: + # print(f'update existing log {existing_log.users} ') existing_log.date = now existing_log.model_operation = model_operation existing_log.save() + existing_log.users.set(users) else: model_log = ModelLog() model_log.operation = model_operation