diff --git a/frontend/pages/group/notifiers.vue b/frontend/pages/group/notifiers.vue index f5e532b11db9..607d47749b07 100644 --- a/frontend/pages/group/notifiers.vue +++ b/frontend/pages/group/notifiers.vue @@ -3,7 +3,7 @@ @@ -35,8 +35,6 @@ - - @@ -59,36 +57,38 @@

What events should this notifier subscribe to?

- +
+
+

+ {{ sec.text }} +

+ +
+
+ + diff --git a/mealie/routes/groups/controller_mealplan.py b/mealie/routes/groups/controller_mealplan.py index e4699096286c..dc2064c25eba 100644 --- a/mealie/routes/groups/controller_mealplan.py +++ b/mealie/routes/groups/controller_mealplan.py @@ -5,7 +5,8 @@ from fastapi import APIRouter, Depends, HTTPException from mealie.core.exceptions import mealie_registered_exceptions from mealie.repos.repository_meals import RepositoryMeals -from mealie.routes._base import BaseUserController, controller +from mealie.routes._base import controller +from mealie.routes._base.base_controllers import BaseCrudController from mealie.routes._base.mixins import HttpRepo from mealie.schema import mapper from mealie.schema.meal_plan import CreatePlanEntry, ReadPlanEntry, SavePlanEntry, UpdatePlanEntry @@ -14,12 +15,13 @@ from mealie.schema.meal_plan.plan_rules import PlanRulesDay from mealie.schema.recipe.recipe import Recipe from mealie.schema.response.pagination import PaginationQuery from mealie.schema.response.responses import ErrorResponse +from mealie.services.event_bus_service.event_types import EventMealplanCreatedData, EventTypes router = APIRouter(prefix="/groups/mealplans", tags=["Groups: Mealplans"]) @controller(router) -class GroupMealplanController(BaseUserController): +class GroupMealplanController(BaseCrudController): @cached_property def repo(self) -> RepositoryMeals: return self.repos.meals.by_group(self.group_id) @@ -117,7 +119,21 @@ class GroupMealplanController(BaseUserController): @router.post("", response_model=ReadPlanEntry, status_code=201) def create_one(self, data: CreatePlanEntry): data = mapper.cast(data, SavePlanEntry, group_id=self.group.id) - return self.mixins.create_one(data) + result = self.mixins.create_one(data) + + self.publish_event( + event_type=EventTypes.mealplan_entry_created, + document_data=EventMealplanCreatedData( + mealplan_id=result.id, + recipe_id=data.recipe_id, + recipe_name=result.recipe.name if result.recipe else None, + recipe_slug=result.recipe.slug if result.recipe else None, + date=data.date, + ), + message=f"Mealplan entry created for {data.date} for {data.entry_type}", + ) + + return result @router.get("/{item_id}", response_model=ReadPlanEntry) def get_one(self, item_id: int): diff --git a/mealie/routes/users/registration.py b/mealie/routes/users/registration.py index ded69b4c54bf..dd30684edc99 100644 --- a/mealie/routes/users/registration.py +++ b/mealie/routes/users/registration.py @@ -1,4 +1,4 @@ -from fastapi import APIRouter, HTTPException, status +from fastapi import APIRouter, Depends, HTTPException, status from mealie.core.config import get_app_settings from mealie.repos.all_repositories import get_repositories @@ -6,6 +6,8 @@ from mealie.routes._base import BasePublicController, controller from mealie.schema.response import ErrorResponse from mealie.schema.user.registration import CreateUserRegistration from mealie.schema.user.user import UserOut +from mealie.services.event_bus_service.event_bus_service import EventBusService +from mealie.services.event_bus_service.event_types import EventTypes, EventUserSignupData from mealie.services.user_services.registration_service import RegistrationService router = APIRouter(prefix="/register") @@ -13,6 +15,8 @@ router = APIRouter(prefix="/register") @controller(router) class RegistrationController(BasePublicController): + event_bus: EventBusService = Depends(EventBusService.create) + @router.post("", response_model=UserOut, status_code=status.HTTP_201_CREATED) def register_new_user(self, data: CreateUserRegistration): settings = get_app_settings() @@ -29,4 +33,13 @@ class RegistrationController(BasePublicController): self.translator, ) - return registration_service.register_user(data) + result = registration_service.register_user(data) + + self.event_bus.dispatch( + integration_id="registration", + group_id=result.group_id, + event_type=EventTypes.user_signup, + document_data=EventUserSignupData(username=result.username, email=result.email), + ) + + return result diff --git a/mealie/services/event_bus_service/event_types.py b/mealie/services/event_bus_service/event_types.py index 9b354baf17bb..93529f1db6a2 100644 --- a/mealie/services/event_bus_service/event_types.py +++ b/mealie/services/event_bus_service/event_types.py @@ -1,5 +1,5 @@ import uuid -from datetime import datetime +from datetime import date, datetime from enum import Enum, auto from typing import Any @@ -57,6 +57,8 @@ class EventTypes(Enum): class EventDocumentType(Enum): generic = "generic" + user = "user" + category = "category" cookbook = "cookbook" mealplan = "mealplan" @@ -82,6 +84,23 @@ class EventDocumentDataBase(MealieModel): ... +class EventMealplanCreatedData(EventDocumentDataBase): + document_type = EventDocumentType.mealplan + operation = EventOperation.create + mealplan_id: int + date: date + recipe_id: UUID4 | None + recipe_name: str | None + recipe_slug: str | None + + +class EventUserSignupData(EventDocumentDataBase): + document_type = EventDocumentType.user + operation = EventOperation.create + username: str + email: str + + class EventCategoryData(EventDocumentDataBase): document_type = EventDocumentType.category category_id: UUID4 diff --git a/mealie/services/user_services/registration_service.py b/mealie/services/user_services/registration_service.py index f74ffb02737f..fc536fe1808a 100644 --- a/mealie/services/user_services/registration_service.py +++ b/mealie/services/user_services/registration_service.py @@ -70,7 +70,6 @@ class RegistrationService: if registration.group: new_group = True group = self._register_new_group() - elif registration.group_token and registration.group_token != "": token_entry = self.repos.group_invite_tokens.get_one(registration.group_token) if not token_entry: @@ -88,9 +87,7 @@ class RegistrationService: user = self._create_new_user(group, new_group) if new_group and registration.seed_data: - seeder_service = SeederService(self.repos, user, group) - seeder_service.seed_foods(registration.locale) seeder_service.seed_labels(registration.locale) seeder_service.seed_units(registration.locale)