From 48753ea49a8598088a650668ae1a9b347fc01f01 Mon Sep 17 00:00:00 2001 From: VineetBala-AOT <90332175+VineetBala-AOT@users.noreply.github.com> Date: Mon, 11 Sep 2023 13:22:55 -0700 Subject: [PATCH] Reverting changes on the schema for subscription (#2157) * Changes to show all survey results to superusers * removing hard coded values * fixing linting * splitting to seperate end points * fixing auth check * fixing linting * merging method in service * Handle no data error for graphs * adding new nodata component * adding new email for submission response * fixing linting and testing * updating model for subscription * removing schema dependency on create * fixing linting --- met-api/src/met_api/models/subscription.py | 14 ++++++-------- met-api/src/met_api/resources/subscription.py | 13 ++++--------- met-api/src/met_api/schemas/subscription.py | 5 +---- .../met_api/services/subscription_service.py | 17 +++++++++-------- .../view/widgets/Subscribe/EmailListModal.tsx | 2 +- .../ManageSubscription/Subscription.tsx | 4 ++-- met-web/src/models/subscription.ts | 6 +++--- 7 files changed, 26 insertions(+), 35 deletions(-) diff --git a/met-api/src/met_api/models/subscription.py b/met-api/src/met_api/models/subscription.py index cc84b8d3c..6e5e3f5e3 100644 --- a/met-api/src/met_api/models/subscription.py +++ b/met-api/src/met_api/models/subscription.py @@ -6,8 +6,6 @@ from datetime import datetime from sqlalchemy import ForeignKey -from met_api.schemas.subscription import SubscriptionSchema - from met_api.constants.subscription_type import SubscriptionType from .base_model import BaseModel @@ -60,12 +58,12 @@ def get_by_participant_and_eng_id(cls, participant_id, engagement_id) -> Subscri return db_subscription @classmethod - def create(cls, subscription: SubscriptionSchema, session=None) -> Subscription: + def create(cls, subscription: dict, session=None) -> Subscription: """Create a subscription.""" new_subscription = Subscription( engagement_id=subscription.get('engagement_id', None), participant_id=subscription.get('participant_id', None), - is_subscribed=subscription.get('is_subscribed', None), + is_subscribed=subscription.get('is_subscribed', False), project_id=subscription.get('project_id', None), type=subscription.get('type', None), created_date=datetime.utcnow(), @@ -79,10 +77,10 @@ def create(cls, subscription: SubscriptionSchema, session=None) -> Subscription: return new_subscription @classmethod - def update_subscription_for_participant(cls, subscription: SubscriptionSchema, session=None) -> Subscription: + def update_subscription_for_participant(cls, subscription: dict, session=None) -> Subscription: """Update subscription for a participant.""" update_fields = dict( - is_subscribed=subscription.get('is_subscribed', None), + is_subscribed=subscription.get('is_subscribed', False), updated_date=datetime.utcnow(), updated_by=subscription.get('updated_by', None), ) @@ -97,10 +95,10 @@ def update_subscription_for_participant(cls, subscription: SubscriptionSchema, s return query.first() @classmethod - def update_subscription_for_participant_eng(cls, subscription: SubscriptionSchema, session=None) -> Subscription: + def update_subscription_for_participant_eng(cls, subscription: dict, session=None) -> Subscription: """Update subscription for a participant and engagement.""" update_fields = dict( - is_subscribed=subscription.get('is_subscribed', None), + is_subscribed=subscription.get('is_subscribed', False), updated_date=datetime.utcnow(), updated_by=subscription.get('updated_by', None), ) diff --git a/met-api/src/met_api/resources/subscription.py b/met-api/src/met_api/resources/subscription.py index 14fc27fcc..d9d8d77c1 100644 --- a/met-api/src/met_api/resources/subscription.py +++ b/met-api/src/met_api/resources/subscription.py @@ -19,7 +19,6 @@ from flask_cors import cross_origin from flask_restx import Namespace, Resource -from met_api.schemas.subscription import SubscriptionSchema from met_api.services.subscription_service import SubscriptionService from met_api.utils.util import allowedorigins, cors_preflight @@ -63,8 +62,7 @@ def post(): """Create a new subscription.""" try: request_json = request.get_json() - subscription = SubscriptionSchema().load(request_json) - SubscriptionService().create_subscription(subscription) + SubscriptionService().create_subscription(request_json) return {}, HTTPStatus.OK except KeyError as err: return str(err), HTTPStatus.INTERNAL_SERVER_ERROR @@ -77,8 +75,7 @@ def patch(): """Update a existing subscription partially.""" try: request_json = request.get_json() - subscription = SubscriptionSchema().load(request_json, partial=True) - SubscriptionService().update_subscription_for_participant(subscription) + SubscriptionService().update_subscription_for_participant(request_json) return {}, HTTPStatus.OK except KeyError as err: return str(err), HTTPStatus.INTERNAL_SERVER_ERROR @@ -98,8 +95,7 @@ def post(): """Create or update a subscription.""" try: request_json = request.get_json() - subscription = SubscriptionSchema().load(request_json) - SubscriptionService().create_or_update_subscription(subscription) + SubscriptionService().create_or_update_subscription(request_json) return {}, HTTPStatus.OK except KeyError as err: return str(err), HTTPStatus.INTERNAL_SERVER_ERROR @@ -112,8 +108,7 @@ def patch(): """Update a existing subscription partially.""" try: request_json = request.get_json() - subscription = SubscriptionSchema().load(request_json, partial=True) - SubscriptionService().update_subscription_for_participant_eng(subscription) + SubscriptionService().update_subscription_for_participant_eng(request_json) return {}, HTTPStatus.OK except KeyError as err: return str(err), HTTPStatus.INTERNAL_SERVER_ERROR diff --git a/met-api/src/met_api/schemas/subscription.py b/met-api/src/met_api/schemas/subscription.py index 03e7b7567..18b6cab5f 100644 --- a/met-api/src/met_api/schemas/subscription.py +++ b/met-api/src/met_api/schemas/subscription.py @@ -4,9 +4,6 @@ """ from marshmallow import EXCLUDE, Schema, fields -from marshmallow_enum import EnumField - -from met_api.constants.subscription_type import SubscriptionTypes class SubscriptionSchema(Schema): @@ -22,7 +19,7 @@ class Meta: # pylint: disable=too-few-public-methods participant_id = fields.Int(data_key='participant_id') is_subscribed = fields.Bool(data_key='is_subscribed') project_id = fields.Str(data_key='project_id') - type = EnumField(SubscriptionTypes, by_value=True) + type = fields.Str(data_key='type') created_by = fields.Str(data_key='created_by') created_date = fields.Str(data_key='created_date') updated_by = fields.Str(data_key='updated_by') diff --git a/met-api/src/met_api/services/subscription_service.py b/met-api/src/met_api/services/subscription_service.py index 11380f99b..e36b8b055 100644 --- a/met-api/src/met_api/services/subscription_service.py +++ b/met-api/src/met_api/services/subscription_service.py @@ -21,25 +21,26 @@ def get(cls, participant_id): def create_subscription(cls, subscription_data) -> SubscriptionSchema: """Create a subscription.""" subscription_data['created_by'] = subscription_data.get('participant_id') - return SubscriptionModel.create(subscription_data) + create_subscription = SubscriptionModel.create(subscription_data) + return SubscriptionSchema().dump(create_subscription) @classmethod def update_subscription_for_participant(cls, subscription_data) -> SubscriptionSchema: """Update subscription for a participant.""" subscription_data['updated_by'] = subscription_data.get('participant_id') - updated_subscription = SubscriptionModel.update_subscription_for_participant(subscription_data) - if not updated_subscription: + update_subscription = SubscriptionModel.update_subscription_for_participant(subscription_data) + if not update_subscription: raise ValueError('Subscription to update was not found') - return SubscriptionModel.update_subscription_for_participant(subscription_data) + return SubscriptionSchema().dump(update_subscription) @classmethod def update_subscription_for_participant_eng(cls, subscription_data) -> SubscriptionSchema: """Update subscription for a participant.""" subscription_data['updated_by'] = subscription_data.get('participant_id') - updated_subscription = SubscriptionModel.update_subscription_for_participant_eng(subscription_data) - if not updated_subscription: + update_subscription = SubscriptionModel.update_subscription_for_participant_eng(subscription_data) + if not update_subscription: raise ValueError('Subscription to update was not found') - return SubscriptionModel.update_subscription_for_participant_eng(subscription_data) + return SubscriptionSchema().dump(update_subscription) @classmethod def create_or_update_subscription(cls, subscription: dict): @@ -56,7 +57,7 @@ def create_or_update_subscription(cls, subscription: dict): return cls.update_subscription_for_participant_eng(subscription) @staticmethod - def validate_fields(data: SubscriptionSchema): + def validate_fields(data: dict): """Validate all fields.""" empty_fields = [not data.get(field, None) for field in [ 'engagement_id', diff --git a/met-web/src/components/engagement/view/widgets/Subscribe/EmailListModal.tsx b/met-web/src/components/engagement/view/widgets/Subscribe/EmailListModal.tsx index 9866ef353..1277299ea 100644 --- a/met-web/src/components/engagement/view/widgets/Subscribe/EmailListModal.tsx +++ b/met-web/src/components/engagement/view/widgets/Subscribe/EmailListModal.tsx @@ -36,7 +36,7 @@ const EmailListModal = ({ open, setOpen }: { open: boolean; setOpen: (open: bool await createSubscription({ engagement_id: savedEngagement.id, email_address: email_verification.email_address, - is_subscribed: 'false', + is_subscribed: false, participant_id: email_verification.participant_id, project_id: engagementMetadata.project_id, type: subscriptionType || defaultType, diff --git a/met-web/src/components/engagement/view/widgets/Subscribe/ManageSubscription/Subscription.tsx b/met-web/src/components/engagement/view/widgets/Subscribe/ManageSubscription/Subscription.tsx index 3e1ff4877..0478853ba 100644 --- a/met-web/src/components/engagement/view/widgets/Subscribe/ManageSubscription/Subscription.tsx +++ b/met-web/src/components/engagement/view/widgets/Subscribe/ManageSubscription/Subscription.tsx @@ -41,7 +41,7 @@ export const Subscription = () => { await confirmSubscription({ engagement_id: parseInt(engagementId ?? ''), participant_id: JSON.parse(subscribed).participant_id, - is_subscribed: 'true', + is_subscribed: true, }); setSubscriptionText(['You have successfully confirmed your subscription. Thank you.']); } @@ -49,7 +49,7 @@ export const Subscription = () => { const participant_id = scriptionKey; await unSubscribe({ participant_id: parseInt(participant_id ?? ''), - is_subscribed: 'false', + is_subscribed: false, }); setSubscriptionText([ 'We are sorry to see you go.', diff --git a/met-web/src/models/subscription.ts b/met-web/src/models/subscription.ts index ffe45c672..3b2c7e0f8 100644 --- a/met-web/src/models/subscription.ts +++ b/met-web/src/models/subscription.ts @@ -5,7 +5,7 @@ export type CallToActionTypes = 'link' | 'button'; export interface Subscription { engagement_id: number; email_address: string; - is_subscribed: string; + is_subscribed: boolean; participant_id: number; project_id: string; type: string; @@ -14,12 +14,12 @@ export interface Subscription { export interface Subscribe { engagement_id: number; participant_id: number; - is_subscribed: string; + is_subscribed: boolean; } export interface Unsubscribe { participant_id: number; - is_subscribed: string; + is_subscribed: boolean; } export const SUBSCRIBE_TYPE: { [x in SubscribeTypeLabel]: SubscribeTypeLabel } = {