stocksim
Version:
a simple stock market simulator
62 lines • 3.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const sharesModel_1 = require("../../database/shares/sharesModel");
const usersModel_1 = require("../../database/users/usersModel");
const Symbol_1 = require("../api/Symbol");
class UserAction {
/**
* @deprecated
*/
static async BuyShares(numOfShares, sym, userId) {
numOfShares = Math.abs(numOfShares);
sym = sym.toUpperCase();
const promises = await Promise.all([usersModel_1.UserModel.findOneOrCreate({ uId: userId }), new Symbol_1.Symbol(sym).CurrentPrice()]);
const data = { user: promises[0], symbolCost: promises[1] };
const success = await data.user.removeUserCapital({ cost: data.symbolCost * numOfShares });
if (success) {
const sharesInDb = await sharesModel_1.ShareModel.findOneOrCreate({ symbol: sym, uId: userId });
await sharesInDb.addShares({ numberOfShares: numOfShares });
return true;
}
return false;
}
static async BuySharesReturnSharePrice(toSpend, sym, userId) {
toSpend = Math.abs(toSpend);
sym = sym.toUpperCase();
const promises = await Promise.all([usersModel_1.UserModel.findOneOrCreate({ uId: userId }), new Symbol_1.Symbol(sym).CurrentPrice()]);
const data = { user: promises[0], symbolCost: promises[1] };
const success = await data.user.removeUserCapital({ cost: toSpend });
if (success) {
const sharesInDb = await sharesModel_1.ShareModel.findOneOrCreate({ symbol: sym, uId: userId });
await sharesInDb.addShares({ numberOfShares: toSpend / data.symbolCost });
return { success: true, price: data.symbolCost };
}
return { success: false, price: data.symbolCost };
}
static async SellShares(n, sym, userId) {
sym = sym.toUpperCase();
const promises = await Promise.all([sharesModel_1.ShareModel.findOneOrCreate({ uId: userId, symbol: sym }), new Symbol_1.Symbol(sym).CurrentPrice()]);
const data = { shareData: promises[0], symbolCost: promises[1] };
const success = await data.shareData.sellShares({ numberOfShares: n });
if (success) {
const user = await usersModel_1.UserModel.findOneOrCreate({ uId: userId });
await user.addUserCapital({ amountToAdd: n * data.symbolCost });
return { success: true, price: data.symbolCost };
}
return { success: false, price: data.symbolCost };
}
static async SellAllShares(sym, userId) {
sym = sym.toUpperCase();
const shareDoc = await sharesModel_1.ShareModel.findOneOrCreate({ uId: userId, symbol: sym });
const shareNum = shareDoc.shares;
const sellObject = await this.SellShares(shareNum, sym, userId);
const returnObject = {
success: sellObject.success,
price: sellObject.price,
holding: shareNum,
};
return returnObject;
}
}
exports.UserAction = UserAction;
//# sourceMappingURL=UserAction.js.map