From 38b21d80f1b7121062a6dd9b529910da0e4b71dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A4=D1=80=D0=BE=D0=BB=D0=BE=D0=B2?= Date: Wed, 28 Jul 2021 09:46:58 +0500 Subject: [PATCH] replace automapper to mapster --- AsbCloudApp/Data/ReportPropertiesDto.cs | 2 +- AsbCloudApp/Data/WellOperationDto.cs | 12 +++++++ AsbCloudDb/Model/AsbCloudDbContext.cs | 9 +++--- .../AsbCloudInfrastructure.csproj | 2 +- AsbCloudInfrastructure/DependencyInjection.cs | 13 -------- AsbCloudInfrastructure/MapsterExtension.cs | 32 +++++++++++++++++++ .../Services/DataService.cs | 26 ++++++--------- .../Services/MessageService.cs | 8 ++--- .../Services/ReportService.cs | 8 ++--- .../Services/TelemetryService.cs | 8 ++--- .../Services/WellService.cs | 22 ++++++++++--- 11 files changed, 88 insertions(+), 54 deletions(-) create mode 100644 AsbCloudInfrastructure/MapsterExtension.cs diff --git a/AsbCloudApp/Data/ReportPropertiesDto.cs b/AsbCloudApp/Data/ReportPropertiesDto.cs index d025e519..753df56e 100644 --- a/AsbCloudApp/Data/ReportPropertiesDto.cs +++ b/AsbCloudApp/Data/ReportPropertiesDto.cs @@ -7,7 +7,7 @@ namespace AsbCloudApp.Data public int Id { get; set; } public string Name { get; set; } public string FullName { get; set; } - public int idWell { get; set; } + public int IdWell { get; set; } public DateTime Date { get; set; } public DateTimeOffset Begin { get; set; } public DateTimeOffset End { get; set; } diff --git a/AsbCloudApp/Data/WellOperationDto.cs b/AsbCloudApp/Data/WellOperationDto.cs index 7b8c5a4d..8867736f 100644 --- a/AsbCloudApp/Data/WellOperationDto.cs +++ b/AsbCloudApp/Data/WellOperationDto.cs @@ -8,5 +8,17 @@ namespace AsbCloudApp.Data { public class WellOperationDto { + public int Id { get; set; } + + public int IdWell { get; set; } + + public string Caption { get; set; } + + public string Description { get; set; } + + public double CasingSection { get; set; } + + public double WellDepth { get; set; } + } } diff --git a/AsbCloudDb/Model/AsbCloudDbContext.cs b/AsbCloudDb/Model/AsbCloudDbContext.cs index 6e39a59e..5f4fd395 100644 --- a/AsbCloudDb/Model/AsbCloudDbContext.cs +++ b/AsbCloudDb/Model/AsbCloudDbContext.cs @@ -32,11 +32,10 @@ namespace AsbCloudDb.Model public virtual DbSet WellOperations { get; set; } public virtual DbSet WellTypes { get; set; } - //public AsbCloudDbContext(string connectionString = "Host=localhost;Database=postgres;Username=postgres;Password=q;Persist Security Info=True") - //{ - // this.connectionString = connectionString; - // Database.EnsureCreated(); - //} + //var options = new DbContextOptionsBuilder() + // .UseNpgsql("Host=localhost;Database=postgres;Username=postgres;Password=q;Persist Security Info=True") + // .Options; + //var context = new AsbCloudDbContext(options); public AsbCloudDbContext(DbContextOptions options) : base(options) diff --git a/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj b/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj index 4e85eada..f87217df 100644 --- a/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj +++ b/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj @@ -9,8 +9,8 @@ - + diff --git a/AsbCloudInfrastructure/DependencyInjection.cs b/AsbCloudInfrastructure/DependencyInjection.cs index af90edfb..e2823a0e 100644 --- a/AsbCloudInfrastructure/DependencyInjection.cs +++ b/AsbCloudInfrastructure/DependencyInjection.cs @@ -3,7 +3,6 @@ using AsbCloudApp.Services; using AsbCloudDb.Model; using AsbCloudInfrastructure.Services; using AsbCloudInfrastructure.Services.Cache; -using AutoMapper; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -21,7 +20,6 @@ namespace AsbCloudInfrastructure services.AddHostedService(); - services.AddSingleton(new MapperConfiguration(AutoMapperConfig)); services.AddSingleton(new CacheDb()); services.AddSingleton(); services.AddSingleton(); @@ -42,16 +40,5 @@ namespace AsbCloudInfrastructure return services; } - private static void AutoMapperConfig(IMapperConfigurationExpression cfg) - { - cfg.CreateMap(); - cfg.CreateMap(); - - cfg.CreateMap(); - cfg.CreateMap(); - - cfg.CreateMap(); - cfg.CreateMap(); - } } } diff --git a/AsbCloudInfrastructure/MapsterExtension.cs b/AsbCloudInfrastructure/MapsterExtension.cs new file mode 100644 index 00000000..988d545d --- /dev/null +++ b/AsbCloudInfrastructure/MapsterExtension.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Mapster +{ + public static class MapsterExtension + { + public static IEnumerable Adapt(this IEnumerable sourceList) + { + foreach (var item in sourceList) + yield return item.Adapt(); + } + + + public static TDestination Adapt(this TSource source, Action afterMapAction = default) + { + var dest = source.Adapt(); + if (afterMapAction != default) + afterMapAction(source, dest); + return dest; + } + + public static IEnumerable Adapt(this IEnumerable sourceList, Action eachAfterMapAction = default) + { + foreach (var item in sourceList) + yield return item.Adapt(eachAfterMapAction); + } + } +} diff --git a/AsbCloudInfrastructure/Services/DataService.cs b/AsbCloudInfrastructure/Services/DataService.cs index bf5f22f1..2f672b52 100644 --- a/AsbCloudInfrastructure/Services/DataService.cs +++ b/AsbCloudInfrastructure/Services/DataService.cs @@ -2,7 +2,7 @@ using AsbCloudApp.Services; using AsbCloudDb.Model; using AsbCloudInfrastructure.Services.Cache; -using AutoMapper; +using Mapster; using System; using System.Collections.Generic; using System.Linq; @@ -14,18 +14,15 @@ namespace AsbCloudInfrastructure.Services private readonly IAsbCloudDbContext db; private readonly ITelemetryService telemetryService; private readonly IAnalyticsService analyticsService; - private readonly IMapper mapper; private readonly CacheTable cacheTelemetry; private readonly CacheTable cacheWells; public DataService(IAsbCloudDbContext db, ITelemetryService telemetryService, - IAnalyticsService analyticsService, CacheDb cacheDb, - MapperConfiguration mapperConfiguration) + IAnalyticsService analyticsService, CacheDb cacheDb) { this.db = db; this.telemetryService = telemetryService; this.analyticsService = analyticsService; - mapper = mapperConfiguration.CreateMapper(); cacheTelemetry = cacheDb.GetCachedTable((AsbCloudDbContext)db); cacheWells = cacheDb.GetCachedTable((AsbCloudDbContext)db); } @@ -45,12 +42,12 @@ namespace AsbCloudInfrastructure.Services var datEnd = dateBegin.AddSeconds(intervalSec); - var fullData = from data in db.DataSaubBases + var query = from data in db.DataSaubBases where data.IdTelemetry == telemetry.Id && data.Date >= dateBegin && data.Date < datEnd select data; - var fullDataCount = fullData.Count(); + var fullDataCount = query.Count(); if (fullDataCount == 0) return default; @@ -59,16 +56,14 @@ namespace AsbCloudInfrastructure.Services { var m = (int)Math.Round(1d * fullDataCount / approxPointsCount); if (m > 1) - fullData = fullData.Where(d => d.Id % m == 0); + query = query.Where(d => d.Id % m == 0); } - var dbData = fullData.ToList(); - var result = new List(dbData.Count); + var entities = query.ToList(); - foreach (var item in dbData) - result.Add(mapper.Map(item)); + var dtos = entities.Adapt(); - return result; + return dtos; } public void UpdateData(string uid, IEnumerable dtos) @@ -87,13 +82,12 @@ namespace AsbCloudInfrastructure.Services select d).ToList(); if (oldDataSaubBase.Any()) - { db.DataSaubBases.RemoveRange(oldDataSaubBase); - } + foreach (var item in dtos) { - var dataSaub = mapper.Map(item); + var dataSaub = item.Adapt(); dataSaub.IdTelemetry = telemetryId; db.DataSaubBases.Add(dataSaub); diff --git a/AsbCloudInfrastructure/Services/MessageService.cs b/AsbCloudInfrastructure/Services/MessageService.cs index 4cd1e12a..05f936a4 100644 --- a/AsbCloudInfrastructure/Services/MessageService.cs +++ b/AsbCloudInfrastructure/Services/MessageService.cs @@ -2,7 +2,7 @@ using AsbCloudApp.Services; using AsbCloudDb.Model; using AsbCloudInfrastructure.Services.Cache; -using AutoMapper; +using Mapster; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; @@ -14,15 +14,13 @@ namespace AsbCloudInfrastructure.Services { private readonly IAsbCloudDbContext db; private readonly ITelemetryService telemetryService; - private readonly IMapper mapper; private readonly CacheTable cacheEvents; private readonly CacheTable cacheTUsers; - public MessageService(IAsbCloudDbContext db, CacheDb cacheDb, ITelemetryService telemetryService, MapperConfiguration mapperConfiguration) + public MessageService(IAsbCloudDbContext db, CacheDb cacheDb, ITelemetryService telemetryService) { this.db = db; this.telemetryService = telemetryService; - mapper = mapperConfiguration.CreateMapper(); cacheEvents = cacheDb.GetCachedTable((AsbCloudDbContext)db); cacheTUsers = cacheDb.GetCachedTable((AsbCloudDbContext)db); } @@ -118,7 +116,7 @@ namespace AsbCloudInfrastructure.Services foreach (var dto in dtos) { - var entity = mapper.Map(dto); + var entity = dto.Adapt(); entity.Id = 0; entity.IdTelemetry = telemetryId; db.Messages.Add(entity); diff --git a/AsbCloudInfrastructure/Services/ReportService.cs b/AsbCloudInfrastructure/Services/ReportService.cs index f31b9343..80373e34 100644 --- a/AsbCloudInfrastructure/Services/ReportService.cs +++ b/AsbCloudInfrastructure/Services/ReportService.cs @@ -96,10 +96,10 @@ namespace AsbCloudInfrastructure.Services var suitableReportsProperties = suitableReportsFromDb.Select(r => new ReportPropertiesDto { Id = r.Id, - Name = Path.GetFileName(r.File.Name), - FullName = r.File.Name, - idWell = r.IdWell, - Date = r.File.Date, + Name = Path.GetFileName(r.Name), + FullName = r.Name, + IdWell = r.IdWell, + Date = r.Date, Begin = r.Begin, End = r.End, Step = r.Step, diff --git a/AsbCloudInfrastructure/Services/TelemetryService.cs b/AsbCloudInfrastructure/Services/TelemetryService.cs index 1cc6b705..be950ed6 100644 --- a/AsbCloudInfrastructure/Services/TelemetryService.cs +++ b/AsbCloudInfrastructure/Services/TelemetryService.cs @@ -2,19 +2,17 @@ using AsbCloudApp.Services; using AsbCloudDb.Model; using AsbCloudInfrastructure.Services.Cache; -using AutoMapper; +using Mapster; namespace AsbCloudInfrastructure.Services { public class TelemetryService : ITelemetryService { - private readonly IMapper mapper; private readonly CacheTable cacheTelemetry; private readonly CacheTable cacheWells; - public TelemetryService(IAsbCloudDbContext db, CacheDb cacheDb, MapperConfiguration mapperConfiguration) + public TelemetryService(IAsbCloudDbContext db, CacheDb cacheDb) { - mapper = mapperConfiguration.CreateMapper(); cacheTelemetry = cacheDb.GetCachedTable((AsbCloudDbContext)db); cacheWells = cacheDb.GetCachedTable((AsbCloudDbContext)db); } @@ -31,7 +29,7 @@ namespace AsbCloudInfrastructure.Services public void UpdateInfo(string uid, TelemetryInfoDto info) { var telemetry = GetOrCreateTelemetryByUid(uid); - telemetry.Info = mapper.Map(info); + telemetry.Info = info.Adapt(); cacheTelemetry.Upsert(telemetry); } diff --git a/AsbCloudInfrastructure/Services/WellService.cs b/AsbCloudInfrastructure/Services/WellService.cs index 1ccc73f3..511fb92a 100644 --- a/AsbCloudInfrastructure/Services/WellService.cs +++ b/AsbCloudInfrastructure/Services/WellService.cs @@ -2,6 +2,7 @@ using AsbCloudApp.Services; using AsbCloudDb.Model; using AsbCloudInfrastructure.Services.Cache; +using Mapster; using System; using System.Collections.Generic; using System.Linq; @@ -46,14 +47,27 @@ namespace AsbCloudInfrastructure.Services public IEnumerable GetSections(int idWell) { - //var query = from s in db.WellSections - // where s.IdWell == - return new List(); + var entities = db + .WellSections + .Where(s => s.IdWell == idWell) + .ToList(); + + var dtos = entities.Adapt( + (s, d) => { d.SectionType = s.WellSectionType.Caption;}); + + return dtos; } public IEnumerable GetOperations(int idWell) { - throw new NotImplementedException(); + var entities = db + .WellOperations + .Where(o => o.IdWell == idWell) + .ToList(); + + var dtos = entities.Adapt(); + + return dtos; } private static WellDto From(Well well)