Browse Source

Extend promotion system

pull/4008/head
Thomas Kaul 10 months ago
parent
commit
f27fb30897
  1. 8
      apps/api/src/app/info/info.service.ts
  2. 8
      apps/client/src/app/app.component.ts
  3. 19
      apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
  4. 8
      apps/client/src/app/components/user-account-membership/user-account-membership.html
  5. 23
      apps/client/src/app/pages/pricing/pricing-page.component.ts
  6. 4
      apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
  7. 2
      libs/common/src/lib/interfaces/info-item.interface.ts

8
apps/api/src/app/info/info.service.ts

@ -101,7 +101,7 @@ export class InfoService {
isUserSignupEnabled,
platforms,
statistics,
subscriptions
subscriptionOffers
] = await Promise.all([
this.benchmarkService.getBenchmarkAssetProfiles(),
this.getDemoAuthToken(),
@ -110,7 +110,7 @@ export class InfoService {
orderBy: { name: 'asc' }
}),
this.getStatistics(),
this.getSubscriptions()
this.getSubscriptionOffers()
]);
if (isUserSignupEnabled) {
@ -125,7 +125,7 @@ export class InfoService {
isReadOnlyMode,
platforms,
statistics,
subscriptions,
subscriptionOffers,
baseCurrency: DEFAULT_CURRENCY,
currencies: this.exchangeRateDataService.getCurrencies()
};
@ -314,7 +314,7 @@ export class InfoService {
return statistics;
}
private async getSubscriptions(): Promise<{
private async getSubscriptionOffers(): Promise<{
[offer in SubscriptionOfferKey]: SubscriptionOffer;
}> {
if (!this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {

8
apps/client/src/app/app.component.ts

@ -138,8 +138,8 @@ export class AppComponent implements OnDestroy, OnInit {
);
this.hasPromotion =
!!this.info?.subscriptions?.default?.coupon ||
!!this.info?.subscriptions?.default?.durationExtension;
!!this.info?.subscriptionOffers?.default?.coupon ||
!!this.info?.subscriptionOffers?.default?.durationExtension;
this.impersonationStorageService
.onChangeHasImpersonation()
@ -237,10 +237,10 @@ export class AppComponent implements OnDestroy, OnInit {
this.canCreateAccount || !!this.user?.systemMessage;
this.hasPromotion =
!!this.info?.subscriptions?.[
!!this.info?.subscriptionOffers?.[
this.user?.subscription?.offer ?? 'default'
]?.coupon ||
!!this.info?.subscriptions?.[
!!this.info?.subscriptionOffers?.[
this.user?.subscription?.offer ?? 'default'
]?.durationExtension;

19
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts

@ -16,6 +16,7 @@ import {
MatSnackBarRef,
TextOnlySnackBar
} from '@angular/material/snack-bar';
import { StringValue } from 'ms';
import { StripeService } from 'ngx-stripe';
import { EMPTY, Subject } from 'rxjs';
import { catchError, switchMap, takeUntil } from 'rxjs/operators';
@ -31,6 +32,7 @@ export class UserAccountMembershipComponent implements OnDestroy {
public coupon: number;
public couponId: string;
public defaultDateFormat: string;
public durationExtension: StringValue;
public hasPermissionForSubscription: boolean;
public hasPermissionToUpdateUserSettings: boolean;
public price: number;
@ -51,7 +53,7 @@ export class UserAccountMembershipComponent implements OnDestroy {
private stripeService: StripeService,
private userService: UserService
) {
const { baseCurrency, globalPermissions, subscriptions } =
const { baseCurrency, globalPermissions, subscriptionOffers } =
this.dataService.fetchInfo();
this.baseCurrency = baseCurrency;
@ -76,11 +78,18 @@ export class UserAccountMembershipComponent implements OnDestroy {
permissions.updateUserSettings
);
this.coupon = subscriptions?.[this.user.subscription.offer]?.coupon;
this.coupon =
subscriptionOffers?.[this.user.subscription.offer]?.coupon;
this.couponId =
subscriptions?.[this.user.subscription.offer]?.couponId;
this.price = subscriptions?.[this.user.subscription.offer]?.price;
this.priceId = subscriptions?.[this.user.subscription.offer]?.priceId;
subscriptionOffers?.[this.user.subscription.offer]?.couponId;
this.durationExtension =
subscriptionOffers?.[
this.user.subscription.offer
]?.durationExtension;
this.price =
subscriptionOffers?.[this.user.subscription.offer]?.price;
this.priceId =
subscriptionOffers?.[this.user.subscription.offer]?.priceId;
this.changeDetectorRef.markForCheck();
}

8
apps/client/src/app/components/user-account-membership/user-account-membership.html

@ -34,6 +34,14 @@
&nbsp;<span i18n>per year</span>
</div>
}
@if (durationExtension) {
<div class="mt-1 text-center">
<div class="badge badge-pill badge-warning px-2">
<strong>Limited Offer!</strong> Get
{{ durationExtension }} extra
</div>
</div>
}
}
<div class="align-items-center d-flex justify-content-center mt-4">
@if (!user?.subscription?.expiresAt) {

23
apps/client/src/app/pages/pricing/pricing-page.component.ts

@ -53,12 +53,12 @@ export class PricingPageComponent implements OnDestroy, OnInit {
) {}
public ngOnInit() {
const { baseCurrency, subscriptions } = this.dataService.fetchInfo();
const { baseCurrency, subscriptionOffers } = this.dataService.fetchInfo();
this.baseCurrency = baseCurrency;
this.coupon = subscriptions?.default?.coupon;
this.durationExtension = subscriptions?.default?.durationExtension;
this.price = subscriptions?.default?.price;
this.coupon = subscriptionOffers?.default?.coupon;
this.durationExtension = subscriptionOffers?.default?.durationExtension;
this.price = subscriptionOffers?.default?.price;
this.userService.stateChanged
.pipe(takeUntil(this.unsubscribeSubject))
@ -71,13 +71,18 @@ export class PricingPageComponent implements OnDestroy, OnInit {
permissions.updateUserSettings
);
this.coupon = subscriptions?.[this.user?.subscription?.offer]?.coupon;
this.coupon =
subscriptionOffers?.[this.user?.subscription?.offer]?.coupon;
this.couponId =
subscriptions?.[this.user.subscription.offer]?.couponId;
subscriptionOffers?.[this.user.subscription.offer]?.couponId;
this.durationExtension =
subscriptions?.[this.user?.subscription?.offer]?.durationExtension;
this.price = subscriptions?.[this.user?.subscription?.offer]?.price;
this.priceId = subscriptions?.[this.user.subscription.offer]?.priceId;
subscriptionOffers?.[
this.user?.subscription?.offer
]?.durationExtension;
this.price =
subscriptionOffers?.[this.user?.subscription?.offer]?.price;
this.priceId =
subscriptionOffers?.[this.user.subscription.offer]?.priceId;
this.changeDetectorRef.markForCheck();
}

4
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts

@ -35,9 +35,9 @@ export class GfProductPageComponent implements OnInit {
) {}
public ngOnInit() {
const { subscriptions } = this.dataService.fetchInfo();
const { subscriptionOffers } = this.dataService.fetchInfo();
this.price = subscriptions?.default?.price;
this.price = subscriptionOffers?.default?.price;
this.product1 = {
founded: 2021,

2
libs/common/src/lib/interfaces/info-item.interface.ts

@ -18,5 +18,5 @@ export interface InfoItem {
platforms: Platform[];
statistics: Statistics;
stripePublicKey?: string;
subscriptions: { [offer in SubscriptionOfferKey]: SubscriptionOffer };
subscriptionOffers: { [offer in SubscriptionOfferKey]: SubscriptionOffer };
}

Loading…
Cancel
Save