| 1234567891011121314151617181920212223242526272829303132333435 |
- using System.Globalization;
- namespace Infrastructure.StockData;
- /// <summary>
- /// SEIBro getShotnByMart(시장별 단축코드 조회) 응답 파서 — 순수 C#. "SEIBro 발행회사번호 부트스트랩" (Wave 0).
- /// 입력: 공용 SeibroXml envelope. 행 필드: SHOTN_ISIN(단축코드) / KOR_SECN_NM(종목명) / ISSUCO_CUSTNO(발행회사번호).
- /// 세 필드 중 하나라도 없거나 회사번호가 비숫자인 행은 건너뛴다 (매핑 불가 행 — upsert 자연키가 성립하지 않음).
- /// </summary>
- public static class SeibroShotnByMartParser
- {
- /// <summary>시장별 단축코드 1행</summary>
- public sealed record Row(string ShortCode, string Name, int IssucoCustno);
- public static IReadOnlyList<Row> Parse(SeibroXml.Envelope envelope)
- {
- var rows = new List<Row>();
- foreach (var fields in envelope.Rows)
- {
- var shortCode = SeibroXml.GetOrNull(fields, "SHOTN_ISIN")?.Trim();
- var name = SeibroXml.GetOrNull(fields, "KOR_SECN_NM")?.Trim();
- var custnoRaw = SeibroXml.GetOrNull(fields, "ISSUCO_CUSTNO");
- if (string.IsNullOrEmpty(shortCode) || string.IsNullOrEmpty(name) || !int.TryParse(custnoRaw, NumberStyles.Integer, CultureInfo.InvariantCulture, out var custno))
- {
- continue;
- }
- rows.Add(new Row(shortCode, name, custno));
- }
- return rows;
- }
- }
|