-
Notifications
You must be signed in to change notification settings - Fork 0
/
transaction.py
100 lines (84 loc) · 4.25 KB
/
transaction.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
from flask import Blueprint, jsonify, request
from components.blocklist.blocklist import BLOCKLIST
from components.check_account_numbers import Account_Num
from components.updating import Update
from components.fetching import Fetching
from flask_jwt_extended import jwt_required, get_jwt_identity
import jwt
transaction_bp = Blueprint('transaction', __name__)
check = Account_Num()
sample = {
"transaction_code": "d(if deposit) or w(if withdraw)",
"amount": "21563.32"
}
# api for doing transaction from account (update and delete!)
@transaction_bp.route('/transaction', methods=['PATCH', 'PUT'])
@jwt_required()
def transaction():
'''
Route to do transactions from the account
Body:
json format data:
- The type of transaction:
- deposit
- withdraw
- The amount for either deposit or withdraw
Headers:
Authorization access token generated by logging in the account using account number generated when account was created.
Key(Authorization): Params(Bearer <access token>)
Returns:
The response originally is Transaction Successfull with a 200 status code and updated balance.
Exception Raised:
Following exceptions will be raised::
--- For every incorrect values given by user:
- Transaction Code: Must be either deposit(d) or withdraw(w).
- Amount: Must be an integer (can be string of numbers).
--- Throws an exception if amount is greater than the balance in account while withdrawing.
--- Normal Exception Error if occurs in database querys.
--- Exception if data format is not correct i.e., json.
--- Exception if token has expired.
'''
data = request.json
token = request.headers.get('Authorization')
if not token:
return jsonify({"Message": "Missing token"}), 401
if token in BLOCKLIST:
return jsonify({"Message": "Token Aborted!"}), 500
try:
account_number = get_jwt_identity()
update = Update(account_number)
fetch = Fetching(account_number)
check.check_account_number(account_number)
try:
#deposit money -->
if data.get('transaction_code').lower() in ['d', 'deposit']:
if 'amount' in data:
try:
amount = float(data.get('amount'))
except:
return jsonify({"Message": "Balance must be an integer or float.", "sample":sample}), 400
return jsonify({"Message": "Balance deposited!", "New Balance": "Rs. " + str(update.update_balance_on_deposit(amount))}), 200
else:
return jsonify({"Message": "Also insert the amount you want to deposit!", "sample":sample}), 400
# to withdraw money -->
elif data.get('transaction_code').lower() in ['w', 'withdraw']:
if 'amount' in data:
try:
try:
amount = float(data.get('amount'))
except:
return jsonify({"Message": "Balance must be an integer or decimal.", "sample":sample}), 400
if fetch.get_balance() < amount:
return jsonify({"Message": "Not Enough Balance to withdraw money!", "current_balance": "Rs. " + str(fetch.get_balance())}), 400
else:
return jsonify({"Message": "Balance withdrawn!", "New Balance": "Rs. " + str(update.update_balance_on_withdrawl(amount))}), 200
except Exception as e:
return jsonify({"Message": "Invalid!", "Error": str(e)}), 500
else:
return jsonify({"Message": "Also insert the amount you want to withdraw!", "sample":sample}), 400
else:
return jsonify({"Message": "transaction choice must be either (deposit/d) or (withdraw/w)", "sample":sample}), 400
except:
return jsonify({"Message": "Please enter transaction code.", "sample":sample}), 400
except:
return jsonify({'Message': 'Token expired'}), 401