Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import json
- import os
- import sys
- import uuid
- import boto3
- import time
- s3 = boto3.client('s3')
- def getUser(users, userId):
- for u in users:
- if(u['user_id'] == userId):
- return u
- return None
- def getAccount(accounts, account_id):
- for a in accounts:
- if(a['account_id'] == account_id):
- return a
- return None
- def checkTransactionValid(account, transaction):
- if(float(transaction['transaction_amount']) <= 0.0):
- return False
- if(float(account['account_balance']) < float(transaction['transaction_amount'])):
- return False
- return True
- def completeTransaction(senderAccount, receiverAccount, transaction):
- receiverAccount['account_balance'] = float(
- receiverAccount['account_balance']) + float(transaction['transaction_amount'])
- senderAccount['account_balance'] = float(
- senderAccount['account_balance']) - float(transaction['transaction_amount'])
- def saveConfig(senderAccount, receiverAccount, config):
- config['accounts'] = list([
- senderAccount, receiverAccount])
- bucketName = 'transactionsresults'
- s3 = boto3.resource('s3')
- bucket = s3.Bucket(bucketName)
- path = 'tmp/transaction_result_'+str(time.time())+'.json'
- data = json.dumps(config)
- bucket.put_object(
- ACL='public-read',
- ContentType='application/json',
- Key=path,
- Body=data,
- )
- body = {
- "uploaded": "true",
- "bucket": bucketName,
- "path": path,
- }
- return {
- "statusCode": 200,
- "body": json.dumps(body)
- }
- def transaction_handler(event, context):
- bucket = 'transactionstorage'
- key = 'transaction.json'
- response = s3.get_object(Bucket = bucket,Key=key)
- content = response['Body']
- jsontransaction = json.loads(content.read())
- transaction = jsontransaction['transaction']
- with open('./config.json') as conf:
- config = json.load(conf)
- users = config['users']
- accounts = config['accounts']
- sender = getUser(users, transaction['sender_id'])
- receiver = getUser(users, transaction['receiver_id'])
- if((sender == None) or (receiver == None)):
- return {
- 'statusCode': 400,
- 'body': 'Invalid sender or receiver ID'
- }
- senderAccount = getAccount(accounts, sender['user_account_id'])
- receiverAccount = getAccount(accounts, receiver['user_account_id'])
- if(senderAccount == None):
- return {
- 'statusCode': 400,
- 'body': 'There\'s no accounts registered for the user '+sender['user_id']
- }
- if(receiverAccount == None):
- return {
- 'statusCode': 400,
- 'body': 'There\'s no accounts registered for the user '+receiver['user_Id']
- }
- validTransaction = checkTransactionValid(senderAccount, transaction)
- if(validTransaction == False):
- return {
- 'statusCode': 400,
- 'body': 'Transaction not valid'
- }
- completeTransaction(senderAccount, receiverAccount, transaction)
- saveConfig(senderAccount, receiverAccount, config)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement