From cda2a107f85db3d713b7e8616d011044eba05316 Mon Sep 17 00:00:00 2001 From: Bohdan Shtepan Date: Wed, 11 Jun 2025 11:33:49 +0200 Subject: [PATCH] feat: Integrate SL alias note in event system. (#2495) * feat: Integrate SL alias note in event system. * fix: fixes protobuf Gencode/Runtime version mismatch. * fix: remove redundant emit_alias_audit_log call. --- app/alias_utils.py | 17 +++++++++++++++++ app/api/views/alias.py | 2 +- app/events/generated/event_pb2.py | 20 +++++++++++--------- app/events/generated/event_pb2.pyi | 16 ++++++++++++++-- proto/event.proto | 7 +++++++ 5 files changed, 50 insertions(+), 12 deletions(-) diff --git a/app/alias_utils.py b/app/alias_utils.py index f9c1208c..15c8f2e8 100644 --- a/app/alias_utils.py +++ b/app/alias_utils.py @@ -34,6 +34,7 @@ from app.events.generated.event_pb2 import ( AliasStatusChanged, EventContent, AliasCreated, + AliasNoteChanged, ) from app.log import LOG from app.models import ( @@ -525,6 +526,22 @@ def change_alias_status( Session.commit() +def change_alias_note(alias: Alias, note: str, commit: bool = False): + LOG.i(f"Changing alias {alias} note.") + + alias.note = note + event = AliasNoteChanged( + id=alias.id, + email=alias.email, + note=note, + ) + + EventDispatcher.send_event(alias.user, EventContent(alias_note_changed=event)) + + if commit: + Session.commit() + + @dataclass class AliasRecipientName: name: str diff --git a/app/api/views/alias.py b/app/api/views/alias.py index 14f2311a..9801fcdd 100644 --- a/app/api/views/alias.py +++ b/app/api/views/alias.py @@ -287,7 +287,7 @@ def update_alias(alias_id): changed = False if "note" in data: new_note = data.get("note") - alias.note = new_note + alias_utils.change_alias_note(alias, new_note) changed_fields.append("note") changed = True diff --git a/app/events/generated/event_pb2.py b/app/events/generated/event_pb2.py index babfc8d2..e3d8a44d 100644 --- a/app/events/generated/event_pb2.py +++ b/app/events/generated/event_pb2.py @@ -24,7 +24,7 @@ _sym_db = _symbol_database.Default() -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0b\x65vent.proto\x12\x12simplelogin_events\":\n\x0fUserPlanChanged\x12\x15\n\rplan_end_time\x18\x01 \x01(\r\x12\x10\n\x08lifetime\x18\x02 \x01(\x08\"\r\n\x0bUserDeleted\"\\\n\x0c\x41liasCreated\x12\n\n\x02id\x18\x01 \x01(\r\x12\r\n\x05\x65mail\x18\x02 \x01(\t\x12\x0c\n\x04note\x18\x03 \x01(\t\x12\x0f\n\x07\x65nabled\x18\x04 \x01(\x08\x12\x12\n\ncreated_at\x18\x05 \x01(\r\"T\n\x12\x41liasStatusChanged\x12\n\n\x02id\x18\x01 \x01(\r\x12\r\n\x05\x65mail\x18\x02 \x01(\t\x12\x0f\n\x07\x65nabled\x18\x03 \x01(\x08\x12\x12\n\ncreated_at\x18\x04 \x01(\r\")\n\x0c\x41liasDeleted\x12\n\n\x02id\x18\x01 \x01(\r\x12\r\n\x05\x65mail\x18\x02 \x01(\t\"D\n\x10\x41liasCreatedList\x12\x30\n\x06\x65vents\x18\x01 \x03(\x0b\x32 .simplelogin_events.AliasCreated\"\x0e\n\x0cUserUnlinked\"\xce\x03\n\x0c\x45ventContent\x12?\n\x10user_plan_change\x18\x01 \x01(\x0b\x32#.simplelogin_events.UserPlanChangedH\x00\x12\x37\n\x0cuser_deleted\x18\x02 \x01(\x0b\x32\x1f.simplelogin_events.UserDeletedH\x00\x12\x39\n\ralias_created\x18\x03 \x01(\x0b\x32 .simplelogin_events.AliasCreatedH\x00\x12\x45\n\x13\x61lias_status_change\x18\x04 \x01(\x0b\x32&.simplelogin_events.AliasStatusChangedH\x00\x12\x39\n\ralias_deleted\x18\x05 \x01(\x0b\x32 .simplelogin_events.AliasDeletedH\x00\x12\x41\n\x11\x61lias_create_list\x18\x06 \x01(\x0b\x32$.simplelogin_events.AliasCreatedListH\x00\x12\x39\n\ruser_unlinked\x18\x07 \x01(\x0b\x32 .simplelogin_events.UserUnlinkedH\x00\x42\t\n\x07\x63ontent\"y\n\x05\x45vent\x12\x0f\n\x07user_id\x18\x01 \x01(\r\x12\x18\n\x10\x65xternal_user_id\x18\x02 \x01(\t\x12\x12\n\npartner_id\x18\x03 \x01(\r\x12\x31\n\x07\x63ontent\x18\x04 \x01(\x0b\x32 .simplelogin_events.EventContentb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0b\x65vent.proto\x12\x12simplelogin_events\":\n\x0fUserPlanChanged\x12\x15\n\rplan_end_time\x18\x01 \x01(\r\x12\x10\n\x08lifetime\x18\x02 \x01(\x08\"\r\n\x0bUserDeleted\"\\\n\x0c\x41liasCreated\x12\n\n\x02id\x18\x01 \x01(\r\x12\r\n\x05\x65mail\x18\x02 \x01(\t\x12\x0c\n\x04note\x18\x03 \x01(\t\x12\x0f\n\x07\x65nabled\x18\x04 \x01(\x08\x12\x12\n\ncreated_at\x18\x05 \x01(\r\"T\n\x12\x41liasStatusChanged\x12\n\n\x02id\x18\x01 \x01(\r\x12\r\n\x05\x65mail\x18\x02 \x01(\t\x12\x0f\n\x07\x65nabled\x18\x03 \x01(\x08\x12\x12\n\ncreated_at\x18\x04 \x01(\r\")\n\x0c\x41liasDeleted\x12\n\n\x02id\x18\x01 \x01(\r\x12\r\n\x05\x65mail\x18\x02 \x01(\t\";\n\x10\x41liasNoteChanged\x12\n\n\x02id\x18\x01 \x01(\r\x12\r\n\x05\x65mail\x18\x02 \x01(\t\x12\x0c\n\x04note\x18\x03 \x01(\t\"D\n\x10\x41liasCreatedList\x12\x30\n\x06\x65vents\x18\x01 \x03(\x0b\x32 .simplelogin_events.AliasCreated\"\x0e\n\x0cUserUnlinked\"\x92\x04\n\x0c\x45ventContent\x12?\n\x10user_plan_change\x18\x01 \x01(\x0b\x32#.simplelogin_events.UserPlanChangedH\x00\x12\x37\n\x0cuser_deleted\x18\x02 \x01(\x0b\x32\x1f.simplelogin_events.UserDeletedH\x00\x12\x39\n\ralias_created\x18\x03 \x01(\x0b\x32 .simplelogin_events.AliasCreatedH\x00\x12\x45\n\x13\x61lias_status_change\x18\x04 \x01(\x0b\x32&.simplelogin_events.AliasStatusChangedH\x00\x12\x39\n\ralias_deleted\x18\x05 \x01(\x0b\x32 .simplelogin_events.AliasDeletedH\x00\x12\x41\n\x11\x61lias_create_list\x18\x06 \x01(\x0b\x32$.simplelogin_events.AliasCreatedListH\x00\x12\x39\n\ruser_unlinked\x18\x07 \x01(\x0b\x32 .simplelogin_events.UserUnlinkedH\x00\x12\x42\n\x12\x61lias_note_changed\x18\x08 \x01(\x0b\x32$.simplelogin_events.AliasNoteChangedH\x00\x42\t\n\x07\x63ontent\"y\n\x05\x45vent\x12\x0f\n\x07user_id\x18\x01 \x01(\r\x12\x18\n\x10\x65xternal_user_id\x18\x02 \x01(\t\x12\x12\n\npartner_id\x18\x03 \x01(\r\x12\x31\n\x07\x63ontent\x18\x04 \x01(\x0b\x32 .simplelogin_events.EventContentb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -41,12 +41,14 @@ if not _descriptor._USE_C_DESCRIPTORS: _globals['_ALIASSTATUSCHANGED']._serialized_end=288 _globals['_ALIASDELETED']._serialized_start=290 _globals['_ALIASDELETED']._serialized_end=331 - _globals['_ALIASCREATEDLIST']._serialized_start=333 - _globals['_ALIASCREATEDLIST']._serialized_end=401 - _globals['_USERUNLINKED']._serialized_start=403 - _globals['_USERUNLINKED']._serialized_end=417 - _globals['_EVENTCONTENT']._serialized_start=420 - _globals['_EVENTCONTENT']._serialized_end=882 - _globals['_EVENT']._serialized_start=884 - _globals['_EVENT']._serialized_end=1005 + _globals['_ALIASNOTECHANGED']._serialized_start=333 + _globals['_ALIASNOTECHANGED']._serialized_end=392 + _globals['_ALIASCREATEDLIST']._serialized_start=394 + _globals['_ALIASCREATEDLIST']._serialized_end=462 + _globals['_USERUNLINKED']._serialized_start=464 + _globals['_USERUNLINKED']._serialized_end=478 + _globals['_EVENTCONTENT']._serialized_start=481 + _globals['_EVENTCONTENT']._serialized_end=1011 + _globals['_EVENT']._serialized_start=1013 + _globals['_EVENT']._serialized_end=1134 # @@protoc_insertion_point(module_scope) diff --git a/app/events/generated/event_pb2.pyi b/app/events/generated/event_pb2.pyi index 83369fcc..ac0980c1 100644 --- a/app/events/generated/event_pb2.pyi +++ b/app/events/generated/event_pb2.pyi @@ -51,6 +51,16 @@ class AliasDeleted(_message.Message): email: str def __init__(self, id: _Optional[int] = ..., email: _Optional[str] = ...) -> None: ... +class AliasNoteChanged(_message.Message): + __slots__ = ("id", "email", "note") + ID_FIELD_NUMBER: _ClassVar[int] + EMAIL_FIELD_NUMBER: _ClassVar[int] + NOTE_FIELD_NUMBER: _ClassVar[int] + id: int + email: str + note: str + def __init__(self, id: _Optional[int] = ..., email: _Optional[str] = ..., note: _Optional[str] = ...) -> None: ... + class AliasCreatedList(_message.Message): __slots__ = ("events",) EVENTS_FIELD_NUMBER: _ClassVar[int] @@ -62,7 +72,7 @@ class UserUnlinked(_message.Message): def __init__(self) -> None: ... class EventContent(_message.Message): - __slots__ = ("user_plan_change", "user_deleted", "alias_created", "alias_status_change", "alias_deleted", "alias_create_list", "user_unlinked") + __slots__ = ("user_plan_change", "user_deleted", "alias_created", "alias_status_change", "alias_deleted", "alias_create_list", "user_unlinked", "alias_note_changed") USER_PLAN_CHANGE_FIELD_NUMBER: _ClassVar[int] USER_DELETED_FIELD_NUMBER: _ClassVar[int] ALIAS_CREATED_FIELD_NUMBER: _ClassVar[int] @@ -70,6 +80,7 @@ class EventContent(_message.Message): ALIAS_DELETED_FIELD_NUMBER: _ClassVar[int] ALIAS_CREATE_LIST_FIELD_NUMBER: _ClassVar[int] USER_UNLINKED_FIELD_NUMBER: _ClassVar[int] + ALIAS_NOTE_CHANGED_FIELD_NUMBER: _ClassVar[int] user_plan_change: UserPlanChanged user_deleted: UserDeleted alias_created: AliasCreated @@ -77,7 +88,8 @@ class EventContent(_message.Message): alias_deleted: AliasDeleted alias_create_list: AliasCreatedList user_unlinked: UserUnlinked - def __init__(self, user_plan_change: _Optional[_Union[UserPlanChanged, _Mapping]] = ..., user_deleted: _Optional[_Union[UserDeleted, _Mapping]] = ..., alias_created: _Optional[_Union[AliasCreated, _Mapping]] = ..., alias_status_change: _Optional[_Union[AliasStatusChanged, _Mapping]] = ..., alias_deleted: _Optional[_Union[AliasDeleted, _Mapping]] = ..., alias_create_list: _Optional[_Union[AliasCreatedList, _Mapping]] = ..., user_unlinked: _Optional[_Union[UserUnlinked, _Mapping]] = ...) -> None: ... + alias_note_changed: AliasNoteChanged + def __init__(self, user_plan_change: _Optional[_Union[UserPlanChanged, _Mapping]] = ..., user_deleted: _Optional[_Union[UserDeleted, _Mapping]] = ..., alias_created: _Optional[_Union[AliasCreated, _Mapping]] = ..., alias_status_change: _Optional[_Union[AliasStatusChanged, _Mapping]] = ..., alias_deleted: _Optional[_Union[AliasDeleted, _Mapping]] = ..., alias_create_list: _Optional[_Union[AliasCreatedList, _Mapping]] = ..., user_unlinked: _Optional[_Union[UserUnlinked, _Mapping]] = ..., alias_note_changed: _Optional[_Union[AliasNoteChanged, _Mapping]] = ...) -> None: ... class Event(_message.Message): __slots__ = ("user_id", "external_user_id", "partner_id", "content") diff --git a/proto/event.proto b/proto/event.proto index 1d29ab47..a18e8b00 100644 --- a/proto/event.proto +++ b/proto/event.proto @@ -30,6 +30,12 @@ message AliasDeleted { string email = 2; } +message AliasNoteChanged { + uint32 id = 1; + string email = 2; + string note = 3; +} + message AliasCreatedList { repeated AliasCreated events = 1; } @@ -46,6 +52,7 @@ message EventContent { AliasDeleted alias_deleted = 5; AliasCreatedList alias_create_list = 6; UserUnlinked user_unlinked = 7; + AliasNoteChanged alias_note_changed = 8; } }