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)
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)
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)
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)
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)
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)