using System; using AsbCloudApp.Data.Trajectory; using ClosedXML.Excel; using System.IO; using System.Reflection; using AsbCloudApp.Data; using AsbCloudApp.Requests.ParserOptions; namespace AsbCloudInfrastructure.Services.Trajectory.Parser; public abstract class TrajectoryParser : ParserServiceBase where T : TrajectoryGeoDto { private const int HeaderRowsCount = 2; private const int ColumnCount = 6; protected TrajectoryParser(IServiceProvider serviceProvider) : base(serviceProvider) { } protected abstract string TemplateFileName { get; } protected abstract ValidationResultDto ParseRow(IXLRow row); public override Stream GetTemplateFile() => Assembly.GetExecutingAssembly().GetTemplateCopyStream(TemplateFileName) ?? throw new ArgumentNullException($"Файл '{TemplateFileName}' не найден"); public override ParserResultDto Parse(Stream file, IParserOptionsRequest options) { using var workbook = new XLWorkbook(file); var sheet = workbook.GetWorksheet(SheetName); var trajectoryRows = ParseExcelSheet(sheet, ParseRow, ColumnCount, HeaderRowsCount); return trajectoryRows; } }