| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- using System.ComponentModel.DataAnnotations;
- using System.ComponentModel.DataAnnotations.Schema;
- namespace Domain.Entities.Stocks;
- /// <summary>
- /// T+1 일별 마감 시세 (금융위 주식시세 API) — (StockID, TradingDate) UNIQUE.
- /// 수정주가 보정 없음 (액면분할 등 미반영 — 차트는 TradingView 위임).
- /// </summary>
- public class StockDailyPrice
- {
- [ForeignKey(nameof(StockID))]
- public virtual Stock? Stock { get; private set; }
- [Key]
- public long ID { get; private set; }
- public int StockID { get; private set; }
- /// <summary>거래일 (basDt)</summary>
- public DateOnly TradingDate { get; private set; }
- /// <summary>시가</summary>
- public int Open { get; private set; }
- /// <summary>고가</summary>
- public int High { get; private set; }
- /// <summary>저가</summary>
- public int Low { get; private set; }
- /// <summary>종가</summary>
- public int Close { get; private set; }
- /// <summary>거래량 (주)</summary>
- public long Volume { get; private set; }
- /// <summary>거래대금 (원)</summary>
- public long TradingValue { get; private set; }
- /// <summary>전일 대비 (원)</summary>
- public int ChangeAmount { get; private set; }
- /// <summary>등락률 %</summary>
- public decimal ChangeRate { get; private set; }
- /// <summary>시가총액 (원)</summary>
- public long? MarketCap { get; private set; }
- /// <summary>상장주식수</summary>
- public long? ListedShares { get; private set; }
- public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
- private StockDailyPrice() { }
- public static StockDailyPrice Create(
- int stockID,
- DateOnly tradingDate,
- int open,
- int high,
- int low,
- int close,
- long volume,
- long tradingValue,
- int changeAmount,
- decimal changeRate,
- long? marketCap = null,
- long? listedShares = null
- ) {
- ArgumentOutOfRangeException.ThrowIfNegativeOrZero(stockID);
- return new StockDailyPrice
- {
- StockID = stockID,
- TradingDate = tradingDate,
- Open = open,
- High = high,
- Low = low,
- Close = close,
- Volume = volume,
- TradingValue = tradingValue,
- ChangeAmount = changeAmount,
- ChangeRate = changeRate,
- MarketCap = marketCap,
- ListedShares = listedShares
- };
- }
- /// <summary>동일 (StockID, TradingDate) 재수집 시 값 갱신 (upsert)</summary>
- public void Update(
- int open,
- int high,
- int low,
- int close,
- long volume,
- long tradingValue,
- int changeAmount,
- decimal changeRate,
- long? marketCap = null,
- long? listedShares = null
- ) {
- Open = open;
- High = high;
- Low = low;
- Close = close;
- Volume = volume;
- TradingValue = tradingValue;
- ChangeAmount = changeAmount;
- ChangeRate = changeRate;
- MarketCap = marketCap;
- ListedShares = listedShares;
- }
- }
|