diff --git a/src/fellchensammlung/tasks.py b/src/fellchensammlung/tasks.py index 9f48a07..9a495ea 100644 --- a/src/fellchensammlung/tasks.py +++ b/src/fellchensammlung/tasks.py @@ -1,3 +1,5 @@ +import logging + from celery.app import shared_task from django.utils import timezone 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.misc import healthcheck_ok from .models import Location, AdoptionNotice, Timestamp +from .tools.search import notify_search_subscribers def set_timestamp(key: str): @@ -40,6 +43,11 @@ def add_adoption_notice_location(pk): Location.add_location_to_object(instance) 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") def task_healthcheck(): diff --git a/src/fellchensammlung/tools/search.py b/src/fellchensammlung/tools/search.py index efa63a8..2d146ef 100644 --- a/src/fellchensammlung/tools/search.py +++ b/src/fellchensammlung/tools/search.py @@ -6,11 +6,13 @@ from ..forms import AdoptionNoticeSearchForm 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. 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(): if search_subscription.adoption_notice_fits_search(adoption_notice): notification_text = f"{_('Zu deiner Suche')} {search_subscription} wurde eine neue Vermittlung gefunden" diff --git a/src/fellchensammlung/views.py b/src/fellchensammlung/views.py index 4d7416f..8cef5fc 100644 --- a/src/fellchensammlung/views.py +++ b/src/fellchensammlung/views.py @@ -25,7 +25,7 @@ from .tools.geo import GeoAPI from .tools.metrics import gather_metrics_data from .tools.admin import clean_locations, get_unchecked_adoption_notices, deactivate_unchecked_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 .tools.search import Search @@ -219,6 +219,7 @@ def add_adoption_notice(request): # Set correct status if request.user.trust_level >= TrustLevel.MODERATOR: an_instance.set_active() + notify_subscribers.delay_on_commit(an_instance.pk) else: an_instance.set_unchecked()