/** * 服务配置 - PocketBase、支付、MinIO */ export interface PocketBaseConfig { enabled: boolean; url: string; usersCollection: string; joinCollection: string; } export interface PaymentConfig { enabled: boolean; apiUrl: string; provider: "zpay" | "xorpay"; defaultAmount: number; defaultType: string; zpaySubmitUrl: string; } export interface MinioConfig { enabled: boolean; endPoint: string; port: number; useSSL: boolean; bucket: string; accessKey: string; secretKey: string; region: string; publicUrl: string; uploadPrefix: string; } const isDev = process.env.NODE_ENV === "development"; export function getPocketBaseConfig(): PocketBaseConfig { return { enabled: true, url: process.env.NEXT_PUBLIC_POCKETBASE_URL || process.env.POCKETBASE_URL || "https://pocketbase.hackrobot.cn", usersCollection: "users", joinCollection: process.env.POCKETBASE_JOIN_COLLECTION || "solan", }; } export function getPaymentConfig(): PaymentConfig { return { enabled: true, apiUrl: process.env.PAYMENT_API_URL || (isDev ? "http://127.0.0.1:8700" : "https://api.hackrobot.cn"), provider: (process.env.PAYMENT_PROVIDER as "zpay" | "xorpay") || "zpay", defaultAmount: Number(process.env.PAYMENT_DEFAULT_AMOUNT) || 80, defaultType: process.env.PAYMENT_DEFAULT_TYPE || "meetup", zpaySubmitUrl: process.env.ZPAY_SUBMIT_URL || "https://zpayz.cn/submit.php", }; } /** 获取「加入」场景的支付配置 */ export function getJoinPaymentConfig(): { amount: number; type: string } { const payment = getPaymentConfig(); return { amount: Number(process.env.PAYMENT_JOIN_AMOUNT) || payment.defaultAmount, type: process.env.PAYMENT_JOIN_TYPE || payment.defaultType, }; } export function getMinioConfig(themeOverride?: { bucket?: string; uploadPrefix?: string; }): MinioConfig { const endPoint = process.env.MINIO_ENDPOINT || "minioweb.hackrobot.cn"; const port = parseInt(process.env.MINIO_PORT || "9035", 10); const bucket = themeOverride?.bucket || process.env.MINIO_BUCKET || "hackrobot"; const publicUrl = process.env.MINIO_PUBLIC_URL || `https://${endPoint}/${bucket}`; const uploadPrefix = themeOverride?.uploadPrefix || process.env.MINIO_UPLOAD_PREFIX || "joins"; return { enabled: true, endPoint, port, useSSL: process.env.MINIO_USE_SSL === "true", bucket, accessKey: process.env.MINIO_ACCESS_KEY || "", secretKey: process.env.MINIO_SECRET_KEY || "", region: process.env.MINIO_REGION || "china", publicUrl: publicUrl.replace(/\/$/, ""), uploadPrefix, }; }