Ejemplo n.º 1
0
    def destroy(self, request, pk=None):
        user = get_user({'_id': pk})
        user_id = encode_value(pk)

        if user is None:
            return Response(status=status.HTTP_404_NOT_FOUND)

        if user['permission'] != 'admin':
            user_is_deleted = db.users.delete_one({'_id': user_id})
            bank_account_is_deleted = db.bank_accounts.delete_one(
                {'user_id': user_id})

            if user_is_deleted is None:
                return Response(data=msg('User wasn\'t deleted'),
                                status=status.HTTP_400_BAD_REQUEST)

            if bank_account_is_deleted is None:
                return Response(data=msg('Bank account wasn\'t deleted'),
                                status=status.HTTP_400_BAD_REQUEST)
        else:
            return Response(data=msg('User can\'t delete administrator'),
                            status=status.HTTP_405_METHOD_NOT_ALLOWED)

        return Response(data=msg('User was deleted successfully'),
                        status=status.HTTP_200_OK)
Ejemplo n.º 2
0
    def send(self, request):
        try:
            sender_id = request.user['_id']
            receiver = get_user({'username': request.data['receiver']})

            if receiver is None:
                return Response(data=msg('Receiver wasn\'t found'),
                                status=status.HTTP_404_NOT_FOUND)

            sender_bank_account = get_bank_account({'user_id': sender_id})

            topup = {}
            sended = {}
            for i, remit in enumerate(request.data['remits']):
                currency = request.data['remits'][i]['currency']
                amount = request.data['remits'][i]['amount']
                if sender_bank_account[currency] < amount:
                    return Response(data=msg('Insufficient funds'),
                                    status=status.HTTP_400_BAD_REQUEST)
                topup[currency] = amount
                sended[currency] = -amount

                id = db.transactions.insert_one({
                    'sender':
                    get_bank_account({'user_id': encode_value(sender_id)
                                      })['keypair']['public_key'],
                    'sender_id':
                    encode_value(sender_id),
                    'receiver':
                    get_bank_account({'user_id': receiver['_id']
                                      })['keypair']['public_key'],
                    'receiver_id':
                    receiver['_id'],
                    'currency':
                    currency,
                    'values':
                    amount,
                    'date':
                    datetime.datetime.now().isoformat(),
                }).inserted_id

            db.bank_accounts.update_one({'user_id': encode_value(sender_id)},
                                        {'$inc': sended})

            db.bank_accounts.update_one(
                {'user_id': encode_value(receiver['_id'])}, {'$inc': topup})
            return Response(status=status.HTTP_200_OK)

        except:
            return Response(data=msg('Check request data'),
                            status=status.HTTP_400_BAD_REQUEST)
Ejemplo n.º 3
0
 def update(self, request, pk=None):
     user = get_user({'_id': pk})
     if user is None:
         return Response(data=msg('User not found'),
                         status=status.HTTP_404_NOT_FOUND)
     else:
         db.users.update_one({"_id": encode_value(pk)},
                             {"$set": request.data})
         return Response(status=status.HTTP_200_OK)
Ejemplo n.º 4
0
    def retrieve(self, request, pk=None):
        bank_account = get_bank_account({'_id': pk})

        if bank_account is not None:
            bank_account = result_without_hidden(result=bank_account,
                                                 hidden=('_id', 'user_id',
                                                         'keypair'))
            return Response(data=bank_account, status=status.HTTP_200_OK)

        return Response(data=msg('Bank account wasn\'t found'),
                        status=status.HTTP_404_NOT_FOUND)
Ejemplo n.º 5
0
    def current(self, request):
        user_id = request.user['_id']
        bank_account = get_bank_account({'user_id': user_id})

        if bank_account is not None:
            bank_account = result_without_hidden(result=bank_account,
                                                 hidden=('_id', 'user_id',
                                                         'keypair'))
            return Response(data=bank_account, status=status.HTTP_200_OK)

        return Response(data=msg('Bank account wasn\'t found'),
                        status=status.HTTP_404_NOT_FOUND)
Ejemplo n.º 6
0
    def topup(self, request):
        user_id = request.user['_id']
        user = get_user({'_id': user_id})

        if user is not None:
            topup = {}
            for i, remit in enumerate(request.data['remits']):
                currency = request.data['remits'][i]['currency']
                amount = request.data['remits'][i]['amount']
                topup[currency] = amount

            db.bank_accounts.update_one({'user_id': encode_value(user_id)},
                                        {'$inc': topup})

            return Response(status=status.HTTP_200_OK)

        return Response(data=msg('User wasn\'t found'),
                        status=status.HTTP_404_NOT_FOUND)