Skip to content

Commit 3004c56

Browse files
committed
refactored signals code
1 parent b000d3c commit 3004c56

4 files changed

Lines changed: 42 additions & 12 deletions

File tree

feed/constants.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from projects.models import Project
2+
from vacancy.models import Vacancy
3+
4+
SIGNALS_MODELS = Vacancy | Project

feed/services.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from django.contrib.contenttypes.models import ContentType
2+
3+
from feed.constants import SIGNALS_MODELS
4+
from news.models import News
5+
6+
7+
def delete_news_for_model(instance: SIGNALS_MODELS):
8+
content_type = ContentType.objects.get_for_model(instance)
9+
obj = News.objects.filter(content_type=content_type, object_id=instance.id).first()
10+
if obj:
11+
obj.delete()
12+
13+
14+
def create_news_for_model(instance: SIGNALS_MODELS):
15+
content_type = ContentType.objects.get_for_model(instance)
16+
news_instance, created = News.objects.get_or_create(
17+
content_type=content_type, object_id=instance.id
18+
)

feed/signals.py

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,33 @@
1-
from django.contrib.contenttypes.models import ContentType
2-
from django.db.models.signals import post_save
1+
from django.db.models.signals import post_save, post_delete
32
from django.dispatch import receiver
43

5-
from news.models import News
4+
from feed.services import create_news_for_model, delete_news_for_model
65
from projects.models import Project
76

87
from vacancy.models import Vacancy
98

109

1110
@receiver(post_save, sender=Vacancy)
1211
def create_news_on_save(sender, instance, created, **kwargs):
13-
if created:
14-
content_type = ContentType.objects.get_for_model(Vacancy)
15-
news_instance, created = News.objects.get_or_create(
16-
content_type=content_type, object_id=instance.id
17-
)
12+
if instance.is_active:
13+
create_news_for_model(instance)
14+
else:
15+
delete_news_for_model(instance)
16+
17+
18+
@receiver(post_delete, sender=Vacancy)
19+
def delete_news_vacancy(sender, instance, **kwargs):
20+
delete_news_for_model(instance)
1821

1922

2023
@receiver(post_save, sender=Project)
2124
def create_news_on_created_project(sender, instance, created, **kwargs):
2225
if not instance.draft:
23-
content_type = ContentType.objects.get_for_model(Project)
24-
news_instance, created = News.objects.get_or_create(
25-
content_type=content_type, object_id=instance.id
26-
)
26+
create_news_for_model(instance)
27+
else:
28+
delete_news_for_model(instance)
29+
30+
31+
@receiver(post_delete, sender=Project)
32+
def delete_news_project(sender, instance, **kwargs):
33+
delete_news_for_model(instance)

feed/views.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,5 @@ def create(self, request):
8080
object_id=vacancy.id,
8181
datetime_created=vacancy.datetime_created,
8282
)
83+
8384
return Response({"status": "success"}, status=201)

0 commit comments

Comments
 (0)