def dashboard_company(id): target = Company.query.filter_by(id=id).first() if not target: abort(404) _list = current_user.lists.first() if not _list: _list = List.make(current_user) db.session.add(_list) db.session.flush() _list.add_company(target) db.session.add(_list) db.session.commit() return redirect(f"/company/{id}")
def dashboard(): if request.method == "POST": _list = current_user.lists.first() if not _list: _list = List.make(current_user) db.session.add(_list) db.session.flush() symbol = request.form.to_dict().get("symbol") # TODO: check if valid symbol here, capitalization too company = Company.query.filter_by(symbol=symbol).first() if not company: company = Company.make(symbol) db.session.add(company) db.session.flush() _list.add_company(company) snapshot = (Snapshot.query.filter_by(company_id=company.id).order_by( Snapshot.creation_time.desc()).first()) if not snapshot: snapshot = Snapshot.make(symbol, company) if snapshot: db.session.add(snapshot) db.session.commit() else: db.session.rollback() db.session.commit() companies = [] if _list: companies = _list.companies() return Company.repr_card_grid(_list.companies()) if request.method == "DELETE": target = request.form.get("target") _list = current_user.lists.first() if not _list: return "" # should not happen company = Company.query.filter_by(id=target).first() _list.remove_company(company) db.session.commit() return "" if request.method == "PUT": target = request.form.get("target") company = Company.query.filter_by(id=target).first() if not company: return "" latest_snapshot = (Snapshot.query.filter_by( company_id=company.id).order_by( Snapshot.creation_time.desc()).first()) if not latest_snapshot.stale(): return company.repr_card() snapshot = Snapshot.make(company.symbol, company) if snapshot: db.session.add(snapshot) db.session.commit() else: db.session.rollback() return company.repr_card() _list = current_user.lists.first() if not _list: _list = List.make(current_user) db.session.add(_list) db.session.commit() card_grid = Company.repr_card_grid(_list.companies()) return render_template("dashboard.html", card_grid=card_grid)