From 2ae6744c8e09178d62ec979256dad336c2aa1570 Mon Sep 17 00:00:00 2001 From: Christian Arenas Date: Tue, 13 Jun 2017 14:32:08 +0200 Subject: [PATCH] Modify RuleType class --- .../Marketing/Marketing.API/Model/RuleType.cs | 51 +++++++++++++++++++ .../Marketing.API/Model/RuleTypeEnum.cs | 20 -------- 2 files changed, 51 insertions(+), 20 deletions(-) create mode 100644 src/Services/Marketing/Marketing.API/Model/RuleType.cs delete mode 100644 src/Services/Marketing/Marketing.API/Model/RuleTypeEnum.cs diff --git a/src/Services/Marketing/Marketing.API/Model/RuleType.cs b/src/Services/Marketing/Marketing.API/Model/RuleType.cs new file mode 100644 index 000000000..1fa569cbb --- /dev/null +++ b/src/Services/Marketing/Marketing.API/Model/RuleType.cs @@ -0,0 +1,51 @@ +namespace Microsoft.eShopOnContainers.Services.Marketing.API.Model +{ + using Microsoft.eShopOnContainers.Services.Marketing.API.Infrastructure.Exceptions; + using System; + using System.Collections.Generic; + using System.Linq; + + public sealed class RuleType + { + public static readonly RuleType UserProfileRule = new RuleType(1, nameof(UserProfileRule)); + public static readonly RuleType PurchaseHistoryRule = new RuleType(2, nameof(UserProfileRule)); + public static readonly RuleType UserLocationRule = new RuleType(3, nameof(UserProfileRule)); + + public readonly int Id; + public readonly string Name; + + private RuleType(int id, string name) + { + Id = id; + Name = name; + } + + public static IEnumerable List() => + new[] { UserProfileRule, PurchaseHistoryRule, UserLocationRule }; + + public static RuleType FromName(string name) + { + var state = List() + .SingleOrDefault(s => String.Equals(s.Name, name, StringComparison.CurrentCultureIgnoreCase)); + + if (state == null) + { + throw new MarketingDomainException($"Possible values for RuleType: {String.Join(",", List().Select(s => s.Name))}"); + } + + return state; + } + + public static RuleType From(int id) + { + var state = List().SingleOrDefault(s => s.Id == id); + + if (state == null) + { + throw new MarketingDomainException($"Possible values for RuleType: {String.Join(",", List().Select(s => s.Name))}"); + } + + return state; + } + } +} \ No newline at end of file diff --git a/src/Services/Marketing/Marketing.API/Model/RuleTypeEnum.cs b/src/Services/Marketing/Marketing.API/Model/RuleTypeEnum.cs deleted file mode 100644 index c58dbf75c..000000000 --- a/src/Services/Marketing/Marketing.API/Model/RuleTypeEnum.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace Microsoft.eShopOnContainers.Services.Marketing.API.Model -{ - using Microsoft.eShopOnContainers.Services.Marketing.API.Infrastructure.Exceptions; - using System; - - public enum RuleTypeEnum { UserProfileRule = 1, PurchaseHistoryRule = 2, UserLocationRule = 3 } - - public static class RuleType - { - public static RuleTypeEnum From(int id) - { - if (!Enum.IsDefined(typeof(RuleTypeEnum), id)) - { - throw new MarketingDomainException($"Invalid value for RuleType, RuleTypeId: {id}"); - } - - return (RuleTypeEnum)id; - } - } -} \ No newline at end of file