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已复制到剪贴板",
|
||||
"types": {
|
||||
"MONTHLY_REFRESH": "每月刷新",
|
||||
"REGISTER_GIFT": "注册礼品",
|
||||
"PURCHASE": "购买",
|
||||
"USAGE": "使用",
|
||||
"EXPIRE": "过期",
|
||||
"SUBSCRIPTION_RENEWAL": "订阅续费",
|
||||
"LIFETIME_MONTHLY": "终身月度"
|
||||
"MONTHLY_REFRESH": "每月赠送",
|
||||
"REGISTER_GIFT": "注册赠送",
|
||||
"PURCHASE": "购买积分",
|
||||
"USAGE": "使用积分",
|
||||
"EXPIRE": "过期积分",
|
||||
"SUBSCRIPTION_RENEWAL": "订阅月度积分",
|
||||
"LIFETIME_MONTHLY": "终身月度积分"
|
||||
},
|
||||
"detailViewer": {
|
||||
"title": "积分交易详情",
|
||||
|
@ -1,16 +1,19 @@
|
||||
import { websiteConfig } from '@/config/website';
|
||||
import { addCredits } from '@/credits/credits';
|
||||
import { CREDIT_TRANSACTION_TYPE } from '@/credits/types';
|
||||
import {
|
||||
addMonthlyFreeCreditsIfNeed,
|
||||
addRegisterGiftCredits,
|
||||
} from '@/credits/credits';
|
||||
import { getDb } from '@/db/index';
|
||||
import { defaultMessages } from '@/i18n/messages';
|
||||
import { LOCALE_COOKIE_NAME, routing } from '@/i18n/routing';
|
||||
import { sendEmail } from '@/mail';
|
||||
import { subscribe } from '@/newsletter';
|
||||
import { betterAuth } from 'better-auth';
|
||||
import { type User, betterAuth } from 'better-auth';
|
||||
import { drizzleAdapter } from 'better-auth/adapters/drizzle';
|
||||
import { admin } from 'better-auth/plugins';
|
||||
import { parse as parseCookies } from 'cookie';
|
||||
import type { Locale } from 'next-intl';
|
||||
import { getAllPricePlans } from './price-plan';
|
||||
import { getBaseUrl, getUrlWithLocaleInCallbackUrl } from './urls/urls';
|
||||
|
||||
/**
|
||||
@ -116,34 +119,7 @@ export const auth = betterAuth({
|
||||
user: {
|
||||
create: {
|
||||
after: async (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
|
||||
) {
|
||||
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,
|
||||
});
|
||||
}
|
||||
await onCreateUser(user);
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -179,3 +155,59 @@ export function getLocaleFromRequest(request?: Request): Locale {
|
||||
const cookies = parseCookies(request?.headers.get('cookie') ?? '');
|
||||
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