11from dataclasses import dataclass
2- from typing import Optional
2+ from typing import Any
33
44from django .utils import timezone
55
1111
1212@dataclass
1313class TermsAgreementInput :
14- business_email : Optional [str ] = None
14+ business_email : str
15+ name : str
1516 terms_agreement : bool = False
1617 marketing_consent : bool = False
17- customer_intent : Optional [str ] = None
1818
1919
2020class SaveTermsAgreementInteractor (BaseInteractor ):
2121 requires_service = False
2222
23- def validate (self , input : TermsAgreementInput ):
24- valid_customer_intents = ["Business" , "BUSINESS" , "Personal" , "PERSONAL" ]
25- if (
26- input .customer_intent
27- and input .customer_intent not in valid_customer_intents
28- ):
29- raise ValidationError ("Invalid customer intent provided" )
23+ def validate (self , input : dict ) -> None :
24+ if not self .current_user .business_email :
25+ raise ValidationError ("Business email is required" )
26+ if not self .current_user .name :
27+ raise ValidationError ("Name is required" )
3028 if not self .current_user .is_authenticated :
3129 raise Unauthenticated ()
3230
33- def update_terms_agreement (self , input : TermsAgreementInput ):
31+ def update_terms_agreement (self , input : TermsAgreementInput ) -> None :
3432 self .current_user .terms_agreement = input .terms_agreement
3533 self .current_user .terms_agreement_at = timezone .now ()
36- self .current_user .customer_intent = input .customer_intent
3734 self .current_user .email_opt_in = input .marketing_consent
35+ self .current_user .name = input .name
3836 self .current_user .save ()
3937
4038 if input .business_email and input .business_email != "" :
@@ -44,19 +42,19 @@ def update_terms_agreement(self, input: TermsAgreementInput):
4442 if input .marketing_consent :
4543 self .send_data_to_marketo ()
4644
47- def send_data_to_marketo (self ):
45+ def send_data_to_marketo (self ) -> None :
4846 event_data = {
4947 "email" : self .current_user .email ,
5048 }
5149 AnalyticsService ().opt_in_email (self .current_user .id , event_data )
5250
5351 @sync_to_async
54- def execute (self , input ) :
52+ def execute (self , input : dict [ str , Any ]) -> None :
5553 typed_input = TermsAgreementInput (
56- business_email = input .get ("business_email" ),
57- terms_agreement = input .get ("terms_agreement" ),
58- marketing_consent = input .get ("marketing_consent" ),
59- customer_intent = input .get ("customer_intent " ),
54+ business_email = input .get ("business_email" , "" ),
55+ terms_agreement = input .get ("terms_agreement" , False ),
56+ marketing_consent = input .get ("marketing_consent" , False ),
57+ name = input .get ("name" , " " ),
6058 )
61- self .validate (typed_input )
59+ self .validate (input )
6260 return self .update_terms_agreement (typed_input )
0 commit comments