package model import java.time.LocalDateTime const val feesAndTaxRate = 0.33 const val minimumNetProfit = 0.4 const val buyWeight = 2.0 data class AppConfig( // [DB 저장 데이터] // 실전 3종 val realAppKey: String = "", val realSecretKey: String = "", val realAccountNo: String = "", // 모의 3종 val vtsAppKey: String = "", val vtsSecretKey: String = "", val vtsAccountNo: String = "", // [세션 데이터 - 메모리에서만 관리] var marketToken: String = "", var marketTokenExpiredAt: LocalDateTime? = null, // 만료 시간 추가 var tradeToken: String = "", var tradeTokenExpiredAt: LocalDateTime? = null, val htsId: String = "", var websocketToken: String = "", val isSimulation: Boolean = true, val modelPath: String = "", val embedModelPath: String = "") { val accountNo : String get() { return if (isSimulation) vtsAccountNo else realAccountNo } } // [신규] 전역에서 참조할 단일 세션 객체 object KisSession { var config: AppConfig = AppConfig() fun getWebSocketKey() = config.websocketToken // 시장 데이터 토큰 유효성 검사 (만료 5분 전부터는 유효하지 않은 것으로 간주) fun isMarketTokenValid(): Boolean { return config.marketToken.isNotEmpty() && config.marketTokenExpiredAt?.isAfter(LocalDateTime.now().plusMinutes(5)) ?: false } // 매매용 토큰 유효성 검사 fun isTradeTokenValid(): Boolean { return config.tradeToken.isNotEmpty() && config.tradeTokenExpiredAt?.isAfter(LocalDateTime.now().plusMinutes(5)) ?: false } }