def create_gamecoins_for_game(game, active_coins): if len(active_coins) == 0: raise BadRequest('At least one coin must be allowed in a game') res = [] for coin in active_coins: coin = Coin.get_or_none(Coin.id == coin['id']) if coin is None: raise BadRequest('Invalid coin') res.append(GameCoin.create( game=game, coin=coin, )) return res
def up(db): with db.atomic(): migrator = PostgresqlMigrator(db) db.bind(MODELS, bind_refs=False, bind_backrefs=False) db.create_tables(MODELS) if Coin.get_or_none(Coin.id == 1) is None: Coin.create(name='Bitcoin', symbol='BTC') Coin.create(name='Ethereum', symbol='ETH') Coin.create(name='Litecoin', symbol='LTC') Coin.create(name='Coin 3', symbol='CO3') Coin.create(name='Coin 4', symbol='CO4') Coin.create(name='Coin 5', symbol='CO5') global_indef = Game.create(name='Global Indefinite', starting_cash=10000.00, shareable_link='INDEF', shareable_code='INDEF', ends_at=None) # insert achievements into database Achievement.create( name="Win", description="Finish in first place in a private game") Achievement.create( name="Double net worth", description="Achieved by doubling your net worth in a game") Achievement.create(name="Identity Crisis", description="Change your username") # insert goals into database Goal.create(name="Entrepreneur", description="Create a private game") all_coins = Coin.select() for coin in all_coins: GameCoin.create(game=global_indef, coin=coin) global_timed = Game.create(name='Global Timed', starting_cash=10000.00, shareable_link='TIMED', shareable_code='TIMED', ends_at=datetime.utcnow() + timedelta(minutes=1)) # CHANGEME for devel purposes, making it 1 min for now GameCoin.create(game=global_timed, coin=Coin.get()) # from auth.services import register hashed = bcrypt.hashpw("admin".encode(), bcrypt.gensalt()).decode() admin = Profile.create(username="******", hashed_password=hashed, is_admin=True) # Required so that admin can still view graphs in the landing page GameProfile.create(profile=admin, game=global_indef, cash=0.0)
def create_price_alert_route(profile): validated_data: dict = CreatePriceAlertRequestSerializer.deserialize( request.json) try: strike_price = Decimal(validated_data['strike_price']) if strike_price < 0: raise BadRequest('The strike price cannot be negative') except: raise BadRequest('Invalid decimal number for strike price') coin_id = validated_data['coin_id'] type = validated_data['type'] coin = Coin.get_or_none(Coin.id == coin_id) if coin is None: raise BadRequest('Invalid coin id') if type == 'above': alert = create_price_alert(profile, coin, strike_price, above=True) elif type == 'below': alert = create_price_alert(profile, coin, strike_price, above=False) else: raise BadRequest( 'The type of a price alert must be "above" or "below"') return jsonify(PriceAlertSerializer.serialize(alert))