hide TryFreeButton if user had any subscription

This commit is contained in:
vchikalkin 2025-09-27 16:42:13 +03:00
parent d9e67bf4ba
commit 047a9b1956
4 changed files with 23 additions and 9 deletions

View File

@ -51,6 +51,14 @@ export async function getSubscriptionPrices(
return wrapServerAction(() => service.getSubscriptionPrices(...variables)); return wrapServerAction(() => service.getSubscriptionPrices(...variables));
} }
export async function getSubscriptions(
...variables: Parameters<SubscriptionsService['getSubscriptions']>
) {
const service = await getService();
return wrapServerAction(() => service.getSubscriptions(...variables));
}
export async function getSubscriptionSettings( export async function getSubscriptionSettings(
...variables: Parameters<SubscriptionsService['getSubscriptionSettings']> ...variables: Parameters<SubscriptionsService['getSubscriptionSettings']>
) { ) {

View File

@ -2,6 +2,7 @@ import * as subscriptions from './server/subscriptions';
import { wrapClientAction } from '@/utils/actions'; import { wrapClientAction } from '@/utils/actions';
export const getSubscription = wrapClientAction(subscriptions.getSubscription); export const getSubscription = wrapClientAction(subscriptions.getSubscription);
export const getSubscriptions = wrapClientAction(subscriptions.getSubscriptions);
export const getSubscriptionSettings = wrapClientAction(subscriptions.getSubscriptionSettings); export const getSubscriptionSettings = wrapClientAction(subscriptions.getSubscriptionSettings);
export const getSubscriptionPrices = wrapClientAction(subscriptions.getSubscriptionPrices); export const getSubscriptionPrices = wrapClientAction(subscriptions.getSubscriptionPrices);
export const getSubscriptionHistory = wrapClientAction(subscriptions.getSubscriptionHistory); export const getSubscriptionHistory = wrapClientAction(subscriptions.getSubscriptionHistory);

View File

@ -1,4 +1,8 @@
import { getSubscription, getSubscriptionPrices } from '@/actions/api/subscriptions'; import {
getSubscription,
getSubscriptionPrices,
getSubscriptions,
} from '@/actions/api/subscriptions';
import { getSessionUser } from '@/actions/session'; import { getSessionUser } from '@/actions/session';
import { TryFreeButton } from '@/components/subscription'; import { TryFreeButton } from '@/components/subscription';
import { env } from '@/config/env'; import { env } from '@/config/env';
@ -10,11 +14,15 @@ import Link from 'next/link';
export default async function ProPage() { export default async function ProPage() {
const { telegramId } = await getSessionUser(); const { telegramId } = await getSessionUser();
const { hasActiveSubscription, usedTrialSubscription } = await getSubscription({ const { hasActiveSubscription } = await getSubscription({
telegramId, telegramId,
}); });
const canUseTrial = !usedTrialSubscription; const { subscriptions } = await getSubscriptions({
filters: { customer: { telegramId: { eq: telegramId } } },
});
const canUseTrial = !subscriptions?.length;
const { subscriptionPrices = [] } = await getSubscriptionPrices({ const { subscriptionPrices = [] } = await getSubscriptionPrices({
filters: { filters: {

View File

@ -122,8 +122,8 @@ export class SubscriptionsService extends BaseService {
const { customer } = await this.checkIsBanned(); const { customer } = await this.checkIsBanned();
// Проверяем, не использовал ли пользователь уже пробный период // Проверяем, не использовал ли пользователь уже пробный период
const hasUserTrial = await this.usedTrialSubscription(); const hasTrial = await this.hasTrialSubscription();
if (hasUserTrial) throw new Error(ERRORS.TRIAL_PERIOD_ALREADY_USED); if (hasTrial) throw new Error(ERRORS.TRIAL_PERIOD_ALREADY_USED);
// Получаем цены подписки для определения длительности пробного периода // Получаем цены подписки для определения длительности пробного периода
const { subscriptionPrices } = await this.getSubscriptionPrices({ const { subscriptionPrices } = await this.getSubscriptionPrices({
@ -199,15 +199,12 @@ export class SubscriptionsService extends BaseService {
const { maxOrdersPerMonth, remainingOrdersCount } = await this.getRemainingOrdersCount(); const { maxOrdersPerMonth, remainingOrdersCount } = await this.getRemainingOrdersCount();
const usedTrialSubscription = await this.usedTrialSubscription();
return { return {
hasActiveSubscription, hasActiveSubscription,
maxOrdersPerMonth, maxOrdersPerMonth,
remainingDays, remainingDays,
remainingOrdersCount, remainingOrdersCount,
subscription, subscription,
usedTrialSubscription,
}; };
} }
@ -296,7 +293,7 @@ export class SubscriptionsService extends BaseService {
return mutationResult.data; return mutationResult.data;
} }
async usedTrialSubscription() { async hasTrialSubscription() {
const { customer } = await this._getUser(); const { customer } = await this._getUser();
const { subscriptionHistories } = await this.getSubscriptionHistory({ const { subscriptionHistories } = await this.getSubscriptionHistory({