Реализация в триггере функции BLOB-объектов Azure для вставки в базу данных

Я создал функцию триггера BLOB-объектов Azure. Если файл вставлен в контейнер BLOB-объектов Azure в это время, эта функция запускается, и на основе данных файла нам необходимо вставить в нашу таблицу базы данных.

Мой класс триггерной функции выглядит так, как показано ниже

public static class StockCountTrigger
{
    [FunctionName("StockCountTrigger")]
    public static void Run([BlobTrigger("importstockcount/{name}", Connection = "AzureWebJobsStorage")] CloudBlockBlob cloudBlockBlob, TraceWriter log)
    {
        try
        {
            log.Info($"FileName:{cloudBlockBlob.Name}");
            var environment = Constants.Environment;
            IStockCountService stockCountService;
            if (environment.IsIn(Helper.Environment.Client1))
            {
                stockCountService = new StockCountServiceClient1(cloudBlockBlob, log);
            }
            else
            {
                throw new NotImplementedException();
            }
            stockCountService.Import();
        }
        catch (Exception ex)
        {
            log.Error($"Error.", ex);
            throw ex;
        }
    }
}

та же функция используется для нескольких клиентов с другим форматом файла, и эти данные вставляются в StockCount стол.

моя служба будет как ниже

public class StockCountServiceClient1: IStockCountService
{
    private readonly CloudBlockBlob cloudBlockBlob;
    private readonly TraceWriter log;
    private readonly IStockCountRepository _stockCountRepository;
    public StockCountServiceClient1(CloudBlockBlob cloudBlockBlob, TraceWriter log)
    {
        this.cloudBlockBlob = cloudBlockBlob;
        this.log = log;
        _stockCountRepository = new StockCountRepository();
    }

    public void Import()
    {
        var stockCounts = GetFromCSV();
        if (!stockCounts.Any())
            return;

        log.Info($"Total Records:{stockCounts.Count}");
        _stockCountRepository.Insert(stockCounts);
    }

    private List<StockCountModel> GetFromCSV()
    {
        using (var stream = cloudBlockBlob.OpenRead())
        {
            TextReader reader = new StreamReader(stream);
            using (var csvReader = new CsvReader(reader))
            {
                var records = csvReader.GetRecords<dynamic>().ToList();
                return records.Select(x => new StockCountModel
                {
                    StoreNo = x.StoreNo,
                    ArticleNo = x.ArticleNo,
                    Quantity = x.Quantity,
                    StockDateTime = x.StockDateTime,
                    Reference = cloudBlockBlob.Name
                }).ToList();
            }
        }
    }
}

Здесь, в репозитории, я создал объект и вставил его в базу данных.

здесь мой вопрос в том, что класс функции является статическим и его метод Run также является статическим. Правильно ли написан код для создания репозитория и объекта и на основе среды присваивает ему экземпляр. Какой подход лучше всего, нужно также создать статический метод в репозитории?

Периодичность поступления файла в контейнер — каждые 10 минут.

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *