Browse Source

Plan fixes.

pull/492/head
Sebastian 6 years ago
parent
commit
4181a2c6c2
  1. 4
      backend/src/Squidex.Domain.Apps.Entities/Apps/Services/IAppPlansProvider.cs
  2. 24
      backend/src/Squidex.Domain.Apps.Entities/Apps/Services/Implementations/ConfigAppPlansProvider.cs
  3. 4
      backend/src/Squidex.Web/Pipeline/ApiCostsFilter.cs
  4. 2
      backend/src/Squidex/Areas/Api/Controllers/Apps/Models/AppDto.cs
  5. 2
      backend/src/Squidex/Areas/Api/Controllers/Apps/Models/ContributorsDto.cs
  6. 2
      backend/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs
  7. 2
      backend/src/Squidex/Areas/Api/Controllers/Plans/Models/AppPlansDto.cs
  8. 4
      backend/src/Squidex/Areas/Api/Controllers/Statistics/UsagesController.cs
  9. 16
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Billing/ConfigAppLimitsProviderTests.cs
  10. 2
      backend/tests/Squidex.Web.Tests/Pipeline/ApiCostsFilterTests.cs
  11. 6
      frontend/app/shared/state/plans.state.ts

4
backend/src/Squidex.Domain.Apps.Entities/Apps/Services/IAppPlansProvider.cs

@ -21,8 +21,8 @@ namespace Squidex.Domain.Apps.Entities.Apps.Services
IAppLimitsPlan? GetPlan(string? planId);
IAppLimitsPlan GetPlanForApp(IAppEntity app);
IAppLimitsPlan GetFreePlan();
(IAppLimitsPlan Plan, string PlanId) GetPlanForApp(IAppEntity app);
}
}

24
backend/src/Squidex.Domain.Apps.Entities/Apps/Services/Implementations/ConfigAppPlansProvider.cs

@ -57,13 +57,6 @@ namespace Squidex.Domain.Apps.Entities.Apps.Services.Implementations
return plansById.GetOrDefault(planId ?? string.Empty);
}
public IAppLimitsPlan GetPlanForApp(IAppEntity app)
{
Guard.NotNull(app);
return GetPlanCore(app.Plan?.PlanId);
}
public IAppLimitsPlan GetFreePlan()
{
return GetPlanCore(plansList.FirstOrDefault(x => string.IsNullOrWhiteSpace(x.Costs))?.Id);
@ -90,6 +83,23 @@ namespace Squidex.Domain.Apps.Entities.Apps.Services.Implementations
return null;
}
public (IAppLimitsPlan Plan, string PlanId) GetPlanForApp(IAppEntity app)
{
Guard.NotNull(app);
var planId = app.Plan?.PlanId;
var plan = GetPlanCore(planId);
if (plan.YearlyId != null && plan.YearlyId == planId)
{
return (plan, plan.YearlyId);
}
else
{
return (plan, plan.Id);
}
}
private ConfigAppLimitsPlan GetPlanCore(string? planId)
{
return plansById.GetOrDefault(planId ?? string.Empty) ?? plansById.Values.FirstOrDefault() ?? Infinite;

4
backend/src/Squidex.Web/Pipeline/ApiCostsFilter.cs

@ -69,11 +69,11 @@ namespace Squidex.Web.Pipeline
{
using (Profiler.Trace("CheckUsage"))
{
var plan = appPlansProvider.GetPlanForApp(app);
var (plan, _) = appPlansProvider.GetPlanForApp(app);
var usage = await usageTracker.GetMonthlyCallsAsync(appId, DateTime.Today);
if (plan?.MaxApiCalls >= 0 && usage > plan.MaxApiCalls * 1.1)
if (plan.MaxApiCalls >= 0 && usage > plan.MaxApiCalls * 1.1)
{
context.Result = new StatusCodeResult(429);
return;

2
backend/src/Squidex/Areas/Api/Controllers/Apps/Models/AppDto.cs

@ -139,7 +139,7 @@ namespace Squidex.Areas.Api.Controllers.Apps.Models
PlanUpgrade = plans.GetPlanUpgradeForApp(app)?.Name;
}
PlanName = plans.GetPlanForApp(app).Name;
PlanName = plans.GetPlanForApp(app).Plan.Name;
}
private void SetImage(IAppEntity app, ApiController controller)

2
backend/src/Squidex/Areas/Api/Controllers/Apps/Models/ContributorsDto.cs

@ -59,7 +59,7 @@ namespace Squidex.Areas.Api.Controllers.Apps.Models
private void WithPlan(IAppEntity app, IAppPlansProvider plans)
{
MaxContributors = plans.GetPlanForApp(app).MaxContributors;
MaxContributors = plans.GetPlanForApp(app).Plan.MaxContributors;
}
private void WithInvited(bool isInvited)

2
backend/src/Squidex/Areas/Api/Controllers/Assets/AssetsController.cs

@ -296,7 +296,7 @@ namespace Squidex.Areas.Api.Controllers.Assets
throw new ValidationException("Cannot create asset.", error);
}
var plan = appPlansProvider.GetPlanForApp(App);
var (plan, _) = appPlansProvider.GetPlanForApp(App);
var currentSize = await assetStatsRepository.GetTotalSizeAsync(AppId);

2
backend/src/Squidex/Areas/Api/Controllers/Plans/Models/AppPlansDto.cs

@ -37,7 +37,7 @@ namespace Squidex.Areas.Api.Controllers.Plans.Models
public static AppPlansDto FromApp(IAppEntity app, IAppPlansProvider plans, bool hasPortal)
{
var planId = plans.GetPlanForApp(app).Id;
var (_, planId) = plans.GetPlanForApp(app);
var response = new AppPlansDto
{

4
backend/src/Squidex/Areas/Api/Controllers/Statistics/UsagesController.cs

@ -97,7 +97,7 @@ namespace Squidex.Areas.Api.Controllers.Statistics
{
var count = await usageTracker.GetMonthlyCallsAsync(AppId.ToString(), DateTime.Today);
var plan = appPlansProvider.GetPlanForApp(App);
var (plan, _) = appPlansProvider.GetPlanForApp(App);
var response = new CurrentCallsDto { Count = count, MaxAllowed = plan.MaxApiCalls };
@ -151,7 +151,7 @@ namespace Squidex.Areas.Api.Controllers.Statistics
{
var size = await assetStatsRepository.GetTotalSizeAsync(AppId);
var plan = appPlansProvider.GetPlanForApp(App);
var (plan, _) = appPlansProvider.GetPlanForApp(App);
var response = new CurrentStorageDto { Size = size, MaxAllowed = plan.MaxAssetSize };

16
backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Billing/ConfigAppLimitsProviderTests.cs

@ -63,9 +63,9 @@ namespace Squidex.Domain.Apps.Entities.Apps.Billing
{
var sut = new ConfigAppPlansProvider(Enumerable.Empty<ConfigAppLimitsPlan>());
var plan = sut.GetPlanForApp(CreateApp(planId));
var result = sut.GetPlanForApp(CreateApp(planId));
plan.Should().BeEquivalentTo(InfinitePlan);
result.Should().BeEquivalentTo((InfinitePlan, "infinite"));
}
[Fact]
@ -93,9 +93,9 @@ namespace Squidex.Domain.Apps.Entities.Apps.Billing
{
var sut = new ConfigAppPlansProvider(Plans);
var plan = sut.GetPlanForApp(CreateApp("basic"));
var result = sut.GetPlanForApp(CreateApp("basic"));
plan.Should().BeEquivalentTo(BasicPlan);
result.Should().BeEquivalentTo((BasicPlan, "basic"));
}
[Fact]
@ -103,9 +103,9 @@ namespace Squidex.Domain.Apps.Entities.Apps.Billing
{
var sut = new ConfigAppPlansProvider(Plans);
var plan = sut.GetPlanForApp(CreateApp("basic_yearly"));
var result = sut.GetPlanForApp(CreateApp("basic_yearly"));
plan.Should().BeEquivalentTo(BasicPlan);
result.Should().BeEquivalentTo((BasicPlan, "basic_yearly"));
}
[Fact]
@ -113,9 +113,9 @@ namespace Squidex.Domain.Apps.Entities.Apps.Billing
{
var sut = new ConfigAppPlansProvider(Plans);
var plan = sut.GetPlanForApp(CreateApp("enterprise"));
var result = sut.GetPlanForApp(CreateApp("enterprise"));
plan.Should().BeEquivalentTo(FreePlan);
result.Should().BeEquivalentTo((FreePlan, "free"));
}
[Fact]

2
backend/tests/Squidex.Web.Tests/Pipeline/ApiCostsFilterTests.cs

@ -55,7 +55,7 @@ namespace Squidex.Web.Pipeline
.Returns(appPlan);
A.CallTo(() => appPlansProvider.GetPlanForApp(appEntity))
.Returns(appPlan);
.Returns((appPlan, "free"));
A.CallTo(() => appPlan.MaxApiCalls)
.ReturnsLazily(x => apiCallsMax);

6
frontend/app/shared/state/plans.state.ts

@ -134,7 +134,11 @@ export class PlansState extends State<Snapshot> {
}
private createPlan(plan: PlanDto, id: string) {
return { plan, isYearlySelected: plan.yearlyId === id, isSelected: plan.id === id };
return {
plan,
isSelected: plan.id === id,
isYearlySelected: plan.yearlyId === id
};
}
private get appName() {

Loading…
Cancel
Save