Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions src/main/kotlin/com/option/domain/collection/entity/RawFile.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.option.domain.collection.entity

import com.option.global.common.BaseEntity
import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.GeneratedValue
import jakarta.persistence.GenerationType
import jakarta.persistence.Id
import jakarta.persistence.Table
import java.time.Instant
import java.time.LocalDate

// 원본파일 위치 저장용
@Entity
@Table(name = "raw_file")
class RawFile(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "raw_file_id")
val rawFileId: Long? = null,

@Column(nullable = false)
val job: String,

@Column(name = "session_date", nullable = false)
val sessionDate: LocalDate,

@Column(nullable = false)
val endpoint: String,

@Column(nullable = false)
val symbol: String,

@Column(nullable = false)
val page: Int,

@Column(nullable = false, length = 400)
val path: String,

@Column(nullable = false)
val sha256: String,

@Column(nullable = false)
val bytes: Long,

@Column(name = "request_params", columnDefinition = "text")
val requestParams: String?,

@Column(name = "received_at", nullable = false)
val receivedAt: Instant,
) : BaseEntity()
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.option.domain.collection.vo

// 디스크가 모자랄 때 멈추는 기준이다. 백필이 먼저 멈추고, 그다음 본 수집이 멈춘다. 계산과 채점은 안 멈춘다.
enum class DiskRule { BACKGROUND, COLLECTION, NONE }

enum class FailureCategory { TIMEOUT, NETWORK, RATE_LIMIT, SERVER_ERROR, CLIENT_ERROR, PARSE, DB_CONSTRAINT, DISK, OTHER }
39 changes: 39 additions & 0 deletions src/main/kotlin/com/option/domain/journal/entity/JournalEntry.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.option.domain.journal.entity

import com.option.domain.journal.vo.JournalDirection
import com.option.global.common.BaseEntity
import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.EnumType
import jakarta.persistence.Enumerated
import jakarta.persistence.GeneratedValue
import jakarta.persistence.GenerationType
import jakarta.persistence.Id
import jakarta.persistence.Table
import jakarta.persistence.UniqueConstraint
import java.time.LocalDate

// 옵션 보고 상방하방 맞추는 용도, 종목당 하나
@Entity
@Table(
name = "journal_entry",
uniqueConstraints = [UniqueConstraint(name = "uk_journal", columnNames = ["symbol", "target_session"])],
)
class JournalEntry(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null,

@Column(nullable = false)
val symbol: String,

@Column(name = "target_session", nullable = false)
val targetSession: LocalDate,

@Enumerated(EnumType.STRING)
@Column(nullable = false)
var direction: JournalDirection,

@Column(length = 500)
var memo: String?,
) : BaseEntity()
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.option.domain.journal.vo

enum class JournalDirection {
UP,
DOWN,
FLAT,
HOLD
}
37 changes: 37 additions & 0 deletions src/main/kotlin/com/option/domain/market/entity/EventCalendar.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.option.domain.market.entity

import com.option.domain.market.vo.EventType
import com.option.global.common.BaseEntity
import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.EnumType
import jakarta.persistence.Enumerated
import jakarta.persistence.GeneratedValue
import jakarta.persistence.GenerationType
import jakarta.persistence.Id
import jakarta.persistence.Table
import java.time.LocalDate

// 시장 이벤트
@Entity
@Table(name = "event_calendar")
class EventCalendar(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null,

@Column(name = "event_date", nullable = false)
val eventDate: LocalDate,

@Enumerated(EnumType.STRING)
@Column(name = "event_type", nullable = false)
val eventType: EventType,

@Column(nullable = false)
val symbol: String,

val title: String?,

@Column(nullable = false)
val source: String,
) : BaseEntity()
37 changes: 37 additions & 0 deletions src/main/kotlin/com/option/domain/market/entity/Instrument.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.option.domain.market.entity

import com.option.domain.market.vo.SymbolGroup
import com.option.global.common.BaseEntity
import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.EnumType
import jakarta.persistence.Enumerated
import jakarta.persistence.GeneratedValue
import jakarta.persistence.GenerationType
import jakarta.persistence.Id
import jakarta.persistence.Table
import java.time.LocalDate

// 종목
@Entity
@Table(name = "instrument")
class Instrument(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null,

@Column(nullable = false, unique = true)
val symbol: String,

var name: String?,

@Enumerated(EnumType.STRING)
@Column(name = "symbol_group", nullable = false)
var symbolGroup: SymbolGroup,

@Column(name = "in_sp500", nullable = false)
var inSp500: Boolean,

@Column(name = "as_of_date")
var asOfDate: LocalDate?,
) : BaseEntity()
36 changes: 36 additions & 0 deletions src/main/kotlin/com/option/domain/market/entity/MacroDaily.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.option.domain.market.entity

import com.option.global.common.BaseEntity
import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.GeneratedValue
import jakarta.persistence.GenerationType
import jakarta.persistence.Id
import jakarta.persistence.Table
import java.time.Instant
import java.time.LocalDate


// vix나 하이일드 스프레드, 국채금리 등 매크로
@Entity
@Table(name = "macro_daily")
class MacroDaily(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null,

@Column(nullable = false)
val series: String,

@Column(name = "obs_date", nullable = false)
val obsDate: LocalDate,

@Column(nullable = false)
val value: Double,

@Column(nullable = false)
val provider: String,

@Column(name = "received_at", nullable = false)
val receivedAt: Instant,
) : BaseEntity()
24 changes: 24 additions & 0 deletions src/main/kotlin/com/option/domain/market/entity/MarketSession.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.option.domain.market.entity

import com.option.global.common.BaseEntity
import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.Id
import jakarta.persistence.Table
import java.time.Instant
import java.time.LocalDate

// 거래일
@Entity
@Table(name = "market_session")
class MarketSession(
@Id
@Column(name = "session_date")
val sessionDate: LocalDate,

@Column(name = "open_at", nullable = false)
val openAt: Instant,

@Column(name = "close_at", nullable = false)
val closeAt: Instant,
) : BaseEntity()
105 changes: 105 additions & 0 deletions src/main/kotlin/com/option/domain/market/entity/OptionDaily.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
package com.option.domain.market.entity

import com.option.domain.market.vo.OptionType
import com.option.global.common.BaseEntity
import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.EnumType
import jakarta.persistence.Enumerated
import jakarta.persistence.GeneratedValue
import jakarta.persistence.GenerationType
import jakarta.persistence.Id
import jakarta.persistence.Table
import java.time.Instant
import java.time.LocalDate

// 종목 각각에서 체결된 계약 하나
@Entity
@Table(name = "option_daily")
class OptionDaily(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null,

@Column(name = "contract_symbol", nullable = false)
val contractSymbol: String,

@Column(nullable = false)
val underlying: String,

@Column(name = "expiration_date", nullable = false)
val expirationDate: LocalDate,

@Column(nullable = false)
val strike: Double,

@Enumerated(EnumType.STRING)
@Column(name = "option_type", nullable = false)
val optionType: OptionType,

@Column(name = "session_date", nullable = false)
val sessionDate: LocalDate,

@Column(nullable = false)
val provider: String,

@Column(nullable = false)
val feed: String,

@Column(name = "received_at", nullable = false)
val receivedAt: Instant,

@Column(name = "bar_date")
val barDate: LocalDate? = null,

@Column(name = "open_price")
val openPrice: Double? = null,

@Column(name = "high_price")
val highPrice: Double? = null,

@Column(name = "low_price")
val lowPrice: Double? = null,

@Column(name = "close_price")
val closePrice: Double? = null,

val volume: Long? = null,

@Column(name = "trade_count")
val tradeCount: Long? = null,

val vwap: Double? = null,

val bid: Double? = null,

val ask: Double? = null,

@Column(name = "last_price")
val lastPrice: Double? = null,

@Column(name = "implied_vol")
val impliedVol: Double? = null,

val delta: Double? = null,

val gamma: Double? = null,

val theta: Double? = null,

val vega: Double? = null,

val rho: Double? = null,

@Column(name = "price_as_of")
val priceAsOf: Instant? = null,

@Column(name = "open_interest")
var openInterest: Long? = null,

@Column(name = "oi_as_of_date")
var oiAsOfDate: LocalDate? = null,

@Column(name = "oi_delay_days")
var oiDelayDays: Int? = null,
) : BaseEntity()
Loading
Loading