コード例 #1
0
class WalletAPI(viewsets.ViewSet):
    """Handles wallets and all the operations the can be performed on them.

    Wallets are retrieved only using the owner_id. The actual
    pk is for the internal use.
    """
    permission_classes = (HasTokenScope('wallets'),)

    def retrieve(self, request, pk):
        """Retrieves wallet details."""
        wallet_obj = wallet_api.get_wallet(pk)
        serializer = WalletSerializer(wallet_obj)
        return Response(
            data=serializer.data,
            status=status.HTTP_200_OK
        )

    @detail_route(methods=['POST'])
    def deposit(self, request, pk):
        """Deposits money into a wallet.

        amount_
        """
        owner_serializer = WalletTrxParamsSerializer(data={'owner_id': pk})
        if not owner_serializer.is_valid():
            return Response(owner_serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)
        deposit_serializer = WalletDepositSerializer(data=request.POST)
        if not deposit_serializer.is_valid():
            return Response(deposit_serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)
        wallet_api.deposit(
            owner_serializer.validated_data['owner_id'],
            deposit_serializer.validated_data['amount'],
            deposit_serializer.validated_data['reference']
        )
        return Response(status=status.HTTP_204_NO_CONTENT)

    @detail_route(methods=['POST'])
    def withdraw(self, request, pk):
        """Withdraws money from a wallet."""
        owner_serializer = WalletTrxParamsSerializer(data={'owner_id': pk})
        if not owner_serializer.is_valid():
            return Response(owner_serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)
        withdrawal_serializer = WalletWithdrawalSerializer(data=request.POST)
        if not withdrawal_serializer.is_valid():
            return Response(withdrawal_serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)
        try:
            wallet_api.withdraw(
                owner_serializer.validated_data['owner_id'],
                withdrawal_serializer.validated_data['amount'],
                withdrawal_serializer.validated_data['reference']
            )
        except InsufficientFunds:
            # TODO: move this to serializer? think about possible
            # race conditions
            return Response(status=status.HTTP_400_BAD_REQUEST)
        return Response(status=status.HTTP_204_NO_CONTENT)
コード例 #2
0
ファイル: product.py プロジェクト: kokapelli/foobar-api
class ProductCategoryAPI(viewsets.ViewSet):
    permission_classes = (HasTokenScope('categories'), )

    def list(self, request):
        category_objs = shop.api.list_categories()
        serializer = ProductCategorySerializer(category_objs, many=True)
        return Response(serializer.data)
コード例 #3
0
class WalletTrxAPI(viewsets.ViewSet):
    permission_classes = (HasTokenScope('wallet_trxs'),)

    def list(self, request):
        """Retrieves all the transactions for given wallet."""
        serializer = WalletTrxParamsSerializer(data=request.GET)
        serializer.is_valid(raise_exception=True)
        owner_id = serializer.validated_data['owner_id']
        trxs = wallet_api.list_transactions(owner_id)
        serializer = WalletTrxSerializer(trxs, many=True)
        return Response(serializer.data)
コード例 #4
0
class AccountAPI(viewsets.ViewSet):
    permission_classes = (HasTokenScope('accounts'), )

    def retrieve(self, request, pk):
        serializer = AccountQuerySerializer(data={'card_id': pk})
        serializer.is_valid(raise_exception=True)
        account_obj = foobar.api.get_account(card_id=pk)
        if account_obj is None:
            return Response(status=status.HTTP_404_NOT_FOUND)
        serializer = AccountSerializer(account_obj)
        return Response(data=serializer.data, status=status.HTTP_200_OK)
コード例 #5
0
class WalletTrxAPI(viewsets.ViewSet):
    permission_classes = (HasTokenScope('wallet_trxs'),)

    def list(self, request):
        """Retrieves all the transactions for given wallet."""
        serializer = WalletTrxParamsSerializer(data=request.GET)
        if not serializer.is_valid():
            return Response(serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)
        owner_id = serializer.validated_data['owner_id']
        trxs = wallet_api.list_transactions(owner_id)
        serializer = WalletTrxSerializer(trxs, many=True)
        return Response(serializer.data)
コード例 #6
0
class PurchaseAPI(viewsets.ViewSet):
    permission_classes = (HasTokenScope('purchases'), )

    def create(self, request):
        serializer = PurchaseRequestSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        try:
            purchase_obj = api.purchase(**serializer.as_purchase_kwargs())
        except InsufficientFunds:
            return Response('Insufficient funds',
                            status=status.HTTP_400_BAD_REQUEST)
        serializer = PurchaseSerializer(purchase_obj)
        return Response(serializer.data, status=status.HTTP_200_OK)
コード例 #7
0
ファイル: product.py プロジェクト: kokapelli/foobar-api
class ProductAPI(viewsets.ViewSet):
    permission_classes = (HasTokenScope('products'), )

    def retrieve(self, request, pk):
        product_obj = shop.api.get_product(pk)
        if product_obj is None:
            return Response(status=status.HTTP_404_NOT_FOUND)
        serializer = ProductSerializer(product_obj)
        return Response(data=serializer.data, status=status.HTTP_200_OK)

    def list(self, request):
        serializer = ProductParamSerializer(data=request.GET)
        serializer.is_valid(raise_exception=True)
        product_objs = shop.api.list_products(**serializer.validated_data)
        serializer = ProductSerializer(product_objs, many=True)
        return Response(serializer.data)