From 85beacaeb09d21e5fc403f71703a8f04f84bc988 Mon Sep 17 00:00:00 2001 From: Ildar Iskhakov Date: Thu, 15 Jun 2023 23:52:01 +0800 Subject: [PATCH] Add telegram details field (#2255) # What this PR does ## Which issue(s) this PR fixes ## Checklist - [ ] Unit, integration, and e2e (if applicable) tests updated - [ ] Documentation added (or `pr:no public docs` PR label added if not required) - [ ] `CHANGELOG.md` updated (or `pr:no changelog` PR label added if not required) --- engine/apps/api/serializers/channel_filter.py | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/engine/apps/api/serializers/channel_filter.py b/engine/apps/api/serializers/channel_filter.py index 335a816b..d6053192 100644 --- a/engine/apps/api/serializers/channel_filter.py +++ b/engine/apps/api/serializers/channel_filter.py @@ -22,9 +22,11 @@ class ChannelFilterSerializer(OrderedModelSerializerMixin, EagerLoadingMixin, se required=False, ) slack_channel = serializers.SerializerMethodField() + # Duplicated telegram channel and telegram_channel_details field for backwards compatibility for old integration page telegram_channel = OrganizationFilteredPrimaryKeyRelatedField( queryset=TelegramToOrganizationConnector.objects, filter_field="organization", allow_null=True, required=False ) + telegram_channel_details = serializers.SerializerMethodField() order = serializers.IntegerField(required=False) filtering_term_as_jinja2 = serializers.SerializerMethodField() filtering_term = serializers.CharField(required=False, allow_null=True, allow_blank=True) @@ -48,8 +50,13 @@ class ChannelFilterSerializer(OrderedModelSerializerMixin, EagerLoadingMixin, se "notify_in_telegram", "notification_backends", "filtering_term_as_jinja2", + "telegram_channel_details", + ] + read_only_fields = [ + "created_at", + "is_default", + "telegram_channel_details", ] - read_only_fields = ["created_at", "is_default"] def validate(self, data): filtering_term = data.get("filtering_term") @@ -77,6 +84,18 @@ class ChannelFilterSerializer(OrderedModelSerializerMixin, EagerLoadingMixin, se "id": obj.slack_channel_pk, } + def get_telegram_channel_details(self, obj) -> dict[str, any] | None: + if obj.telegram_channel_id is None: + return None + try: + telegram_channel = TelegramToOrganizationConnector.objects.get(pk=obj.telegram_channel_id) + return { + "display_name": telegram_channel.channel_name, + "id": telegram_channel.channel_chat_id, + } + except TelegramToOrganizationConnector.DoesNotExist: + return None + def validate_slack_channel(self, slack_channel_id): SlackChannel = apps.get_model("slack", "SlackChannel")