def create_swap(): id = int(get_jwt()['sub']) # get sender user sender = Profiles.query.get(id) if not sender: raise APIException('User not found', 404) body = request.get_json() check_params(body, 'tournament_id', 'recipient_id', 'percentage') # get recipient user recipient = Profiles.query.get(body['recipient_id']) if not recipient: raise APIException('Recipient user not found', 404) if Swaps.query.get((id, body['recipient_id'], body['tournament_id'])): raise APIException('Swap already exists, can not duplicate', 400) sender_availability = sender.available_percentage(body['tournament_id']) if body['percentage'] > sender_availability: raise APIException(( 'Swap percentage too large. You can not exceed 50% per tournament. ' f'You have available: {sender_availability}%'), 400) recipient_availability = recipient.available_percentage( body['tournament_id']) if body['percentage'] > recipient_availability: raise APIException( ('Swap percentage too large for recipient. ' f'He has available to swap: {recipient_availability}%'), 400) db.session.add( Swaps(sender_id=id, tournament_id=body['tournament_id'], recipient_id=body['recipient_id'], percentage=body['percentage'])) db.session.add( Swaps(sender_id=body['recipient_id'], tournament_id=body['tournament_id'], recipient_id=id, percentage=body['percentage'])) db.session.commit() return jsonify({'message': 'ok'}), 200
def run(): Transactions.query.delete() # Casinos.query.delete() # Results.query.delete() Messages.query.delete() # Chats.query.delete() Devices.query.delete() Buy_ins.query.delete() Swaps.query.delete() Flights.query.delete() Tournaments.query.delete() # Casinos.query.delete() Profiles.query.delete() Users.query.delete() Casinos.query.delete() # db.session.execute("ALTER SEQUENCE casinos_id_seq RESTART") # db.session.execute("ALTER SEQUENCE results_id_seq RESTART") # db.session.execute("ALTER SEQUENCE casinos RESTART") db.session.execute("ALTER SEQUENCE users_id_seq RESTART") db.session.execute("ALTER SEQUENCE buy_ins_id_seq RESTART") db.session.execute("ALTER SEQUENCE flights_id_seq RESTART") db.session.execute("ALTER SEQUENCE tournaments_id_seq RESTART") db.session.execute("ALTER SEQUENCE swaps_id_seq RESTART") db.session.execute("ALTER SEQUENCE transactions_id_seq RESTART") db.session.execute("ALTER SEQUENCE devices_id_seq RESTART") db.session.execute("ALTER SEQUENCE chats_id_seq RESTART") db.session.execute("ALTER SEQUENCE messages_id_seq RESTART") # db.session.commit() # LOAD FILES # actions.load_tournament_file() # latest_trmnt_id = db.session.query( func.max( Tournaments.id)).scalar() # db.session.execute( # "ALTER SEQUENCE tournaments_id_seq RESTART WITH " + # str(latest_trmnt_id + 1) ) # latest_flight_id = db.session.query( func.max( Flights.id)).scalar() # db.session.execute( # "ALTER SEQUENCE flights_id_seq RESTART WITH " + # str(latest_flight_id + 1) ) d0 = datetime.utcnow() - timedelta(hours=17, minutes=1) d1 = datetime.utcnow() + timedelta(minutes=5) d2 = datetime.utcnow() - timedelta(hours=16, minutes=59) d3 = datetime.utcnow() + timedelta(days=300) d4 = datetime.utcnow() + timedelta(days=301) oneCasino= Casinos( id='USFL001', name='Seminole Hard Rock Hotel & Casino', address='1 Seminole Way', city='Davie', state='FL', zip_code='33314', latitude=26.0510, longitude=-80.2097, time_zone='America/New_York', ) db.session.add(oneCasino) # Demo Past Tournament past = Tournaments( casino=oneCasino, name='Past Demo Event #1', start_at= d0, buy_in_amount=100, results_link='lol', ) db.session.add(past) flight1_past = Flights( start_at=past.start_at, tournament=past, ) db.session.add(flight1_past) # Apple Demo Tournament and Flights demo1 = Tournaments( casino=oneCasino, name="Apple Demo Event '22", start_at= d3, buy_in_amount=100, starting_stack = 5000, blinds= 20, structure_link = 'https://www.seminolehardrockpokeropen.com/wp-content/uploads/2021/03/2021-April-2-9-30-6P-Fri-150-Deep-Stack-Green-Chip-Bounty-88-Entry-Maxv....pdf' ) db.session.add(demo1) flight1_demo1 = Flights( start_at=demo1.start_at, tournament=demo1, day='1A' ) db.session.add(flight1_demo1) flight2_demo1 = Flights( start_at=demo1.start_at + timedelta(hours=6), tournament=demo1, day='1B' ) db.session.add(flight2_demo1) # Android Demo Tournament and Flights demo2 = Tournaments( casino=oneCasino, name="Android Demo Event '22", start_at= d4, buy_in_amount=100, starting_stack = 4000, blinds= 21, structure_link = 'https://www.seminolehardrockpokeropen.com/wp-content/uploads/2021/03/2021-April-13-14-11A-7P-140-Showdown-Mega-Turbo-Satellite-Event-.pdf' ) db.session.add(demo2) flight1_demo2 = Flights( start_at=demo2.start_at, tournament=demo2, day='1A' ) db.session.add(flight1_demo2) flight2_demo2 = Flights( start_at=demo2.start_at + timedelta(hours=6), tournament=demo2, day="1B" ) db.session.add(flight2_demo2) ######################## # USERS AND PROFILES ######################## # MY ADMIN ACCOUNT gabe = Users( id=1, email='*****@*****.**', password=sha256('casper5'), status='valid' ) db.session.add(gabe) gabe = Profiles( id=1, first_name='Gabriel', last_name='Herndon', nickname='', hendon_url=None, profile_pic_url='https://d1we5yax8fyln6.cloudfront.net/sites/stage32.com/files/imagecache/head_shot_500/headshots/3a160ee8689722fd93f3999b10d2b8d9_1428609546_l.jpg', user=gabe, roi_rating=0.0, swap_rating=0.0 ) db.session.add(gabe) db.session.add( Transactions( coins=5, user=gabe )) # TEST ACCOUNT 1 alice = Users( id=2, email='*****@*****.**', password=sha256('Casper5!'), status='valid' ) db.session.add(alice) alice = Profiles( id=2, first_name='Allison', last_name='Avery', nickname='Alice', user=alice, profile_pic_url='https://media.heartlandtv.com/images/Alice1.PNG', roi_rating=0.0, swap_rating=0.0 ) db.session.add(alice) db.session.add( Transactions( coins=5, user=alice )) # TEST ACCOUNT 1 - BUY INS a_buyinPast = Buy_ins( status='active', # tournament_id = past.id, chips = 1000, table = 5, seat = 10, created_at = datetime.utcnow(), updated_at = datetime.utcnow(), user = alice, flight = flight1_past, place='3rd', winnings=5000 ) db.session.add(a_buyinPast) a_buyin1 = Buy_ins( status='active', # tournament_id = demo1.id, chips = 15000, table = 7, seat = 4, created_at = datetime.utcnow(), updated_at = datetime.utcnow(), user = alice, flight = flight1_demo1 ) db.session.add(a_buyin1) a_buyin2 = Buy_ins( status='active', # tournament_id = demo2.id, chips = 15000, table = 7, seat = 4, created_at = datetime.utcnow(), updated_at = datetime.utcnow(), user = alice, flight = flight1_demo2 ) db.session.add(a_buyin2) # TEST ACCOUNT 2 bob = Users( id=3, email='*****@*****.**', password=sha256('Casper5!'), status='valid' ) db.session.add(bob) bob = Profiles( id=3, first_name='Bobert', last_name='Benderson', nickname='Bob', profile_pic_url='https://www.bobross.com/content/bob_ross_img.png', user=bob, roi_rating=0.0, swap_rating=0.0 ) db.session.add(bob) db.session.add( Transactions( coins=5, user=bob )) # TEST ACCOUNT 2 - BUY INS b_buyinPast = Buy_ins( status='active', # tournament_id = past.id, chips = 10000, table = 15, seat = 6, created_at = datetime.utcnow(), updated_at = datetime.utcnow(), user = bob, flight = flight1_past, place='4th', winnings=3000 ) db.session.add(b_buyinPast) b_buyin1 = Buy_ins( status='active', # tournament_id = demo1.id, chips = 12000, table = 9, seat = 3, created_at = datetime.utcnow(), updated_at = datetime.utcnow(), user = bob, flight = flight2_demo1 ) db.session.add(b_buyin1) b_buyin2 = Buy_ins( status='active', # tournament_id = demo2.id, chips = 12000, table = 9, seat = 3, created_at = datetime.utcnow(), updated_at = datetime.utcnow(), user = bob, flight = flight2_demo2 ) db.session.add(b_buyin2) # APPLE TEST ACCOUNT apple = Users( id=4, email='*****@*****.**', password=sha256('AppleTest07?'), status='valid' ) db.session.add(apple) apple = Profiles( id=4, first_name='Apple', last_name='Demo Account', nickname='', hendon_url=None, profile_pic_url='https://www.macworld.co.uk/cmsdata/features/3793151/apple_logo_thumb800.jpg', user=apple, roi_rating=0.0, swap_rating=0.0 ) db.session.add(apple) db.session.add( Transactions( coins=5, user=apple )) # APPLE TEST ACCOUNT - BUYINS app_buyinPast = Buy_ins( status='active', # tournament_id = past.id, chips = 3000, table = 2, seat = 1, created_at = datetime.utcnow(), updated_at = datetime.utcnow(), user = apple, flight = flight1_past, place='6th', winnings=500 ) db.session.add(app_buyinPast) app_buyin1 = Buy_ins( status='active', # tournament_id = demo1.id, chips = 10000, table = 17, seat = 2, created_at = datetime.utcnow(), updated_at = datetime.utcnow(), user = apple, flight = flight1_demo1 ) db.session.add(app_buyin1) ########## APPLE PAST TOURNAMENT ########### s1 = Swaps( tournament=past, sender_user=apple, recipient_user=alice, percentage=10, status='agreed', # due_at=(past.start_at + timedelta(days=4)) ) s2 = Swaps( tournament=past, sender_user=alice, recipient_user=apple, percentage=10, status='agreed', # due_at=(past.start_at + timedelta(days=4)), counter_swap=s1 ) s1.counter_swap = s2 db.session.add_all([s1, s2]) s1 = Swaps( tournament=past, sender_user=apple, recipient_user=alice, percentage=5, status='canceled', # due_at=(past.start_at + timedelta(days=4)) ) s2 = Swaps( tournament=past, sender_user=alice, recipient_user=apple, percentage=7, status='canceled', # due_at=(past.start_at + timedelta(days=4)), counter_swap=s1 ) s1.counter_swap = s2 db.session.add_all([s1, s2]) s1 = Swaps( tournament=past, sender_user=apple, recipient_user=bob, percentage=6, status='rejected', # due_at=(past.start_at + timedelta(days=4)) ) s2 = Swaps( tournament=past, sender_user=bob, recipient_user=apple, percentage=21, status='rejected', # due_at=(past.start_at + timedelta(days=4)), counter_swap=s1 ) s1.counter_swap = s2 db.session.add_all([s1, s2]) ########## APPLE CURRENT TOURNAMENT ########### s1 = Swaps( tournament=demo1, sender_user=apple, recipient_user=alice, percentage=5, status='pending', # due_at=(demo2.start_at + timedelta(days=4)) ) s2 = Swaps( tournament=demo1, sender_user=alice, recipient_user=apple, percentage=7, status='incoming', # due_at=(demo2.start_at + timedelta(days=4)), counter_swap=s1 ) s1.counter_swap = s2 db.session.add_all([s1, s2]) s1 = Swaps( tournament=demo1, sender_user=apple, recipient_user=alice, percentage=5, status='agreed', # due_at=(demo2.start_at + timedelta(days=4)) ) s2 = Swaps( tournament=demo1, sender_user=alice, recipient_user=apple, percentage=7, status='agreed', # due_at=(demo2.start_at + timedelta(days=4)), counter_swap=s1 ) s1.counter_swap = s2 db.session.add_all([s1, s2]) s1 = Swaps( tournament=demo1, sender_user=apple, recipient_user=alice, percentage=15, status='canceled', # due_at=(demo2.start_at + timedelta(days=4)) ) s2 = Swaps( tournament=demo1, sender_user=alice, recipient_user=apple, percentage=17, status='canceled', # due_at=(demo2.start_at + timedelta(days=4)), counter_swap=s1 ) s1.counter_swap = s2 db.session.add_all([s1, s2]) s1 = Swaps( tournament=demo1, sender_user=apple, recipient_user=bob, percentage=6, status='rejected', # due_at=(demo2.start_at + timedelta(days=4)) ) s2 = Swaps( tournament=demo1, sender_user=bob, recipient_user=apple, percentage=21, status='rejected', # due_at=(demo2.start_at + timedelta(days=4)), counter_swap=s1 ) s1.counter_swap = s2 db.session.add_all([s1, s2]) # ANDORID TEST ACCOUNT android = Users( id=5, email='*****@*****.**', password=sha256('AndroidTest08?'), status='valid' ) db.session.add(android) android = Profiles( id=5, first_name='Android', last_name='Demo Account', nickname='', hendon_url=None, profile_pic_url='https://1000logos.net/wp-content/uploads/2016/10/Android-Logo.png', user=android, roi_rating=0.0, swap_rating=0.0 ) db.session.add(android) db.session.add( Transactions( coins=5, user=android )) # ANDORID TEST ACCOUNT - BUYINS and_buyinPast = Buy_ins( status='active', # tournament_id = past.id, chips = 2000, table = 14, seat = 2, created_at = datetime.utcnow(), updated_at = datetime.utcnow(), user = android, flight = flight1_past, place='7th', winnings=400 ) db.session.add(and_buyinPast) and_buyin1 = Buy_ins( status='active', # tournament_id = demo2.id, chips = 10000, table = 17, seat = 2, created_at = datetime.utcnow(), updated_at = datetime.utcnow(), user = android, flight = flight1_demo2 ) db.session.add(and_buyin1) ########## ANDROID PAST TOURNAMENT ########### s1 = Swaps( tournament=past, sender_user=android, recipient_user=alice, percentage=10, status='agreed', # due_at=(past.start_at + timedelta(days=4)) ) s2 = Swaps( tournament=past, sender_user=alice, recipient_user=android, percentage=10, status='agreed', # due_at=(past.start_at + timedelta(days=4)), counter_swap=s1 ) s1.counter_swap = s2 db.session.add_all([s1, s2]) s1 = Swaps( tournament=past, sender_user=android, recipient_user=alice, percentage=5, status='canceled', # due_at=(past.start_at + timedelta(days=4)) ) s2 = Swaps( tournament=past, sender_user=alice, recipient_user=android, percentage=7, status='canceled', # due_at=(past.start_at + timedelta(days=4)), counter_swap=s1 ) s1.counter_swap = s2 db.session.add_all([s1, s2]) s1 = Swaps( tournament=past, sender_user=android, recipient_user=bob, percentage=6, status='rejected', # due_at=(past.start_at + timedelta(days=4)) ) s2 = Swaps( tournament=past, sender_user=bob, recipient_user=android, percentage=21, status='rejected', # due_at=(past.start_at + timedelta(days=4)), counter_swap=s1 ) s1.counter_swap = s2 db.session.add_all([s1, s2]) ########## ANDROID CURRENT TOURNAMENT ########### s1 = Swaps( tournament=demo2, sender_user=android, recipient_user=alice, percentage=5, status='pending', # due_at=(demo2.start_at + timedelta(days=4)) ) s2 = Swaps( tournament=demo2, sender_user=alice, recipient_user=android, percentage=7, status='incoming', # due_at=(demo2.start_at + timedelta(days=4)), counter_swap=s1 ) s1.counter_swap = s2 db.session.add_all([s1, s2]) s1 = Swaps( tournament=demo2, sender_user=android, recipient_user=alice, percentage=5, status='agreed', # due_at=(demo2.start_at + timedelta(days=4)) ) s2 = Swaps( tournament=demo2, sender_user=alice, recipient_user=android, percentage=7, status='agreed', # due_at=(demo2.start_at + timedelta(days=4)), counter_swap=s1 ) s1.counter_swap = s2 db.session.add_all([s1, s2]) s1 = Swaps( tournament=demo2, sender_user=android, recipient_user=alice, percentage=15, status='canceled', # due_at=(demo2.start_at + timedelta(days=4)) ) s2 = Swaps( tournament=demo2, sender_user=alice, recipient_user=android, percentage=17, status='canceled', # due_at=(demo2.start_at + timedelta(days=4)), counter_swap=s1 ) s1.counter_swap = s2 db.session.add_all([s1, s2]) s1 = Swaps( tournament=demo2, sender_user=android, recipient_user=bob, percentage=6, status='rejected', # due_at=(demo2.start_at + timedelta(days=4)) ) s2 = Swaps( tournament=demo2, sender_user=bob, recipient_user=android, percentage=21, status='rejected', # due_at=(demo2.start_at + timedelta(days=4)), counter_swap=s1 ) s1.counter_swap = s2 db.session.add_all([s1, s2]) db.session.execute("ALTER SEQUENCE tournaments_id_seq RESTART WITH 100") db.session.execute("ALTER SEQUENCE flights_id_seq RESTART WITH 100") # Give room for Swap Profit to add mock tournaments db.session.execute("ALTER SEQUENCE users_id_seq RESTART WITH 6") db.session.commit() return
def update_swap(user_id, id): # Get sender user sender = Profiles.query.get(user_id) req = request.get_json() utils.check_params(req) # Get swaps swap = Swaps.query.get(id) if sender.id != swap.sender_id: raise APIException( 'Access denied: You are not the sender of this swap', 401) current_percentage = swap.percentage if sender.get_coins() < swap.cost: raise APIException('Insufficient coins to see this swap', 402) if swap.status._value_ in ['canceled', 'rejected', 'agreed']: raise APIException('This swap can not be modified', 400) counter_swap_body = {} counter_swap = Swaps.query.get(swap.counter_swap_id) if swap is None or counter_swap is None: raise APIException('Swap not found', 404) # Get recipient user recipient = Profiles.query.get(swap.recipient_id) if recipient is None: raise APIException('Recipient user not found', 404) new_status = req.get('status') current_status = swap.status._value_ if 'percentage' in req and new_status not in [ 'agreed', 'rejected', 'canceled' ]: percentage = req['percentage'] counter = req.get('counter_percentage', percentage) if percentage < 1 or counter < 1: raise APIException('Cannot swap less than %1', 400) sender_availability = sender.available_percentage( swap.tournament_id) considering_this_swap = current_status == 'incoming' actions = percentage if considering_this_swap else ( percentage - swap.percentage) if actions > sender_availability: raise APIException(( 'Swap percentage too large. You can not exceed 50% per tournament. ' f'You have available: {sender_availability}%'), 400) recipient_availability = \ recipient.available_percentage( swap.tournament_id ) if (counter - counter_swap.percentage) > recipient_availability: raise APIException( ('Swap percentage too large for recipient. ' f'He has available to swap: {recipient_availability}%'), 400) # Update percentages swap.percentage = percentage counter_swap.percentage = counter if current_status == 'pending': if new_status == 'agreed': raise APIException('Cannot agree a swap on a pending status', 400) if new_status == 'rejected': raise APIException('Cannot reject this swap', 400) if current_status in ['incoming', 'counter_incoming' ] and new_status == 'canceled': raise APIException('Cannot cancel this swap', 400) # Update status if new_status in ['agreed', 'rejected', 'canceled']: if new_status == 'agreed': if recipient.get_coins() < swap.cost: raise APIException( 'Recipient has insufficient coins to process this swap' ) if current_status == 'incoming': overdraft = current_percentage - sender.available_percentage( swap.tournament_id) if overdraft > 0: raise APIException( f'Cannot agree to this swap, you are overdrafting by {str(overdraft)}%', 400) swap.status = new_status counter_swap.status = Swaps.counter_status(new_status) # If current swap is pending, leave statuses as they are elif current_status != 'pending': swap.status = Swaps.counter_status(swap.status._value_) counter_swap.status = Swaps.counter_status( counter_swap.status._value_) # send_fcm('swap_incoming_notification', recipient.id) db.session.commit() if new_status == 'agreed': db.session.add(Transactions(user_id=user_id, coins=-swap.cost)) db.session.add(Transactions(user_id=recipient.id, coins=-swap.cost)) db.session.commit() # send_fcm('swap_agreed_notificatin', recipient.id) user1_receipt = Buy_ins.get_latest(sender.id, swap.tournament_id) user2_receipt = Buy_ins.get_latest(recipient.id, swap.tournament_id) send_email(template='swap_confirmation', emails=[sender.user.email, recipient.user.email], data={ 'tournament_date': swap.tournament.start_at, 'tournament_name': swap.tournament.name, 'user1_name': f'{sender.first_name} {sender.last_name}', 'user1_prof_pic': sender.profile_pic_url, 'user1_percentage': swap.percentage, 'user1_receipt_url': user1_receipt and user1_receipt.receipt_img_url, 'user2_name': f'{recipient.first_name} {recipient.last_name}', 'user2_prof_pic': recipient.profile_pic_url, 'user2_percentage': counter_swap.percentage, 'user2_receipt_url': user2_receipt and user2_receipt.receipt_img_url }) return jsonify([ swap.serialize(), counter_swap.serialize(), ])
def create_swap(user_id): # Get sender user sender = Profiles.query.get(user_id) # Get request json req = request.get_json() utils.check_params(req, 'tournament_id', 'recipient_id', 'percentage') if user_id == req['recipient_id']: raise APIException( f'Cannot swap with yourself, user_id: {user_id}, ' f'recipient_id: {req["recipient_id"]}') # Check for sufficient coins swap_cost = req.get('cost', 1) if swap_cost < 1: raise APIException('No free swaps', 400) if sender.get_coins() - sender.get_reserved_coins() < swap_cost: raise APIException('Insufficient coins to make this swap', 402) # Get recipient user recipient = Profiles.query.get(req['recipient_id']) if recipient is None: raise APIException('Recipient user not found', 404) # Check recipient swap availability if recipient.swap_availability_status._value_ == 'unavailable': raise APIException('This person is unavailable for swaps', 401) # Can only send one swap offer at a time existing_swaps = Swaps.query.filter_by( sender_id=user_id, recipient_id=recipient.id, tournament_id=req['tournament_id']) unacceptable_status = ['pending', 'incoming', 'counter_incoming'] for swap in existing_swaps: if swap.status._value_ in unacceptable_status: raise APIException( f'Already have a swap with status "{swap.status._value_}" with this player', 401) percentage = req['percentage'] counter = req.get('counter_percentage', percentage) if percentage < 1 or counter < 1: raise APIException('Cannot swap less than %1', 400) # Check tournament existance trmnt = Tournaments.query.get(req['tournament_id']) if trmnt is None: raise APIException('Tournament not found', 404) # Swap percentage availability sender_availability = sender.available_percentage(req['tournament_id']) if percentage > sender_availability: raise APIException(( 'Swap percentage too large. You can not exceed 50% per tournament. ' f'You have available: {sender_availability}%'), 400) recipient_availability = recipient.available_percentage( req['tournament_id']) if counter > recipient_availability: raise APIException( ('Swap percentage too large for recipient. ' f'He has available to swap: {recipient_availability}%'), 400) swap = Swaps(sender_id=user_id, tournament_id=req['tournament_id'], recipient_id=recipient.id, percentage=percentage, cost=swap_cost, status='pending') counter_swap = Swaps(sender_id=recipient.id, tournament_id=req['tournament_id'], recipient_id=user_id, percentage=counter, cost=swap_cost, status='incoming', counter_swap=swap) swap.counter_swap = counter_swap db.session.add_all([swap, counter_swap]) db.session.commit() # send_fcm('swap_incoming_notification', recipient.id) return jsonify({'message': 'Swap created successfully.'}), 200
def run_seeds(): Coins.query.delete() Transactions.query.delete() Buy_ins.query.delete() Swaps.query.delete() Flights.query.delete() Tournaments.query.delete() Profiles.query.delete() Users.query.delete() lou = Users( email='*****@*****.**', password=sha256('loustadler') ) db.session.add(lou) lou = Profiles( first_name='Luiz', last_name='Stadler', nickname='Lou', hendon_url='https://pokerdb.thehendonmob.com/player.php?a=r&n=207424', profile_pic_url='https://pokerdb.thehendonmob.com/pictures/Lou_Stadler_Winner.JPG', valid=True, user=lou ) db.session.add(lou) cary = Users( email='*****@*****.**', password=sha256('carykatz') ) db.session.add(cary) cary = Profiles( first_name='Cary', last_name='Katz', nickname='', hendon_url='https://pokerdb.thehendonmob.com/player.php?a=r&n=26721', profile_pic_url='https://pokerdb.thehendonmob.com/pictures/carykatzpic.png', valid=True, user=cary ) db.session.add(cary) kate = Users( email='*****@*****.**', password=sha256('kateHoang') ) db.session.add(kate) kate = Profiles( first_name='Kate', last_name='Hoang', nickname='', hendon_url='https://pokerdb.thehendonmob.com/player.php?a=r&n=421758', profile_pic_url='https://pokerdb.thehendonmob.com/pictures/Hoang_2.jpg', valid=True, user=kate ) db.session.add(kate) nikita = Users( email='*****@*****.**', password=sha256('nikitapoker') ) db.session.add(nikita) nikita = Profiles( first_name='Nikita', last_name='Bodyakovskiy', nickname='Mikita', hendon_url='https://pokerdb.thehendonmob.com/player.php?a=r&n=159100', profile_pic_url='https://pokerdb.thehendonmob.com/pictures/NikitaBadz18FRh.jpg', valid=True, user=nikita ) db.session.add(nikita) heartland = Tournaments( name='Heartland Poker Tour - HPT Colorado, Black Hawk', address='261 Main St, Black Hawk, CO 80422', start_at=datetime(2019,10,11,12), end_at=datetime(2019,10,11,21) ) db.session.add(heartland) stones = Tournaments( name='Stones Live Fall Poker Series', address='6510 Antelope Rd, Citrus Heights, CA 95621', start_at=datetime(2019,9,30,11), end_at=datetime(2019,10,1,22) ) db.session.add(stones) wpt = Tournaments( name='WPT DeepStacks - WPTDS Sacramento', address='Thunder Valley Casino Resort, 1200 Athens Ave, Lincoln, CA 95648', start_at=datetime(2019,10,2,12), end_at=datetime(2019,10,2,22) ) db.session.add(wpt) now = datetime.utcnow() live = Tournaments( name='Live Tournament at Vegas Casino', address='Thunder Valley Casino Resort, 1200 Athens Ave, Lincoln, CA 95648', start_at=now - timedelta(days=2), end_at=now + timedelta(days=600) ) db.session.add(live) flight1_live = Flights( start_at=now, end_at=now + timedelta(hours=5), tournament=live, day=1 ) db.session.add(flight1_live) flight2_live = Flights( start_at=now + timedelta(days=1), end_at=now + timedelta(days=1, hours=5), tournament=live, day=2 ) db.session.add(flight2_live) flight1_heartland = Flights( start_at=datetime(2019,10,11,12), end_at=datetime(2019,10,11,16), tournament=heartland, day=1 ) db.session.add(flight1_heartland) flight2_heartland = Flights( start_at=datetime(2019,10,11,16), end_at=datetime(2019,10,11,21), tournament=heartland, day=1 ) db.session.add(flight2_heartland) flight1_stones = Flights( start_at=datetime(2019,9,30,12), end_at=datetime(2019,9,30,15), tournament=stones, day=1 ) db.session.add(flight1_stones) flight2_stones = Flights( start_at=datetime(2019,9,30,15), end_at=datetime(2019,9,30,21), tournament=stones, day=1 ) db.session.add(flight2_stones) flight3_stones = Flights( start_at=datetime(2019,10,1,12), end_at=datetime(2019,10,1,21), tournament=stones, day=2 ) db.session.add(flight3_stones) flight1_wpt = Flights( start_at=datetime(2019,10,2,12), end_at=datetime(2019,10,2,22), tournament=wpt, day=1 ) db.session.add(flight1_wpt) db.session.add(Swaps( tournament=heartland, sender_user=lou, recipient_user=cary, percentage=10, winning_chips=None, due_at=(heartland.end_at + timedelta(days=4)) )) db.session.add(Swaps( tournament=heartland, sender_user=cary, recipient_user=lou, percentage=10, winning_chips=None, due_at=(heartland.end_at + timedelta(days=4)) )) db.session.add(Swaps( tournament=heartland, sender_user=nikita, recipient_user=kate, percentage=15, winning_chips=None, due_at=(heartland.end_at + timedelta(days=4)) )) db.session.add(Swaps( tournament=heartland, sender_user=kate, recipient_user=nikita, percentage=15, winning_chips=None, due_at=(heartland.end_at + timedelta(days=4)) )) db.session.add(Swaps( tournament=heartland, sender_user=lou, recipient_user=kate, percentage=5, winning_chips=None, due_at=(heartland.end_at + timedelta(days=4)) )) db.session.add(Swaps( tournament=heartland, sender_user=kate, recipient_user=lou, percentage=5, winning_chips=None, due_at=(heartland.end_at + timedelta(days=4)) )) db.session.add(Swaps( tournament=live, sender_user=lou, recipient_user=cary, percentage=10, winning_chips=None, due_at=(live.end_at + timedelta(days=4)) )) db.session.add(Swaps( tournament=live, sender_user=cary, recipient_user=lou, percentage=10, winning_chips=None, due_at=(live.end_at + timedelta(days=4)) )) db.session.add(Swaps( tournament=live, sender_user=nikita, recipient_user=kate, percentage=15, winning_chips=None, due_at=(live.end_at + timedelta(days=4)) )) db.session.add(Swaps( tournament=live, sender_user=kate, recipient_user=nikita, percentage=15, winning_chips=None, due_at=(live.end_at + timedelta(days=4)) )) db.session.add(Swaps( tournament=live, sender_user=lou, recipient_user=kate, percentage=5, winning_chips=None, due_at=(live.end_at + timedelta(days=4)) )) db.session.add(Swaps( tournament=live, sender_user=kate, recipient_user=lou, percentage=5, winning_chips=None, due_at=(live.end_at + timedelta(days=4)) )) db.session.add(Swaps( tournament=wpt, sender_user=lou, recipient_user=cary, percentage=10, winning_chips=10000, due_at=(wpt.end_at + timedelta(days=4)) )) db.session.add(Swaps( tournament=wpt, sender_user=cary, recipient_user=lou, percentage=10, winning_chips=500, due_at=(wpt.end_at + timedelta(days=4)) )) db.session.add(Swaps( tournament=wpt, sender_user=nikita, recipient_user=kate, percentage=15, winning_chips=100, due_at=(wpt.end_at + timedelta(days=4)) )) db.session.add(Swaps( tournament=wpt, sender_user=kate, recipient_user=nikita, percentage=15, winning_chips=0, due_at=(wpt.end_at + timedelta(days=4)) )) db.session.add(Swaps( tournament=wpt, sender_user=cary, recipient_user=kate, percentage=5, winning_chips=500, due_at=(wpt.end_at + timedelta(days=4)) )) db.session.add(Swaps( tournament=wpt, sender_user=kate, recipient_user=cary, percentage=5, winning_chips=0, due_at=(wpt.end_at + timedelta(days=4)) )) db.session.add(Buy_ins( chips=1200, table=1, seat=2, user=lou, flight=flight1_live )) db.session.add(Buy_ins( chips=1200, table=1, seat=4, user=lou, flight=flight1_live )) db.session.add(Buy_ins( chips=500, table=7, seat=1, user=cary, flight=flight1_live )) db.session.add(Buy_ins( chips=500, table=3, seat=2, user=cary, flight=flight2_live )) db.session.add(Buy_ins( chips=1000, table=2, seat=2, user=kate, flight=flight2_live )) db.session.add(Buy_ins( chips=300, table=2, seat=2, user=kate, flight=flight2_live )) db.session.add(Buy_ins( chips=700, table=3, seat=1, user=nikita, flight=flight2_live )) db.session.commit()
def create_swap(user_id): # get sender user sender = Profiles.query.get(user_id) body = request.get_json() check_params(body, 'tournament_id', 'recipient_id', 'percentage') percentage = abs(body['percentage']) # get recipient user recipient = Profiles.query.get(body['recipient_id']) if recipient is None: raise APIException('Recipient user not found', 404) if Swaps.query.get( (user_id, body['recipient_id'], body['tournament_id'])): raise APIException('Swap already exists, can not duplicate', 400) sender_availability = sender.available_percentage( body['tournament_id']) if percentage > sender_availability: raise APIException(( 'Swap percentage too large. You can not exceed 50% per tournament. ' f'You have available: {sender_availability}%'), 400) recipient_availability = recipient.available_percentage( body['tournament_id']) if percentage > recipient_availability: raise APIException( ('Swap percentage too large for recipient. ' f'He has available to swap: {recipient_availability}%'), 400) db.session.add( Swaps(sender_id=user_id, tournament_id=body['tournament_id'], recipient_id=body['recipient_id'], percentage=percentage)) db.session.add( Swaps(sender_id=body['recipient_id'], tournament_id=body['tournament_id'], recipient_id=user_id, percentage=percentage)) db.session.commit() trmnt = Tournaments.query.get(body['tournament_id']) send_email(type='swap_created', to=sender.user.email, data={ 'percentage': percentage, 'recipient_firstname': recipient.first_name, 'recipient_lastname': recipient.last_name, 'recipient_email': recipient.user.email }) send_email(type='swap_created', to=recipient.user.email, data={ 'percentage': percentage, 'recipient_firstname': sender.first_name, 'recipient_lastname': sender.last_name, 'recipient_email': sender.user.email }) return jsonify({'message': 'Swap created successfully.'}), 200