stock-tracker-discord/mongo.py
socks a893cc1c04 Moved flatfile database to flatfile.py
Added mongodb connection settings to config
Updated config format
2021-03-08 13:34:51 +00:00

92 lines
2.1 KiB
Python

from mongoengine import *
import config as cfg
from bson import Decimal128
from decimal import Decimal
import yfi
connect(cfg.mongodb_database, "default", host=cfg.mongodb_uri)
class Portfolio(Document):
user = StringField(required=True)
stocks = DictField(default={})
class Watchlist(Document):
user = StringField(max_length=200, required=True)
stocks = DictField(default={})
def user_check(user):
# Will create empty portfolio and watchlist for new users
if not Portfolio.objects(user=user):
portfolio = Portfolio(user=user)
portfolio.save()
if not Watchlist.objects(user=user):
watchlist = Watchlist(user=user)
watchlist.save()
# Portfolio Stuff
def get_stocks(user):
user_check(user)
return Portfolio.objects.get(user=user).stocks
def add_stock(user, stock, amount):
user_check(user)
amount = Decimal(amount)
portfolio = Portfolio.objects.get(user=user)
if not (yfi.stock_exists(stock)):
# Stock ticker does not exist on yahoo finance
return False
if stock in portfolio.stocks.keys():
portfolio.stocks[stock] = Decimal128(
amount + portfolio.stocks[stock].to_decimal()
)
else:
portfolio.stocks[stock] = Decimal128(amount)
portfolio.save()
return True
def delete_stock(user, stock):
user_check(user)
portfolio = Portfolio.objects.get(user=user)
if stock in portfolio.stocks.keys():
del portfolio.stocks[stock]
portfolio.save()
# Watchlist Stuff
def get_watchlist(user):
user_check(user)
return Watchlist.objects.get(user=user).stocks
def watch(user, stock, est_price="0"):
user_check(user)
watchlist = Watchlist.objects.get(user=user)
if not (yfi.stock_exists(stock)):
# Stock ticker does not exist on yahoo finance
return False
watchlist.stocks[stock] = str(Decimal128(est_price))
watchlist.save()
return True
def unwatch(user, stock):
user_check(user)
watchlist = Watchlist.objects.get(user=user)
if stock in watchlist.stocks.keys():
del watchlist.stocks[stock]
watchlist.save()
return True