diff --git a/mealie/routes/households/controller_webhooks.py b/mealie/routes/households/controller_webhooks.py index 251bb3617..f76e33de9 100644 --- a/mealie/routes/households/controller_webhooks.py +++ b/mealie/routes/households/controller_webhooks.py @@ -10,7 +10,7 @@ from mealie.routes._base.mixins import HttpRepo from mealie.schema import mapper from mealie.schema.household.webhook import CreateWebhook, ReadWebhook, SaveWebhook, WebhookPagination from mealie.schema.response.pagination import PaginationQuery -from mealie.services.scheduler.tasks.post_webhooks import post_group_webhooks, post_single_webhook +from mealie.services.scheduler.tasks.post_webhooks import post_group_webhooks, post_test_webhook router = APIRouter(prefix="/households/webhooks", tags=["Households: Webhooks"]) @@ -55,7 +55,7 @@ class ReadWebhookController(BaseUserController): @router.post("/{item_id}/test") def test_one(self, item_id: UUID4, bg_tasks: BackgroundTasks): webhook = self.mixins.get_one(item_id) - bg_tasks.add_task(post_single_webhook, webhook, "Test Webhook") + bg_tasks.add_task(post_test_webhook, webhook, "Test Webhook") @router.put("/{item_id}", response_model=ReadWebhook) def update_one(self, item_id: UUID4, data: CreateWebhook): diff --git a/mealie/services/event_bus_service/event_bus_listeners.py b/mealie/services/event_bus_service/event_bus_listeners.py index 586876c63..b2cf77abe 100644 --- a/mealie/services/event_bus_service/event_bus_listeners.py +++ b/mealie/services/event_bus_service/event_bus_listeners.py @@ -148,15 +148,23 @@ class WebhookEventListener(EventListenerBase): def publish_to_subscribers(self, event: Event, subscribers: list[ReadWebhook]) -> None: with self.ensure_repos(self.group_id, self.household_id) as repos: - if event.document_data.document_type == EventDocumentType.mealplan: - webhook_data = cast(EventWebhookData, event.document_data) - meal_repo = repos.meals - meal_data = meal_repo.get_meals_by_date_range( - webhook_data.webhook_start_dt, webhook_data.webhook_end_dt - ) - if meal_data: - webhook_data.webhook_body = meal_data - self.publisher.publish(event, [webhook.url for webhook in subscribers]) + webhook_data = cast(EventWebhookData, event.document_data) + webhook_data.webhook_body = None + + match event.document_data.document_type: + case EventDocumentType.mealplan: + meal_repo = repos.meals + meal_data = meal_repo.get_meals_by_date_range( + webhook_data.webhook_start_dt, webhook_data.webhook_end_dt + ) + webhook_data.webhook_body = meal_data or None + case _: + if event.event_type is EventTypes.test_message: + webhook_data.webhook_body = "Test message" + + # Only publish to subscribers if we have a webhook body to send + if webhook_data.webhook_body: + self.publisher.publish(event, [webhook.url for webhook in subscribers]) def get_scheduled_webhooks(self, start_dt: datetime, end_dt: datetime) -> list[ReadWebhook]: """Fetches all scheduled webhooks from the database""" diff --git a/mealie/services/scheduler/tasks/post_webhooks.py b/mealie/services/scheduler/tasks/post_webhooks.py index 5298fa2c8..87feef270 100644 --- a/mealie/services/scheduler/tasks/post_webhooks.py +++ b/mealie/services/scheduler/tasks/post_webhooks.py @@ -79,12 +79,12 @@ def post_group_webhooks( ) -def post_single_webhook(webhook: ReadWebhook, message: str = "") -> None: +def post_test_webhook(webhook: ReadWebhook, message: str = "") -> None: dt = datetime.min.replace(tzinfo=UTC) - event_type = EventTypes.webhook_task + event_type = EventTypes.test_message event_document_data = EventWebhookData( - document_type=EventDocumentType.mealplan, + document_type=EventDocumentType.generic, operation=EventOperation.info, webhook_start_dt=dt, webhook_end_dt=dt,