diff --git a/sync/signals.py b/sync/signals.py index ed7c2fe..e0c0fba 100644 --- a/sync/signals.py +++ b/sync/signals.py @@ -96,7 +96,14 @@ def notify_impacted_users(instance): def save_model_log_if_possible(instance, signal, created): users = related_users_registry.get_users(instance.id) - # print(f'*** save_model_log >>> users = {users}, instance = {instance}') + logger.debug(f'*** save_model_log_if_possible >>> users from registry = {users}, instance = {instance}') + + if not users: + logger.warning(f'!!! Registry returned empty users for instance {instance.id} ({instance.__class__.__name__})') + # Try to recalculate users as fallback + users = related_users(instance) + logger.info(f'!!! Recalculated users for fallback: {users}') + if users: if signal == post_save or signal == pre_save: if created: @@ -128,17 +135,35 @@ def save_model_log(users, model_operation, model_name, model_id, store_id): logger.info(f'*** creating ModelLogs for: {model_operation} {model_name} : {users}') - with transaction.atomic(): - for user in users: - model_log = ModelLog( - user=user, - operation=model_operation, - model_name=model_name, - model_id=model_id, - store_id=store_id, - device_id=device_id - ) - model_log.save() + try: + with transaction.atomic(): + created_logs = [] + for user in users: + logger.debug(f'Creating ModelLog for user {user.id} ({user.username})') + model_log = ModelLog( + user=user, + operation=model_operation, + model_name=model_name, + model_id=model_id, + store_id=store_id, + device_id=device_id + ) + model_log.save() + created_logs.append(model_log.id) + logger.debug(f'Successfully created ModelLog {model_log.id}') + + logger.info(f'*** Successfully created {len(created_logs)} ModelLogs: {created_logs}') + + # Verify ModelLogs were actually persisted + persisted_count = ModelLog.objects.filter(id__in=created_logs).count() + if persisted_count != len(created_logs): + logger.error(f'*** PERSISTENCE VERIFICATION FAILED! Created {len(created_logs)} ModelLogs but only {persisted_count} were persisted to database') + else: + logger.debug(f'*** PERSISTENCE VERIFIED: All {persisted_count} ModelLogs successfully persisted') + + except Exception as e: + logger.error(f'*** FAILED to create ModelLogs for: {model_operation} {model_name}, users: {[u.id for u in users]}, error: {e}', exc_info=True) + raise # with transaction.atomic(): # for user in users: