From 20015dab98703a4e1809d57496209ceae41cc51c Mon Sep 17 00:00:00 2001 From: Chneemann Date: Tue, 25 Mar 2025 09:03:27 +0100 Subject: [PATCH] feat: integrated signals and moved user receiver logic there; added test for user cache functionality --- user_app/apps.py | 4 +++- user_app/caching.py | 1 + user_app/models.py | 15 ++------------- user_app/signals.py | 11 +++++++++++ user_app/tests.py | 15 ++++++++++++++- 5 files changed, 31 insertions(+), 15 deletions(-) create mode 100644 user_app/signals.py diff --git a/user_app/apps.py b/user_app/apps.py index f2d1d41..41a7627 100644 --- a/user_app/apps.py +++ b/user_app/apps.py @@ -1,6 +1,8 @@ from django.apps import AppConfig - class UserAppConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'user_app' + + def ready(self): + import user_app.signals \ No newline at end of file diff --git a/user_app/caching.py b/user_app/caching.py index 1cefd41..d60cbc7 100644 --- a/user_app/caching.py +++ b/user_app/caching.py @@ -19,6 +19,7 @@ def get_cached_user(user_id): if user: user_data = serializers.serialize('json', [user]) cache.set(cache_key, user_data, timeout=3600) + return json.loads(user_data)[0]['fields'] else: return None diff --git a/user_app/models.py b/user_app/models.py index 0686d48..526e250 100644 --- a/user_app/models.py +++ b/user_app/models.py @@ -1,9 +1,6 @@ +import uuid from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin, Group, Permission from django.db import models -from django.db.models.signals import post_save, post_delete -from django.dispatch import receiver -from django.core.cache import cache -import uuid def generate_uuid_without_dashes(): return uuid.uuid4().hex @@ -53,12 +50,4 @@ class User(AbstractBaseUser, PermissionsMixin): REQUIRED_FIELDS = ['first_name'] def __str__(self): - return self.email - -# Cache invalidation -@receiver(post_save, sender=User) -@receiver(post_delete, sender=User) -def clear_user_cache(sender, instance, **kwargs): - """Invalidate cache for the affected user""" - cache_key = f"user_{instance.id}" - cache.delete(cache_key) \ No newline at end of file + return self.email \ No newline at end of file diff --git a/user_app/signals.py b/user_app/signals.py new file mode 100644 index 0000000..e30492a --- /dev/null +++ b/user_app/signals.py @@ -0,0 +1,11 @@ +from django.core.cache import cache +from django.db.models.signals import post_save, post_delete +from django.dispatch import receiver +from .models import User + +@receiver(post_save, sender=User) +@receiver(post_delete, sender=User) +def clear_user_cache(sender, instance, **kwargs): + """Invalidate cache for the affected user""" + cache_key = f"user_{instance.id}" + cache.delete(cache_key) \ No newline at end of file diff --git a/user_app/tests.py b/user_app/tests.py index 7ce503c..da443c3 100644 --- a/user_app/tests.py +++ b/user_app/tests.py @@ -1,3 +1,16 @@ from django.test import TestCase +from .models import User +from .caching import get_cached_user -# Create your tests here. +class UserCacheTest(TestCase): + def test_cache_invalidierung_nach_speichern(self): + user = User.objects.create(first_name="Test", last_name="User", email="test@example.com") + + cached_user = get_cached_user(user.id) + self.assertIsNotNone(cached_user) + + user.first_name = "Updated" + user.save() + + cached_user_after_update = get_cached_user(user.id) + self.assertIsNotNone(cached_user_after_update) \ No newline at end of file