feat: add register gift and monthly refresh credits to new user
This commit is contained in:
parent
9f3c5e80c2
commit
765f5e1e39
@ -632,13 +632,13 @@
|
|||||||
},
|
},
|
||||||
"paymentIdCopied": "支付ID已复制到剪贴板",
|
"paymentIdCopied": "支付ID已复制到剪贴板",
|
||||||
"types": {
|
"types": {
|
||||||
"MONTHLY_REFRESH": "每月刷新",
|
"MONTHLY_REFRESH": "每月赠送",
|
||||||
"REGISTER_GIFT": "注册礼品",
|
"REGISTER_GIFT": "注册赠送",
|
||||||
"PURCHASE": "购买",
|
"PURCHASE": "购买积分",
|
||||||
"USAGE": "使用",
|
"USAGE": "使用积分",
|
||||||
"EXPIRE": "过期",
|
"EXPIRE": "过期积分",
|
||||||
"SUBSCRIPTION_RENEWAL": "订阅续费",
|
"SUBSCRIPTION_RENEWAL": "订阅月度积分",
|
||||||
"LIFETIME_MONTHLY": "终身月度"
|
"LIFETIME_MONTHLY": "终身月度积分"
|
||||||
},
|
},
|
||||||
"detailViewer": {
|
"detailViewer": {
|
||||||
"title": "积分交易详情",
|
"title": "积分交易详情",
|
||||||
|
@ -1,16 +1,19 @@
|
|||||||
import { websiteConfig } from '@/config/website';
|
import { websiteConfig } from '@/config/website';
|
||||||
import { addCredits } from '@/credits/credits';
|
import {
|
||||||
import { CREDIT_TRANSACTION_TYPE } from '@/credits/types';
|
addMonthlyFreeCreditsIfNeed,
|
||||||
|
addRegisterGiftCredits,
|
||||||
|
} from '@/credits/credits';
|
||||||
import { getDb } from '@/db/index';
|
import { getDb } from '@/db/index';
|
||||||
import { defaultMessages } from '@/i18n/messages';
|
import { defaultMessages } from '@/i18n/messages';
|
||||||
import { LOCALE_COOKIE_NAME, routing } from '@/i18n/routing';
|
import { LOCALE_COOKIE_NAME, routing } from '@/i18n/routing';
|
||||||
import { sendEmail } from '@/mail';
|
import { sendEmail } from '@/mail';
|
||||||
import { subscribe } from '@/newsletter';
|
import { subscribe } from '@/newsletter';
|
||||||
import { betterAuth } from 'better-auth';
|
import { type User, betterAuth } from 'better-auth';
|
||||||
import { drizzleAdapter } from 'better-auth/adapters/drizzle';
|
import { drizzleAdapter } from 'better-auth/adapters/drizzle';
|
||||||
import { admin } from 'better-auth/plugins';
|
import { admin } from 'better-auth/plugins';
|
||||||
import { parse as parseCookies } from 'cookie';
|
import { parse as parseCookies } from 'cookie';
|
||||||
import type { Locale } from 'next-intl';
|
import type { Locale } from 'next-intl';
|
||||||
|
import { getAllPricePlans } from './price-plan';
|
||||||
import { getBaseUrl, getUrlWithLocaleInCallbackUrl } from './urls/urls';
|
import { getBaseUrl, getUrlWithLocaleInCallbackUrl } from './urls/urls';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -116,34 +119,7 @@ export const auth = betterAuth({
|
|||||||
user: {
|
user: {
|
||||||
create: {
|
create: {
|
||||||
after: async (user) => {
|
after: async (user) => {
|
||||||
// Auto subscribe user to newsletter after sign up if enabled in website config
|
await onCreateUser(user);
|
||||||
if (user.email && websiteConfig.newsletter.autoSubscribeAfterSignUp) {
|
|
||||||
try {
|
|
||||||
const subscribed = await subscribe(user.email);
|
|
||||||
if (!subscribed) {
|
|
||||||
console.error(
|
|
||||||
`Failed to subscribe user ${user.email} to newsletter`
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
console.log(`User ${user.email} subscribed to newsletter`);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Newsletter subscription error:', error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Add register gift credits to the user if enabled in website config
|
|
||||||
if (
|
|
||||||
websiteConfig.credits.registerGiftCredits.enable &&
|
|
||||||
websiteConfig.credits.registerGiftCredits.credits > 0
|
|
||||||
) {
|
|
||||||
await addCredits({
|
|
||||||
userId: user.id,
|
|
||||||
amount: websiteConfig.credits.registerGiftCredits.credits,
|
|
||||||
type: CREDIT_TRANSACTION_TYPE.REGISTER_GIFT,
|
|
||||||
description: 'Register gift credits',
|
|
||||||
expireDays: websiteConfig.credits.registerGiftCredits.expireDays,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -179,3 +155,59 @@ export function getLocaleFromRequest(request?: Request): Locale {
|
|||||||
const cookies = parseCookies(request?.headers.get('cookie') ?? '');
|
const cookies = parseCookies(request?.headers.get('cookie') ?? '');
|
||||||
return (cookies[LOCALE_COOKIE_NAME] as Locale) ?? routing.defaultLocale;
|
return (cookies[LOCALE_COOKIE_NAME] as Locale) ?? routing.defaultLocale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On create user hook
|
||||||
|
*
|
||||||
|
* @param user - The user to create
|
||||||
|
*/
|
||||||
|
async function onCreateUser(user: User) {
|
||||||
|
// Auto subscribe user to newsletter after sign up if enabled in website config
|
||||||
|
if (user.email && websiteConfig.newsletter.autoSubscribeAfterSignUp) {
|
||||||
|
try {
|
||||||
|
const subscribed = await subscribe(user.email);
|
||||||
|
if (!subscribed) {
|
||||||
|
console.error(`Failed to subscribe user ${user.email} to newsletter`);
|
||||||
|
} else {
|
||||||
|
console.log(`User ${user.email} subscribed to newsletter`);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Newsletter subscription error:', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add register gift credits to the user if enabled in website config
|
||||||
|
if (
|
||||||
|
websiteConfig.credits.registerGiftCredits.enable &&
|
||||||
|
websiteConfig.credits.registerGiftCredits.credits > 0
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
await addRegisterGiftCredits(user.id);
|
||||||
|
const credits = websiteConfig.credits.registerGiftCredits.credits;
|
||||||
|
console.log(
|
||||||
|
`added register gift credits for user ${user.id}, credits: ${credits}`
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Register gift credits error:', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add free monthly credits to the user if enabled in website config
|
||||||
|
const pricePlans = await getAllPricePlans();
|
||||||
|
const freePlan = pricePlans.find((plan) => plan.isFree);
|
||||||
|
if (
|
||||||
|
freePlan?.credits?.enable &&
|
||||||
|
freePlan?.credits?.amount &&
|
||||||
|
freePlan?.credits?.amount > 0
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
await addMonthlyFreeCreditsIfNeed(user.id);
|
||||||
|
const credits = freePlan.credits.amount;
|
||||||
|
console.log(
|
||||||
|
`added free monthly credits for user ${user.id}, credits: ${credits}`
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Free monthly credits error:', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user