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 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():
|
||||
|
@ -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"
|
||||
|
@ -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()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user