Example #1
0
    def mutate(cls, root, info, **kwargs):

        request = info.context

        phone = kwargs.get("phone")
        auth_code = kwargs.get("auth_code")
        provider = kwargs.get("provider")

        if phone:
            try:
                has_verified_phone(request, phone)
            except exceptions.InvalidPhone as e:
                return Result(success=False, message=e.message)
            except exceptions.WrongVerifyCode as e:
                return Result(success=False, message=e.message)

            try:
                shop_user = ShopUser.objects.get(phone=phone)
            except ShopUser.DoesNotExist:
                return Result(success=False,
                              message="not_exist_user_with_phone")

        elif auth_code and provider:
            try:
                shop_user = ShopUser.objects.get_user_by_auth_code(
                    provider, auth_code)
            except ShopUser.DoesNotExist:
                return Result(success=False,
                              message="not_exist_user_with_auth_code")

        request.user = shop_user.user
        token = get_token(shop_user.user)

        return cls(me=shop_user, token=token)
Example #2
0
    def mutate(self, info, phone, code):
        request = info.context

        try:
            verify_code(request, phone, code)
        except exceptions.InvalidPhone as e:
            return Result(success=False, message=e.message)
        except exceptions.WrongVerifyCode as e:
            return Result(success=False, message=e.message)

        return Result(success=True)
Example #3
0
 def wrapper(root, info, *args, **kwargs):
     request = info.context
     phone = kwargs.get("username", kwargs.get("phone"))
     if phone is None:
         raise ValueError("Cannot get phone number")
     try:
         has_verified_phone(request, phone)
     except exceptions.InvalidPhone as e:
         return Result(success=False, message=e.message)
     except exceptions.WrongVerifyCode as e:
         return Result(success=False, message=e.message)
     return fn(root, info, *args, **kwargs)
Example #4
0
    def mutate(self, info, phone):
        request = info.context
        try:
            request_verify_code(request, phone)
        except exceptions.InvalidPhone as e:
            return Result(success=False, message=e.message)
        except exceptions.VerifyCodeError as e:
            return Result(success=False, message=e.message)
        except Exception as e:
            logger.error(e, exc_info=True)
            return Result(success=False, message="system_error")

        return Result(success=True)
Example #5
0
 def mutate(self, info, params):
     shop_user = info.context.user.shop_user
     for k, v in params.items():
         setattr(shop_user, k, v)
         # TODO: merge one sql
         shop_user.save(update_fields=[k])
     return Result(success=True, message="")
Example #6
0
    def mutate(self, info, old_password, new_password, **kw):
        shop_user = info.context.user.shop_user
        if shop_user.has_payment_password:
            if not shop_user.check_payemnt_password(old_password):
                raise exceptions.GQLError("wrong_old_password")

        shop_user.set_payment_password(new_password)
        return Result(success=True)
Example #7
0
    def mutate(self, info, password, **kw):
        shop_user = info.context.user.shop_user
        if shop_user.has_payment_password:
            raise exceptions.GQLError("already_exist_payment_password")

        shop_user.set_payment_password(password)

        return Result(success=True)
Example #8
0
    def mutate(self, info, provider, auth_code, **kw):
        shop_user = info.context.user.shop_user
        try:
            shop_user.bind_third_account(provider, auth_code)
        except (
                exceptions.AlreadyBinded,
                exceptions.DoNotSupportBindType,
                exceptions.CodeBeUsed,
        ) as e:
            raise exceptions.GQLError(e.message)

        return Result(success=True)
Example #9
0
    def mutate(self, info, params):

        shop_user = info.context.user.shop_user

        avoid_resubmit = AvoidResubmit("withdraw")
        try:
            avoid_resubmit(params.request_id, shop_user.id)
        except avoid_resubmit.ResubmittedError as e:
            raise exceptions.GQLError(e.message)

        try:
            cls = get_provider_cls(params.provider)
            obj = cls()
            openid = obj.get_openid(shop_user=shop_user)
        except exceptions.DoNotSupportBindType:
            raise exceptions.GQLError(f"Does not support {params.provider}")

        note = settings.LOGO_NAME + "-提现"

        with transaction.atomic():
            try:
                transfer = do_withdraw(shop_user, params.amount, note="提现到零钱")
            except exceptions.NotEnoughBalance as e:
                raise exceptions.GQLError(e.message)

            try:
                res = obj.withdraw(openid, params.amount, note)
            except exceptions.WithdrawError as e:
                # FIXME: revert do_withdraw?
                # 提现进行中,可能会有一定延时,需要人工处理
                # 提现排队中....
                logger.exception(str(e))
                raise exceptions.GQLError(e.message)

            transfer.extra_info = dict(res)
            transfer.order_id = res["payment_no"]
            transfer.save()

            return Result(success=True)
Example #10
0
    def mutate(self, info, params):
        # 1. avoid resubmit
        shop_user = info.context.user.shop_user

        avoid_resubmit = AvoidResubmit("transferPay")
        try:
            avoid_resubmit(params.request_id, shop_user.id)
        except avoid_resubmit.ResubmittedError as e:
            raise exceptions.GQLError(e.message)

        # 2. check payment password
        try:
            if not shop_user.has_payment_password:
                raise exceptions.NeedSetPaymentPassword

            if not shop_user.check_payemnt_password(params.payment_password):
                raise exceptions.WrongPassword
        except exceptions.ErrorResultException as e:
            raise exceptions.GQLError(e.message)

        # TODO:
        # 3. do transfer
        try:
            to_user = ShopUser.objects.get(uuid=params.to)
        except ShopUser.DoesNotExist:
            raise exceptions.GQLError("no_exist_user")

        try:
            do_transfer(
                from_user=shop_user,
                to_user=to_user,
                amount=params.amount,
                note=params.note,
            )
        except exceptions.NotEnoughBalance as e:
            raise exceptions.GQLError(e.message)

        return Result(success=True)