feat: Add notification for newly created ANs
This commit is contained in:
parent
b993621773
commit
3306f3e783
@ -1,3 +1,5 @@
|
|||||||
|
import logging
|
||||||
|
|
||||||
from celery.app import shared_task
|
from celery.app import shared_task
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from notfellchen.celery import app as celery_app
|
from notfellchen.celery import app as celery_app
|
||||||
@ -5,6 +7,7 @@ from .mail import send_notification_email
|
|||||||
from .tools.admin import clean_locations, deactivate_unchecked_adoption_notices, deactivate_404_adoption_notices
|
from .tools.admin import clean_locations, deactivate_unchecked_adoption_notices, deactivate_404_adoption_notices
|
||||||
from .tools.misc import healthcheck_ok
|
from .tools.misc import healthcheck_ok
|
||||||
from .models import Location, AdoptionNotice, Timestamp
|
from .models import Location, AdoptionNotice, Timestamp
|
||||||
|
from .tools.search import notify_search_subscribers
|
||||||
|
|
||||||
|
|
||||||
def set_timestamp(key: str):
|
def set_timestamp(key: str):
|
||||||
@ -40,6 +43,11 @@ def add_adoption_notice_location(pk):
|
|||||||
Location.add_location_to_object(instance)
|
Location.add_location_to_object(instance)
|
||||||
set_timestamp("add_adoption_notice_location")
|
set_timestamp("add_adoption_notice_location")
|
||||||
|
|
||||||
|
@celery_app.task(name="commit.notify_subscribers")
|
||||||
|
def notify_subscribers(pk):
|
||||||
|
instance = AdoptionNotice.objects.get(pk=pk)
|
||||||
|
notify_search_subscribers(instance)
|
||||||
|
logging.info(f"Subscribers for AN {pk} have been notified")
|
||||||
|
|
||||||
@celery_app.task(name="tools.healthcheck")
|
@celery_app.task(name="tools.healthcheck")
|
||||||
def task_healthcheck():
|
def task_healthcheck():
|
||||||
|
@ -6,11 +6,13 @@ from ..forms import AdoptionNoticeSearchForm
|
|||||||
from ..models import SearchSubscription, AdoptionNotice, AdoptionNoticeNotification, SexChoicesWithAll, Location
|
from ..models import SearchSubscription, AdoptionNotice, AdoptionNoticeNotification, SexChoicesWithAll, Location
|
||||||
|
|
||||||
|
|
||||||
def notify_search_subscribers(adoption_notice: AdoptionNotice):
|
def notify_search_subscribers(adoption_notice: AdoptionNotice, only_if_active : bool = True):
|
||||||
"""
|
"""
|
||||||
This functions checks for all search subscriptions if the new adoption notice fits the search.
|
This functions checks for all search subscriptions if the new adoption notice fits the search.
|
||||||
If the new adoption notice fits the search subscription, it sends a notification to the user that created the search.
|
If the new adoption notice fits the search subscription, it sends a notification to the user that created the search.
|
||||||
"""
|
"""
|
||||||
|
if only_if_active and not adoption_notice.is_active:
|
||||||
|
return
|
||||||
for search_subscription in SearchSubscription.objects.all():
|
for search_subscription in SearchSubscription.objects.all():
|
||||||
if search_subscription.adoption_notice_fits_search(adoption_notice):
|
if search_subscription.adoption_notice_fits_search(adoption_notice):
|
||||||
notification_text = f"{_('Zu deiner Suche')} {search_subscription} wurde eine neue Vermittlung gefunden"
|
notification_text = f"{_('Zu deiner Suche')} {search_subscription} wurde eine neue Vermittlung gefunden"
|
||||||
|
@ -25,7 +25,7 @@ from .tools.geo import GeoAPI
|
|||||||
from .tools.metrics import gather_metrics_data
|
from .tools.metrics import gather_metrics_data
|
||||||
from .tools.admin import clean_locations, get_unchecked_adoption_notices, deactivate_unchecked_adoption_notices, \
|
from .tools.admin import clean_locations, get_unchecked_adoption_notices, deactivate_unchecked_adoption_notices, \
|
||||||
deactivate_404_adoption_notices
|
deactivate_404_adoption_notices
|
||||||
from .tasks import add_adoption_notice_location
|
from .tasks import add_adoption_notice_location, notify_subscribers
|
||||||
from rest_framework.authtoken.models import Token
|
from rest_framework.authtoken.models import Token
|
||||||
|
|
||||||
from .tools.search import Search
|
from .tools.search import Search
|
||||||
@ -219,6 +219,7 @@ def add_adoption_notice(request):
|
|||||||
# Set correct status
|
# Set correct status
|
||||||
if request.user.trust_level >= TrustLevel.MODERATOR:
|
if request.user.trust_level >= TrustLevel.MODERATOR:
|
||||||
an_instance.set_active()
|
an_instance.set_active()
|
||||||
|
notify_subscribers.delay_on_commit(an_instance.pk)
|
||||||
else:
|
else:
|
||||||
an_instance.set_unchecked()
|
an_instance.set_unchecked()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user