项目架构
架构概述
Better SaaS 采用现代化、可扩展的架构构建,遵循行业最佳实践。本文档深入介绍了应用程序中使用的系统设计、组件和架构模式。
系统架构
高级架构
核心组件
1. 前端层 (Next.js App Router)
- 页面和路由: 使用国际化路由的 App Router
 - 组件: 基于 Radix UI 的可重用 UI 组件
 - 状态管理: 使用 Zustand 进行客户端状态管理
 - 样式: 使用自定义设计系统的 Tailwind CSS
 - 数据获取: 使用 SWR 进行缓存和同步
 
2. 后端层 (Next.js API Routes)
- API 端点: 具有类型安全路由的 RESTful API
 - 身份认证: 支持多提供商的 Better Auth
 - 数据库: 使用 PostgreSQL 的 Drizzle ORM
 - 文件处理: 安全的上传和存储管理
 - 支付处理: 带有 Webhook 的 Stripe 集成
 
3. 数据层
- 数据库: 具有优化模式的 PostgreSQL
 - ORM: 用于类型安全数据库操作的 Drizzle
 - 缓存: 用于会话和数据缓存的 Redis
 - 文件存储: 用于静态资源的 Cloudflare R2
 
身份认证流程
多提供商身份认证
身份认证功能
- 会话管理: 数据库持久化会话,可配置过期时间
 - 基于角色的访问控制: 管理员、用户和自定义角色权限
 - 社交登录: GitHub、Google OAuth 集成
 - 安全: 密码哈希、CSRF 保护、安全 Cookie
 - 密码重置: 基于邮箱的密码恢复流程
 
数据库设计
核心表
用户表
CREATE TABLE users (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  email VARCHAR(255) UNIQUE NOT NULL,
  name VARCHAR(255),
  image TEXT,
  role VARCHAR(50) DEFAULT 'user',
  created_at TIMESTAMP DEFAULT NOW(),
  updated_at TIMESTAMP DEFAULT NOW()
);会话表
CREATE TABLE sessions (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id UUID REFERENCES users(id) ON DELETE CASCADE,
  token VARCHAR(255) UNIQUE NOT NULL,
  expires_at TIMESTAMP NOT NULL,
  created_at TIMESTAMP DEFAULT NOW()
);文件表
CREATE TABLE files (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id UUID REFERENCES users(id) ON DELETE CASCADE,
  filename VARCHAR(255) NOT NULL,
  original_name VARCHAR(255) NOT NULL,
  mime_type VARCHAR(100) NOT NULL,
  size INTEGER NOT NULL,
  url TEXT NOT NULL,
  created_at TIMESTAMP DEFAULT NOW()
);支付表
CREATE TABLE payments (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id UUID REFERENCES users(id) ON DELETE CASCADE,
  stripe_customer_id VARCHAR(255),
  stripe_subscription_id VARCHAR(255),
  status VARCHAR(50) NOT NULL,
  plan VARCHAR(50) NOT NULL,
  amount INTEGER NOT NULL,
  currency VARCHAR(3) DEFAULT 'usd',
  created_at TIMESTAMP DEFAULT NOW(),
  updated_at TIMESTAMP DEFAULT NOW()
);数据库关系
文件管理架构
上传流程
文件管理功能
- 安全上传: 验证、大小限制和类型限制
 - 图像处理: 缩略图生成和优化
 - 访问控制: 基于用户的文件权限
 - 云存储: 与 Cloudflare R2/AWS S3 集成
 - 元数据跟踪: 文件信息和使用分析
 
支付系统架构
Stripe 集成
支付功能
- 订阅管理: 多种计划和计费周期
 - Webhook 处理: 实时支付事件处理
 - 发票生成: 自动计费和收据
 - 试用期: 可配置的免费试用功能
 - 支付恢复: 失败支付重试逻辑
 
测试架构
测试结构
- 单元测试: 组件逻辑和工具函数
 - 集成测试: API 端点和数据库操作
 - E2E 测试: 完整的用户工作流程和场景
 - 视觉测试: UI 一致性的截图比较
 - 性能测试: 负载测试和优化
 
国际化架构
i18n 结构
i18n 功能
- 基于路由的本地化: 自动语言检测
 - 消息管理: 集中化翻译文件
 - 动态内容: 运行时语言切换
 - SEO 优化: 本地化元标签和 URL
 - 回退处理: 默认语言回退
 
安全架构
安全层
- 
应用程序安全
- 使用令牌的 CSRF 保护
 - 使用清理的 XSS 防护
 - 使用 ORM 的 SQL 注入保护
 - API 端点的速率限制
 
 - 
身份认证安全
- 安全密码哈希 (bcrypt)
 - JWT 令牌验证
 - 使用安全 Cookie 的会话管理
 - OAuth 提供商集成
 
 - 
数据安全
- 数据库静态加密
 - 安全文件上传验证
 - 环境变量保护
 - API 密钥管理
 
 - 
基础设施安全
- HTTPS 强制执行
 - 安全头部 (CSP, HSTS)
 - 依赖漏洞扫描
 - 定期安全更新
 
 
性能优化
前端优化
- 代码分割: 动态导入和基于路由的分割
 - 图像优化: 使用 WebP 的 Next.js Image 组件
 - 缓存: 浏览器缓存和 CDN 优化
 - 包分析: Tree shaking 和死代码消除
 
后端优化
- 数据库索引: 优化查询和索引
 - API 缓存: 使用 Redis 的响应缓存
 - 连接池: 数据库连接优化
 - 懒加载: 按需资源加载
 
部署架构
生产部署
部署功能
- 自动化部署: GitHub Actions CI/CD 流水线
 - 环境管理: 测试和生产环境
 - 健康监控: 应用程序性能监控
 - 回滚功能: 部署问题的快速回滚
 - 可扩展性: 基于流量的自动扩展
 
监控与分析
应用程序监控
- 错误跟踪: 实时错误监控和警报
 - 性能指标: 响应时间和资源使用
 - 用户分析: 用户行为和参与度跟踪
 - 业务指标: 收入、转化率和增长指标
 
这种架构为构建可扩展、安全和可维护的 SaaS 应用程序提供了坚实的基础。模块化设计允许根据特定业务需求轻松扩展和自定义。