From fb8d308dc8eee3e68b2ace87225bdd75eeb9bb22 Mon Sep 17 00:00:00 2001 From: Collin Barrett Date: Sat, 22 Sep 2018 10:55:45 -0500 Subject: [PATCH] add SyntaxIds to Software endpoint, make mapping profiles consistent ref #505 --- .../ListDetailsDtoMappingProfile.cs | 66 +++++++++-------- .../ListIndexRecordMappingProfile.cs | 72 +++++++++---------- .../ListMaintainerDtoMappingProfile.cs | 8 ++- .../ListSummaryDtoMappingProfile.cs | 44 +++++++----- .../ListSyntaxDtoMappingProfile.cs | 7 +- .../ListTagDtoMappingProfile.cs | 5 +- ...ntainerAdditionalListsDtoMappingProfile.cs | 17 +++++ ...yntaxSupportedSoftwareDtoMappingProfile.cs | 16 +++++ .../FilterList/Models/ListDetailsDto.cs | 2 +- .../FilterList/Models/ListMaintainerDto.cs | 2 +- .../FilterList/Models/ListSummaryDto.cs | 2 +- .../Models/MaintainerAdditionalListsDto.cs | 2 +- .../Models/SyntaxSupportedSoftwareDto.cs | 2 +- .../LanguageDtoMappingProfile.cs | 4 +- .../SoftwareDtoMappingProfile.cs | 20 ++++++ .../Software/Models/SoftwareDto.cs | 6 +- .../Software/SoftwareService.cs | 5 +- 17 files changed, 183 insertions(+), 97 deletions(-) create mode 100644 src/FilterLists.Services/FilterList/MappingProfiles/MaintainerAdditionalListsDtoMappingProfile.cs create mode 100644 src/FilterLists.Services/FilterList/MappingProfiles/SyntaxSupportedSoftwareDtoMappingProfile.cs create mode 100644 src/FilterLists.Services/Software/MappingProfiles/SoftwareDtoMappingProfile.cs diff --git a/src/FilterLists.Services/FilterList/MappingProfiles/ListDetailsDtoMappingProfile.cs b/src/FilterLists.Services/FilterList/MappingProfiles/ListDetailsDtoMappingProfile.cs index be35ca633..4bce442c9 100644 --- a/src/FilterLists.Services/FilterList/MappingProfiles/ListDetailsDtoMappingProfile.cs +++ b/src/FilterLists.Services/FilterList/MappingProfiles/ListDetailsDtoMappingProfile.cs @@ -10,36 +10,46 @@ public class ListDetailsDtoMappingProfile : Profile { public ListDetailsDtoMappingProfile() => CreateMap() - .ForMember(d => d.Languages, o => o.MapFrom(l => l.FilterListLanguages.Select(la => la.Language.Name))) - .ForMember(d => d.Maintainers, o => o.MapFrom(l => l.FilterListMaintainers.Select(m => m.Maintainer))) - .ForMember(d => d.Tags, o => o.MapFrom(l => l.FilterListTags.Select(m => m.Tag))) - .ForMember(d => d.RuleCount, o => o.MapFrom(l => - l.Snapshots - .Count(s => s.WasSuccessful) > 0 - ? l.Snapshots + .ForMember(dest => dest.Id, + opt => opt.MapFrom(src => + (int)src.Id)) + .ForMember(dest => dest.Languages, + opt => opt.MapFrom(src => + src.FilterListLanguages.Select(la => la.Language.Name))) + .ForMember(dest => dest.Maintainers, + opt => opt.MapFrom(src => + src.FilterListMaintainers.Select(m => m.Maintainer))) + .ForMember(dest => dest.Tags, + opt => opt.MapFrom(src => + src.FilterListTags.Select(m => m.Tag))) + .ForMember(dest => dest.RuleCount, + opt => opt.MapFrom(src => + src.Snapshots + .Count(s => s.WasSuccessful) > 0 + ? src.Snapshots + .Where(s => s.WasSuccessful) + .OrderByDescending(s => s.CreatedDateUtc) + .FirstOrDefault() + .SnapshotRules + .Count + : 0)) + .ForMember(dest => dest.UpdatedDate, + opt => opt.MapFrom(src => + src.DiscontinuedDate ?? + (src.Snapshots + .Count(s => s.WasSuccessful && s.Md5Checksum != null) >= 2 + ? src.Snapshots + .Where(s => s.WasSuccessful && s.Md5Checksum != null) + .Select(s => s.CreatedDateUtc) + .OrderByDescending(c => c) + .FirstOrDefault() + : null))) + .ForMember(dest => dest.ViewUrl, + opt => opt.MapFrom(src => + src.Snapshots .Where(s => s.WasSuccessful) .OrderByDescending(s => s.CreatedDateUtc) .FirstOrDefault() - .SnapshotRules - .Count - : 0)) - .ForMember(d => d.UpdatedDate, - o => o.MapFrom(l => - l.DiscontinuedDate ?? - (l.Snapshots - .Count(s => s.WasSuccessful && s.Md5Checksum != null) >= 2 - ? l.Snapshots - .Where(s => s.WasSuccessful && s.Md5Checksum != null) - .Select(s => s.CreatedDateUtc) - .OrderByDescending(c => c) - .FirstOrDefault() - : null))) - .ForMember(d => d.ViewUrl, - o => o.MapFrom(l => - l.Snapshots - .Where(s => s.WasSuccessful) - .OrderByDescending(s => s.CreatedDateUtc) - .FirstOrDefault() - .WaybackUrl ?? l.ViewUrl)); + .WaybackUrl ?? src.ViewUrl)); } } \ No newline at end of file diff --git a/src/FilterLists.Services/FilterList/MappingProfiles/ListIndexRecordMappingProfile.cs b/src/FilterLists.Services/FilterList/MappingProfiles/ListIndexRecordMappingProfile.cs index 0e1992630..084dcc875 100644 --- a/src/FilterLists.Services/FilterList/MappingProfiles/ListIndexRecordMappingProfile.cs +++ b/src/FilterLists.Services/FilterList/MappingProfiles/ListIndexRecordMappingProfile.cs @@ -11,43 +11,43 @@ public class ListIndexRecordMappingProfile : Profile { public ListIndexRecordMappingProfile() => CreateMap() - .ForMember(r => r.Id, - o => o.MapFrom(l => - (int)l.Id)) - .ForMember(r => r.LanguageIds, - o => o.MapFrom(l => - l.FilterListLanguages.Select(ll => (int)ll.LanguageId))) - .ForMember(r => r.MaintainerIds, - o => o.MapFrom(l => - l.FilterListMaintainers.Select(ll => (int)ll.MaintainerId))) - .ForMember(r => r.RuleCount, - o => o.MapFrom(l => - l.Snapshots - .Where(s => s.WasSuccessful) - .Select(s => (int?)s.SnapshotRules.Count) - .FirstOrDefault())) - .ForMember(r => r.SyntaxId, - o => o.MapFrom(l => - (int)l.SyntaxId)) - .ForMember(r => r.TagIds, - o => o.MapFrom(l => - l.FilterListTags.Select(lt => (int)lt.TagId))) - .ForMember(r => r.UpdatedDate, - o => o.MapFrom(l => - l.Snapshots - .Count(s => s.WasSuccessful && s.WasUpdated) >= 2 - ? l.Snapshots - .Where(s => s.WasSuccessful && s.WasUpdated) - .Select(s => s.CreatedDateUtc) - .OrderByDescending(c => c) - .FirstOrDefault() + .ForMember(dest => dest.Id, + opt => opt.MapFrom(src => + (int)src.Id)) + .ForMember(dest => dest.LanguageIds, + opt => opt.MapFrom(src => + src.FilterListLanguages.Select(ll => (int)ll.LanguageId))) + .ForMember(dest => dest.MaintainerIds, + opt => opt.MapFrom(src => + src.FilterListMaintainers.Select(ll => (int)ll.MaintainerId))) + .ForMember(dest => dest.RuleCount, + opt => opt.MapFrom(src => + src.Snapshots + .Where(s => s.WasSuccessful) + .Select(s => (int?)s.SnapshotRules.Count) + .FirstOrDefault())) + .ForMember(dest => dest.SyntaxId, + opt => opt.MapFrom(src => + (int)src.SyntaxId)) + .ForMember(dest => dest.TagIds, + opt => opt.MapFrom(src => + src.FilterListTags.Select(lt => (int)lt.TagId))) + .ForMember(dest => dest.UpdatedDate, + opt => opt.MapFrom(src => + src.Snapshots + .Count(s => s.WasSuccessful && s.WasUpdated) >= 2 + ? src.Snapshots + .Where(s => s.WasSuccessful && s.WasUpdated) + .Select(s => s.CreatedDateUtc) + .OrderByDescending(c => c) + .FirstOrDefault() : null)) - .ForMember(r => r.ViewUrlMirrors, - o => o.MapFrom(l => - l.ViewUrlMirror1 != null - ? l.ViewUrlMirror2 != null - ? new List {l.ViewUrlMirror1, l.ViewUrlMirror2} - : new List {l.ViewUrlMirror1} + .ForMember(dest => dest.ViewUrlMirrors, + opt => opt.MapFrom(src => + src.ViewUrlMirror1 != null + ? src.ViewUrlMirror2 != null + ? new List {src.ViewUrlMirror1, src.ViewUrlMirror2} + : new List {src.ViewUrlMirror1} : null)); } } \ No newline at end of file diff --git a/src/FilterLists.Services/FilterList/MappingProfiles/ListMaintainerDtoMappingProfile.cs b/src/FilterLists.Services/FilterList/MappingProfiles/ListMaintainerDtoMappingProfile.cs index 532e24e7b..f90014515 100644 --- a/src/FilterLists.Services/FilterList/MappingProfiles/ListMaintainerDtoMappingProfile.cs +++ b/src/FilterLists.Services/FilterList/MappingProfiles/ListMaintainerDtoMappingProfile.cs @@ -11,7 +11,11 @@ public class ListMaintainerDtoMappingProfile : Profile { public ListMaintainerDtoMappingProfile() => CreateMap() - .ForMember(d => d.AdditionalLists, - o => o.MapFrom(m => m.FilterListMaintainers.Select(lm => lm.FilterList))); + .ForMember(dest => dest.Id, + opt => opt.MapFrom(src => + (int)src.Id)) + .ForMember(dest => dest.AdditionalLists, + opt => opt.MapFrom(src => + src.FilterListMaintainers.Select(lm => lm.FilterList))); } } \ No newline at end of file diff --git a/src/FilterLists.Services/FilterList/MappingProfiles/ListSummaryDtoMappingProfile.cs b/src/FilterLists.Services/FilterList/MappingProfiles/ListSummaryDtoMappingProfile.cs index 36d566f05..7bf43db9f 100644 --- a/src/FilterLists.Services/FilterList/MappingProfiles/ListSummaryDtoMappingProfile.cs +++ b/src/FilterLists.Services/FilterList/MappingProfiles/ListSummaryDtoMappingProfile.cs @@ -10,25 +10,31 @@ public class ListSummaryDtoMappingProfile : Profile { public ListSummaryDtoMappingProfile() => CreateMap() - .ForMember(d => d.Languages, o => o.MapFrom(l => l.FilterListLanguages.Select(la => la.Language))) - .ForMember(d => d.SoftwareIds, - o => o.MapFrom(l => - l.Syntax - .SoftwareSyntaxes - .Select(ss => ss.Software) - .OrderBy(s => s.Name) - .Select(s => (int)s.Id))) - .ForMember(d => d.Tags, o => o.MapFrom(l => l.FilterListTags.Select(m => m.Tag))) - .ForMember(d => d.UpdatedDate, - o => o.MapFrom(l => - l.DiscontinuedDate ?? - (l.Snapshots - .Count(s => s.WasSuccessful && s.Md5Checksum != null) >= 2 - ? l.Snapshots - .Where(s => s.WasSuccessful && s.Md5Checksum != null) - .Select(s => s.CreatedDateUtc) - .OrderByDescending(c => c) - .FirstOrDefault() + .ForMember(dest => dest.Id, + opt => opt.MapFrom(src => + (int)src.Id)) + .ForMember(dest => dest.Languages, + opt => opt.MapFrom(src => + src.FilterListLanguages.Select(la => la.Language))) + .ForMember(dest => dest.SoftwareIds, + opt => opt.MapFrom(src => + src.Syntax + .SoftwareSyntaxes + .Select(ss => ss.Software) + .OrderBy(s => s.Name) + .Select(s => (int)s.Id))) + .ForMember(dest => dest.Tags, + opt => opt.MapFrom(src => + src.FilterListTags.Select(m => m.Tag))) + .ForMember(dest => dest.UpdatedDate, + opt => opt.MapFrom(src => + src.DiscontinuedDate ?? + (src.Snapshots.Count(s => s.WasSuccessful && s.Md5Checksum != null) >= 2 + ? src.Snapshots + .Where(s => s.WasSuccessful && s.Md5Checksum != null) + .Select(s => s.CreatedDateUtc) + .OrderByDescending(c => c) + .FirstOrDefault() : null))); } } \ No newline at end of file diff --git a/src/FilterLists.Services/FilterList/MappingProfiles/ListSyntaxDtoMappingProfile.cs b/src/FilterLists.Services/FilterList/MappingProfiles/ListSyntaxDtoMappingProfile.cs index f927daae2..fe4f7be25 100644 --- a/src/FilterLists.Services/FilterList/MappingProfiles/ListSyntaxDtoMappingProfile.cs +++ b/src/FilterLists.Services/FilterList/MappingProfiles/ListSyntaxDtoMappingProfile.cs @@ -11,7 +11,10 @@ public class ListSyntaxDtoMappingProfile : Profile { public ListSyntaxDtoMappingProfile() => CreateMap() - .ForMember(d => d.SupportedSoftware, - o => o.MapFrom(s => s.SoftwareSyntaxes.Select(ss => ss.Software).OrderBy(sw => sw.Name))); + .ForMember(dest => dest.SupportedSoftware, + opt => opt.MapFrom(src => + src.SoftwareSyntaxes + .Select(ss => ss.Software) + .OrderBy(s => s.Name))); } } \ No newline at end of file diff --git a/src/FilterLists.Services/FilterList/MappingProfiles/ListTagDtoMappingProfile.cs b/src/FilterLists.Services/FilterList/MappingProfiles/ListTagDtoMappingProfile.cs index c7f75460c..e881a7b7e 100644 --- a/src/FilterLists.Services/FilterList/MappingProfiles/ListTagDtoMappingProfile.cs +++ b/src/FilterLists.Services/FilterList/MappingProfiles/ListTagDtoMappingProfile.cs @@ -9,6 +9,9 @@ namespace FilterLists.Services.FilterList.MappingProfiles public class ListTagDtoMappingProfile : Profile { public ListTagDtoMappingProfile() => - CreateMap().ForMember(d => d.ColorHex, o => o.MapFrom(m => TagColors.Colors[(int)m.Id])); + CreateMap() + .ForMember(dest => dest.ColorHex, + opt => opt.MapFrom(src => + TagColors.Colors[(int)src.Id])); } } \ No newline at end of file diff --git a/src/FilterLists.Services/FilterList/MappingProfiles/MaintainerAdditionalListsDtoMappingProfile.cs b/src/FilterLists.Services/FilterList/MappingProfiles/MaintainerAdditionalListsDtoMappingProfile.cs new file mode 100644 index 000000000..6e3bcd78b --- /dev/null +++ b/src/FilterLists.Services/FilterList/MappingProfiles/MaintainerAdditionalListsDtoMappingProfile.cs @@ -0,0 +1,17 @@ +using AutoMapper; +using FilterLists.Data.Entities; +using FilterLists.Services.FilterList.Models; +using JetBrains.Annotations; + +namespace FilterLists.Services.FilterList.MappingProfiles +{ + [UsedImplicitly] + public class MaintainerAdditionalListsDtoMappingProfile : Profile + { + public MaintainerAdditionalListsDtoMappingProfile() => + CreateMap() + .ForMember(dest => dest.Id, + opt => opt.MapFrom(src => + (int)src.Id)); + } +} \ No newline at end of file diff --git a/src/FilterLists.Services/FilterList/MappingProfiles/SyntaxSupportedSoftwareDtoMappingProfile.cs b/src/FilterLists.Services/FilterList/MappingProfiles/SyntaxSupportedSoftwareDtoMappingProfile.cs new file mode 100644 index 000000000..5281f1636 --- /dev/null +++ b/src/FilterLists.Services/FilterList/MappingProfiles/SyntaxSupportedSoftwareDtoMappingProfile.cs @@ -0,0 +1,16 @@ +using AutoMapper; +using FilterLists.Services.FilterList.Models; +using JetBrains.Annotations; + +namespace FilterLists.Services.FilterList.MappingProfiles +{ + [UsedImplicitly] + public class SyntaxSupportedSoftwareDtoMappingProfile : Profile + { + public SyntaxSupportedSoftwareDtoMappingProfile() => + CreateMap() + .ForMember(dest => dest.Id, + opt => opt.MapFrom(src => + (int)src.Id)); + } +} \ No newline at end of file diff --git a/src/FilterLists.Services/FilterList/Models/ListDetailsDto.cs b/src/FilterLists.Services/FilterList/Models/ListDetailsDto.cs index 88d796e41..cdfca51bf 100644 --- a/src/FilterLists.Services/FilterList/Models/ListDetailsDto.cs +++ b/src/FilterLists.Services/FilterList/Models/ListDetailsDto.cs @@ -7,7 +7,7 @@ namespace FilterLists.Services.FilterList.Models [UsedImplicitly] public class ListDetailsDto { - public uint Id { get; set; } + public int Id { get; set; } public string ChatUrl { get; set; } public string Description { get; set; } public string DescriptionSourceUrl { get; set; } diff --git a/src/FilterLists.Services/FilterList/Models/ListMaintainerDto.cs b/src/FilterLists.Services/FilterList/Models/ListMaintainerDto.cs index f0e3f9290..bcdc8f60d 100644 --- a/src/FilterLists.Services/FilterList/Models/ListMaintainerDto.cs +++ b/src/FilterLists.Services/FilterList/Models/ListMaintainerDto.cs @@ -6,7 +6,7 @@ namespace FilterLists.Services.FilterList.Models [UsedImplicitly] public class ListMaintainerDto { - public uint Id { get; set; } + public int Id { get; set; } public string EmailAddress { get; set; } public string HomeUrl { get; set; } public string Name { get; set; } diff --git a/src/FilterLists.Services/FilterList/Models/ListSummaryDto.cs b/src/FilterLists.Services/FilterList/Models/ListSummaryDto.cs index bda3da63f..1dab81f2f 100644 --- a/src/FilterLists.Services/FilterList/Models/ListSummaryDto.cs +++ b/src/FilterLists.Services/FilterList/Models/ListSummaryDto.cs @@ -7,7 +7,7 @@ namespace FilterLists.Services.FilterList.Models [UsedImplicitly] public class ListSummaryDto { - public uint Id { get; set; } + public int Id { get; set; } public IEnumerable Languages { get; set; } public string Name { get; set; } public IEnumerable SoftwareIds { get; set; } diff --git a/src/FilterLists.Services/FilterList/Models/MaintainerAdditionalListsDto.cs b/src/FilterLists.Services/FilterList/Models/MaintainerAdditionalListsDto.cs index d515df60e..2815848ff 100644 --- a/src/FilterLists.Services/FilterList/Models/MaintainerAdditionalListsDto.cs +++ b/src/FilterLists.Services/FilterList/Models/MaintainerAdditionalListsDto.cs @@ -5,7 +5,7 @@ namespace FilterLists.Services.FilterList.Models [UsedImplicitly] public class MaintainerAdditionalListsDto { - public uint Id { get; set; } + public int Id { get; set; } public string Name { get; set; } } } \ No newline at end of file diff --git a/src/FilterLists.Services/FilterList/Models/SyntaxSupportedSoftwareDto.cs b/src/FilterLists.Services/FilterList/Models/SyntaxSupportedSoftwareDto.cs index 8820cfa75..76ec24749 100644 --- a/src/FilterLists.Services/FilterList/Models/SyntaxSupportedSoftwareDto.cs +++ b/src/FilterLists.Services/FilterList/Models/SyntaxSupportedSoftwareDto.cs @@ -5,8 +5,8 @@ namespace FilterLists.Services.FilterList.Models [UsedImplicitly] public class SyntaxSupportedSoftwareDto { + public int Id { get; set; } public string HomeUrl { get; set; } - public uint Id { get; set; } public string Name { get; set; } } } \ No newline at end of file diff --git a/src/FilterLists.Services/Language/MappingProfiles/LanguageDtoMappingProfile.cs b/src/FilterLists.Services/Language/MappingProfiles/LanguageDtoMappingProfile.cs index 168a48e99..1d97496eb 100644 --- a/src/FilterLists.Services/Language/MappingProfiles/LanguageDtoMappingProfile.cs +++ b/src/FilterLists.Services/Language/MappingProfiles/LanguageDtoMappingProfile.cs @@ -9,6 +9,8 @@ public class LanguageDtoMappingProfile : Profile { public LanguageDtoMappingProfile() => CreateMap() - .ForMember(d => d.Id, o => o.MapFrom(l => (int)l.Id)); + .ForMember(dest => dest.Id, + opt => opt.MapFrom(src => + (int)src.Id)); } } \ No newline at end of file diff --git a/src/FilterLists.Services/Software/MappingProfiles/SoftwareDtoMappingProfile.cs b/src/FilterLists.Services/Software/MappingProfiles/SoftwareDtoMappingProfile.cs new file mode 100644 index 000000000..ef9654e97 --- /dev/null +++ b/src/FilterLists.Services/Software/MappingProfiles/SoftwareDtoMappingProfile.cs @@ -0,0 +1,20 @@ +using System.Linq; +using AutoMapper; +using FilterLists.Services.Software.Models; +using JetBrains.Annotations; + +namespace FilterLists.Services.FilterList.MappingProfiles +{ + [UsedImplicitly] + public class SoftwareDtoMappingProfile : Profile + { + public SoftwareDtoMappingProfile() => + CreateMap() + .ForMember(dest => dest.Id, + opt => opt.MapFrom(src => + (int)src.Id)) + .ForMember(dest => dest.SyntaxIds, + opt => opt.MapFrom(src => + src.SoftwareSyntaxes.Select(ss => (int)ss.SyntaxId))); + } +} \ No newline at end of file diff --git a/src/FilterLists.Services/Software/Models/SoftwareDto.cs b/src/FilterLists.Services/Software/Models/SoftwareDto.cs index fe3247dec..6f367b64f 100644 --- a/src/FilterLists.Services/Software/Models/SoftwareDto.cs +++ b/src/FilterLists.Services/Software/Models/SoftwareDto.cs @@ -1,11 +1,13 @@ -using JetBrains.Annotations; +using System.Collections.Generic; +using JetBrains.Annotations; namespace FilterLists.Services.Software.Models { [UsedImplicitly] public class SoftwareDto { - public uint Id { get; set; } + public int Id { get; set; } public string Name { get; set; } + public List SyntaxIds { get; set; } } } \ No newline at end of file diff --git a/src/FilterLists.Services/Software/SoftwareService.cs b/src/FilterLists.Services/Software/SoftwareService.cs index ec90abaa5..96847d39f 100644 --- a/src/FilterLists.Services/Software/SoftwareService.cs +++ b/src/FilterLists.Services/Software/SoftwareService.cs @@ -19,6 +19,9 @@ public SoftwareService(FilterListsDbContext dbContext, IConfigurationProvider ma } public async Task> GetAll() => - await DbContext.Software.OrderBy(s => s.Name).ProjectTo(MapConfig).ToListAsync(); + await DbContext.Software + .OrderBy(s => s.Name) + .ProjectTo(MapConfig) + .ToListAsync(); } } \ No newline at end of file