diff --git a/messages/zh.json b/messages/zh.json index 3b85703..94db36a 100644 --- a/messages/zh.json +++ b/messages/zh.json @@ -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": "积分交易详情", diff --git a/src/lib/auth.ts b/src/lib/auth.ts index bab07b8..da6e297 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -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); + } + } +}