feat: Add notification for newly created ANs

This commit is contained in:
moanos [he/him] 2025-01-01 00:30:14 +01:00
parent b993621773
commit 3306f3e783
3 changed files with 13 additions and 2 deletions

View File

@ -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():

View File

@ -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"

View File

@ -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()