feat: wip

This commit is contained in:
David Nguyen
2023-12-27 13:04:24 +11:00
parent f7cf33c61b
commit 9d626473c8
140 changed files with 9604 additions and 536 deletions

View File

@ -0,0 +1,26 @@
import { AppError } from '../errors/app-error';
import type { Subscription } from '.prisma/client';
import { SubscriptionStatus } from '.prisma/client';
export const isPriceIdCommunityPlan = (priceId: string) =>
priceId === process.env.NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_MONTHLY_PRICE_ID ||
priceId === process.env.NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_YEARLY_PRICE_ID;
/**
* Returns true if there is a subscription that is active and is a community plan.
*/
export const isSomeSubscriptionsActiveAndCommunityPlan = (subscriptions: Subscription[]) => {
return subscriptions.some(
(subscription) =>
subscription.status === SubscriptionStatus.ACTIVE &&
isPriceIdCommunityPlan(subscription.planId),
);
};
export const getTeamSeatPriceId = () => {
if (!process.env.NEXT_PUBLIC_STRIPE_TEAM_SEAT_PRICE_ID) {
throw new AppError('MISSING_STRIPE_TEAM_SEAT_PRICE_ID');
}
return process.env.NEXT_PUBLIC_STRIPE_TEAM_SEAT_PRICE_ID;
};

View File

@ -0,0 +1,17 @@
// Common util functions for parsing params.
/**
* From an unknown string, parse it into a number array.
*
* Filter out unknown values.
*/
export const parseToNumberArray = (value: unknown): number[] => {
if (typeof value !== 'string') {
return [];
}
return value
.split(',')
.map((value) => parseInt(value, 10))
.filter((value) => !isNaN(value));
};

View File

@ -0,0 +1,7 @@
import { WEBAPP_BASE_URL } from '../constants/app';
export const formatTeamUrl = (teamUrl: string, baseUrl?: string) => {
const formattedBaseUrl = (baseUrl ?? WEBAPP_BASE_URL).replace(/https?:\/\//, '');
return `${formattedBaseUrl}/t/${teamUrl}`;
};

View File

@ -0,0 +1,21 @@
import type { DurationLike } from 'luxon';
import { DateTime } from 'luxon';
import { nanoid } from 'nanoid';
/**
* Create a token verification object.
*
* @param expiry The date the token expires, or the duration until the token expires.
*/
export const createTokenVerification = (expiry: Date | DurationLike) => {
const expiresAt = expiry instanceof Date ? expiry : DateTime.now().plus(expiry).toJSDate();
return {
expiresAt,
token: nanoid(32),
};
};
export const isTokenExpired = (expiresAt: Date) => {
return expiresAt < new Date();
};