def authorized_stylist_user(client) -> Tuple[User, str]:
    user = G(
        User,
        role=[UserRole.STYLIST, ]
    )
    create_stylist_profile_for_user(user)
    jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
    payload = custom_jwt_payload_handler(user, role=UserRole.STYLIST)
    token = jwt_encode_handler(payload)
    auth_token = 'Token {0}'.format(token)
    return user, auth_token
Exemple #2
0
    def post(self, request):
        serializer = PhoneSMSCodeSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        data = serializer.validated_data
        role = data.get('role', UserRole.CLIENT)

        try:
            user: User = User.objects.get(phone=data['phone'])
            if role == UserRole.CLIENT and not user.is_client():
                # Existing stylist, create client profile
                user = create_client_profile_from_phone(data['phone'], user)
            elif role == UserRole.STYLIST and not user.is_stylist():
                create_stylist_profile_for_user(user)
        except User.DoesNotExist:
            # New user. Create login
            if role == UserRole.STYLIST:
                user = create_stylist_profile_from_phone(data['phone'])
            else:
                user = create_client_profile_from_phone(data['phone'])
            send_slack_new_user_signup(user)

        api_settings.user_settings['JWT_EXPIRATION_DELTA'] = timedelta(
            days=365)
        jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER

        payload = custom_jwt_payload_handler(user, role=role)
        token = jwt_encode_handler(payload)
        if role == UserRole.CLIENT:
            jwt_response_payload_handler = client_jwt_response_payload_handler
            response_payload = jwt_response_payload_handler(
                token, user, self.request)
        elif role == UserRole.STYLIST:
            jwt_response_payload_handler = stylist_jwt_response_payload_handler
            response_payload = jwt_response_payload_handler(
                token, user, request=self.request)
        user.last_login = timezone.now()
        user.save(update_fields=['last_login'])
        return Response(response_payload)
    def create(self, validated_data) -> Stylist:
        user: User = self.context['user']

        if user and hasattr(user, 'stylist'):
            return self.update(user.stylist, validated_data)

        with transaction.atomic():
            user_data = validated_data.pop('user', {})
            if user_data:
                user_serializer = StylistUserSerializer(instance=user,
                                                        data=user_data)
                if user_serializer.is_valid(raise_exception=True):
                    user = user_serializer.save()

            salon_data = validated_data.pop('salon', {})
            salon_serializer = SalonSerializer(data=salon_data)
            salon_serializer.is_valid(raise_exception=True)
            salon = salon_serializer.save()
            profile_photo_id = validated_data.pop('profile_photo_id', None)
            stylist = create_stylist_profile_for_user(user, salon=salon)
            self._save_profile_photo(user, profile_photo_id)
            return stylist
def stylist_data(db) -> Stylist:
    salon = G(
        Salon,
        name='Test salon', address='2000, Rilma Lane, Los Altos, US 94022',
        city='Los Altos', state='CA',
        zip_code='94022', location=Point(x=-122.1185007, y=37.4009997), country='US',
        timezone=pytz.utc
    )
    stylist_user = G(
        User,
        is_staff=False, is_superuser=False, email='*****@*****.**',
        first_name='Fred', last_name='McBob', phone='(650) 350-1111'
    )
    stylist: Stylist = create_stylist_profile_for_user(
        stylist_user,
        salon=salon,
        service_time_gap=datetime.timedelta(minutes=30)
    )
    monday_discount = stylist.get_or_create_weekday_discount(
        weekday=Weekday.MONDAY
    )
    monday_discount.discount_percent = 50
    monday_discount.save()
    return stylist
 def create_profile_for_user(self, user: User, role: UserRole) -> None:
     assert role in ROLES_WITH_ALLOWED_LOGIN
     if role == UserRole.STYLIST:
         create_stylist_profile_for_user(user=user)
Exemple #6
0
def create_stylist_profile_from_phone(phone: str,
                                      user: Optional[User] = None) -> User:
    if not user:
        user = create_user_from_phone(phone, role=UserRole.STYLIST)
    create_stylist_profile_for_user(user)
    return user
 def create_profile_for_user(self, user: User) -> None:
     assert user.role in ROLES_WITH_ALLOWED_LOGIN
     if user.role == UserRole.CLIENT:
         create_client_profile_for_user(user=user)
     elif user.role == UserRole.STYLIST:
         create_stylist_profile_for_user(user=user)