Browse Source

move validation of PlanInfoDefinition in EventHubHttpApiHostModule to PlanInfoDefinition class

pull/90/head
berkansasmaz 5 years ago
parent
commit
680a754624
No known key found for this signature in database GPG Key ID: 884D815C3F32BE00
  1. 29
      src/EventHub.Domain/Organizations/Plans/PlanInfoDefinition.cs
  2. 29
      src/EventHub.HttpApi.Host/EventHubHttpApiHostModule.cs
  3. 2
      src/EventHub.Web/Pages/Organizations/PlanInfoHelper.cs
  4. 6
      src/EventHub.Web/Pages/Pricing.cshtml
  5. 2
      src/EventHub.Web/Pages/Pricing.cshtml.cs

29
src/EventHub.Domain/Organizations/Plans/PlanInfoDefinition.cs

@ -1,7 +1,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Linq;
using JetBrains.Annotations; using JetBrains.Annotations;
using Volo.Abp;
namespace EventHub.Organizations.Plans; namespace EventHub.Organizations.Plans;
@ -40,4 +42,31 @@ public class PlanInfoDefinition
AdditionalFeatureInfos = new List<string>() AdditionalFeatureInfos = new List<string>()
}; };
} }
public static bool IsValid(List<PlanInfoDefinition> definitions)
{
foreach (var definition in definitions)
{
var isValidPlanType = Enum.IsDefined(typeof(OrganizationPlanType), definition.PlanType);
if (!isValidPlanType)
{
return false;
}
var isExistSamePlan = definitions.Count(x => x.Price == definition.Price && x.PlanType == definition.PlanType);
if (isExistSamePlan > 1)
{
return false;
}
if (definition.IsActive && definition.IsExtendable)
{
Check.NotNull(definition.OnePaidEnrollmentPeriodAsMonth, nameof(definition.OnePaidEnrollmentPeriodAsMonth));
Check.NotNull(definition.CanBeExtendedAfterHowManyMonths, nameof(definition.CanBeExtendedAfterHowManyMonths));
return definition.OnePaidEnrollmentPeriodAsMonth > definition.CanBeExtendedAfterHowManyMonths;
}
}
return true;
}
} }

29
src/EventHub.HttpApi.Host/EventHubHttpApiHostModule.cs

@ -6,7 +6,6 @@ using System.Linq;
using EventHub.EntityFrameworkCore; using EventHub.EntityFrameworkCore;
using EventHub.Events; using EventHub.Events;
using EventHub.Organizations; using EventHub.Organizations;
using EventHub.Organizations.PaymentRequests;
using EventHub.Organizations.Plans; using EventHub.Organizations.Plans;
using EventHub.Utils; using EventHub.Utils;
using EventHub.Web; using EventHub.Web;
@ -201,33 +200,7 @@ namespace EventHub
context.Services.AddOptions<List<PlanInfoDefinition>>() context.Services.AddOptions<List<PlanInfoDefinition>>()
.Bind(configuration.GetSection(PlanInfoDefinition.PlanInfo)) .Bind(configuration.GetSection(PlanInfoDefinition.PlanInfo))
.ValidateDataAnnotations() .ValidateDataAnnotations()
.Validate(configOfDefinitions => .Validate(PlanInfoDefinition.IsValid, "PlanInfoDefinition is not valid!");
{
foreach (var config in configOfDefinitions)
{
var isValidPlanType = Enum.IsDefined(typeof(OrganizationPlanType), config.PlanType);
if (!isValidPlanType)
{
return false;
}
var isExistSamePlan = configOfDefinitions.Count(x =>
x.Price == config.Price && x.PlanType == config.PlanType);
if (isExistSamePlan > 1)
{
return false;
}
if (config.IsActive && config.IsExtendable)
{
Check.NotNull(config.OnePaidEnrollmentPeriodAsMonth, nameof(config.OnePaidEnrollmentPeriodAsMonth));
Check.NotNull(config.CanBeExtendedAfterHowManyMonths, nameof(config.CanBeExtendedAfterHowManyMonths));
return config.OnePaidEnrollmentPeriodAsMonth > config.CanBeExtendedAfterHowManyMonths;
}
}
return true;
}, "PlanInfoDefinition is not valid!");
var planInfos = context.Services.GetRequiredServiceLazy<IOptions<List<PlanInfoDefinition>>>(); var planInfos = context.Services.GetRequiredServiceLazy<IOptions<List<PlanInfoDefinition>>>();

2
src/EventHub.Web/Pages/Organizations/PlanInfoHelper.cs

@ -66,7 +66,7 @@ public static class PlanInfoHelper
return productNameStringBuilder.ToString(); return productNameStringBuilder.ToString();
} }
public static string GetRestrictionInfoByCount(uint? count) public static string GetFeatureInfoByCount(uint? count)
{ {
count ??= uint.MaxValue; count ??= uint.MaxValue;
return count == uint.MaxValue ? "Unlimited" : count.ToString(); return count == uint.MaxValue ? "Unlimited" : count.ToString();

6
src/EventHub.Web/Pages/Pricing.cshtml

@ -25,9 +25,9 @@
<span>@plan.Price</span> <span>@plan.Price</span>
</div> </div>
<ul class="list-check-icon mb-4 text-start"> <ul class="list-check-icon mb-4 text-start">
<li><i class="fa fa-check-circle"></i> @PlanInfoHelper.GetRestrictionInfoByCount(plan.Feature.MaxAllowedEventsCount) events in a year. </li> <li><i class="fa fa-check-circle"></i> @PlanInfoHelper.GetFeatureInfoByCount(plan.Feature.MaxAllowedEventsCount) events in a year. </li>
<li><i class="fa fa-check-circle"></i> Up to @PlanInfoHelper.GetRestrictionInfoByCount(plan.Feature.MaxAllowedTracksCountInOneEvent).ToLower() tracks for an event. </li> <li><i class="fa fa-check-circle"></i> Up to @PlanInfoHelper.GetFeatureInfoByCount(plan.Feature.MaxAllowedTracksCountInOneEvent).ToLower() tracks for an event. </li>
<li><i class="fa fa-check-circle"></i> Up to @PlanInfoHelper.GetRestrictionInfoByCount(plan.Feature.MaxAllowedAttendeesCountInOneEvent).ToLower() attendees per event. </li> <li><i class="fa fa-check-circle"></i> Up to @PlanInfoHelper.GetFeatureInfoByCount(plan.Feature.MaxAllowedAttendeesCountInOneEvent).ToLower() attendees per event. </li>
@foreach (var additionalFeatureInfo in plan.Feature.AdditionalFeatureInfos) @foreach (var additionalFeatureInfo in plan.Feature.AdditionalFeatureInfos)
{ {
<li><i class="fa fa-check-circle"></i> @additionalFeatureInfo </li> <li><i class="fa fa-check-circle"></i> @additionalFeatureInfo </li>

2
src/EventHub.Web/Pages/Pricing.cshtml.cs

@ -21,7 +21,7 @@ namespace EventHub.Web.Pages
[BindProperty] [BindProperty]
public OrganizationPlanType TargetPlanToUpgrade { get; set; } public OrganizationPlanType TargetPlanToUpgrade { get; set; }
[NotNull] [ItemNotNull]
public List<PlanInfoDefinitionDto> PlanInfos { get; private set; } public List<PlanInfoDefinitionDto> PlanInfos { get; private set; }
public OrganizationProfileDto Organization { get; private set; } public OrganizationProfileDto Organization { get; private set; }

Loading…
Cancel
Save