package hu.ppke.itk.itkStock.server.db.stockGame;
import hu.ppke.itk.itkStock.server.db.dbAccess.AbstractManager;
import hu.ppke.itk.itkStock.server.db.dbAccess.BusinessObjectException;
import hu.ppke.itk.itkStock.server.db.dbAccess.DatabaseConnector;
import hu.ppke.itk.itkStock.server.db.user.User;
import hu.ppke.itk.itkStock.server.db.user.UserManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class TransactionManager extends AbstractManager<Transaction> {
private UserManager userManager ;
//private StockManager stockManager ;
private double fixTransactionCost ;
private double percentTransactionCost ;
private PreparedStatement addTransaction;
/**
* Végrehajtunk egy tranzakciót
* @param userid
* @param paperName
* @param volume Mennyiség: pozitív - vétel, negatív - eladás
* @throws SQLException
* @throws BusinessObjectException
*/
public void makeTransaction(int userid, String paperName, int volume) throws SQLException, BusinessObjectException
{
// User adatok validálása
if (!userManager.checkUserExistenceById(userid))
{
// Invalid userid
throw new BusinessObjectException("Invalid user id") ;
}
// TODO: élő árfolyam lekérdezése (másik feladatra vár)
// double price = getPrice(paperName) ;
double price = 150 ;
// Ennyivel fog változni a user számláján az összeg
double sum = - volume * price ;
// Jutalékok levonása
sum -= fixTransactionCost + sum * percentTransactionCost ;
// Adatbázisban a változtatások elkönyvelése
// TODO: Adatbázis tranzakció indítása - ezeket nem választhatjuk külön, különben
// egy adatbázishiba esetén eltűnik/megjelenik a pénz
// DatabaseConnector.startTransaction() ;
// Tranzakció bejegyzése
// TODO
// Usertől pénzösszeg levonása
User user = userManager.get(userid) ;
// TODO: Pénzösszeg állítása
// user.setMoney(user.getMoney()+sum) ;
// TODO: Adatbázis tranzakció lezárása
// DatabaseConnector.endTransaction() ;
}
/**
* Adott mennyiségű értékpapír eladása
*
* @param userid
* @param paperName
* @param volume
* @throws SQLException
* @throws BusinessObjectException
*/
public void sell(int userid, String paperName, int volume) throws SQLException, BusinessObjectException
{
makeTransaction(userid, paperName, -volume) ;
}
/**
* Adott mennyiségű értékpapír vásárlása
*
* @param userid
* @param paperName
* @param volume
* @throws SQLException
* @throws BusinessObjectException
*/
public void buy(int userid, String paperName, int volume) throws SQLException, BusinessObjectException
{
makeTransaction(userid, paperName, volume) ;
}
/**
* A fix tranzakciós költség lekérdezése
* @return
*/
public double getFixTransactionCost() {
return fixTransactionCost;
}
/**
* A fix tranzakciós költség beállítása
* @param fixTransactionCost
*/
public void setFixTransactionCost(double fixTransactionCost) {
this.fixTransactionCost = fixTransactionCost;
}
/**
* A százalékos tranzakciós költség lekérdezése
* @return
*/
public double getPercentTransactionCost() {
return percentTransactionCost;
}
/**
* A százalékos tranzakciós költség beállítása
* @param percentTransactionCost
*/
public void setPercentTransactionCost(double percentTransactionCost) {
this.percentTransactionCost = percentTransactionCost;
}
/**
* A tranzakciómenedzserünk konstruktora, szüksége van a user managerre
* @param userManager
* @throws SQLException
*/
public TransactionManager(DatabaseConnector dbConnector) throws SQLException
{
super(dbConnector) ;
userManager = new UserManager(dbConnector) ;
// stockManager = new StockManager(dbConnector) ;
// TODO: Jutalékok adatbázisban tárolása
fixTransactionCost = 10 ;
percentTransactionCost = 0.01 ;
addTransaction = this.dbConnector.prepareStatement("INSERT INTO StockHistory VALUES (?, ?, ?, ?, ?, ?);") ;
}
@Override
public void update(Transaction bo) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public Transaction get(int id) throws SQLException, BusinessObjectException {
// TODO Auto-generated method stub
return null;
}
@Override
public void create(Transaction bo) throws SQLException,
BusinessObjectException {
// TODO Auto-generated method stub
}
}