news 2026/7/14 15:01:05

如何使用Prisma tRPC Generator实现多租户与软删除功能

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何使用Prisma tRPC Generator实现多租户与软删除功能

如何使用Prisma tRPC Generator实现多租户与软删除功能

【免费下载链接】prisma-trpc-generatorPrisma 2+ generator to emit fully implemented tRPC routers项目地址: https://gitcode.com/gh_mirrors/pr/prisma-trpc-generator

Prisma tRPC Generator是一款强大的代码生成工具,能够自动生成基于Prisma模型的tRPC路由,帮助开发者快速构建类型安全的API。本文将详细介绍如何利用该工具实现多租户架构与软删除功能,让你的应用具备企业级数据隔离与数据恢复能力。

多租户与软删除:现代应用的必备功能

在SaaS应用开发中,多租户架构能够让多个客户(租户)共享同一应用实例,同时保持数据隔离;而软删除功能则允许"删除"数据时仅标记状态而非真正删除,为数据恢复提供可能。Prisma tRPC Generator通过简洁的配置即可实现这两项关键功能,大幅减少重复代码。

多租户架构的核心价值

  • 数据隔离:确保不同租户数据完全隔离,满足合规要求
  • 资源共享:降低服务器资源成本,提高运维效率
  • 按需扩展:支持租户级别的功能定制与资源分配

软删除的业务优势

  • 数据安全:防止误删除导致的数据丢失
  • 审计追踪:保留完整的操作历史记录
  • 业务分析:可基于历史数据进行趋势分析

准备工作:环境搭建与依赖安装

首先确保你的开发环境满足以下要求:

  • Node.js 14.0+
  • Prisma 2.0+
  • tRPC 9.0+

通过以下命令克隆项目仓库并安装依赖:

git clone https://gitcode.com/gh_mirrors/pr/prisma-trpc-generator cd prisma-trpc-generator pnpm install

实现多租户功能的完整步骤

1. 配置多租户模型

在Prisma schema文件中添加租户标识字段,通常命名为tenantId

// prisma/schema.prisma model Post { id Int @id @default(autoincrement()) title String content String? tenantId Int // 多租户标识 createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime? // 软删除标识 }

2. 启用多租户生成器

在生成器配置中添加多租户选项:

// prisma/trpc.config.json { "generator": { "tenantKey": "tenantId", "softDeleteKey": "deletedAt" } }

3. 使用多租户服务

生成的服务会自动处理租户隔离,无需手动添加过滤条件:

// examples/use-services-tenancy.ts async function runForTenant(prisma: PrismaClient, tenantId: number) { const ctx: Context & { tenantId: number } = { prisma, user: null, tenantId }; const s = makeServices(ctx); // 自动应用租户过滤 const posts = await s.post.findMany({}); console.log(`Tenant ${tenantId} posts count:`, posts.length); }

配置软删除功能

1. 设置软删除字段

在数据模型中添加软删除字段(通常命名为deletedAt):

// prisma/schema.prisma model Post { // ...其他字段 deletedAt DateTime? @db.DateTime // 软删除时间戳 }

2. 软删除查询示例

生成的tRPC路由会自动排除已"删除"的记录:

// 默认查询不会返回软删除数据 const activePosts = await s.post.findMany({}); // 如需包含软删除数据,使用withDeleted选项 const allPosts = await s.post.findMany({}, { withDeleted: true });

3. 软删除实现原理

生成器通过中间件自动处理软删除逻辑:

// src/prisma-generator.ts if (cfg.softDeleteKey) { // 删除操作转为更新 delete data[cfg.softDeleteKey]; // 查询时自动过滤已删除数据 input.where[cfg.softDeleteKey] = null; }

多租户与软删除的路由实现

Prisma tRPC Generator会为每个模型生成完整的CRUD路由,自动应用租户隔离和软删除过滤。以下是生成的路由示例:

从上图可以看到,生成的路由包含了各种数据库操作方法,所有操作都会自动考虑租户上下文和软删除状态,确保数据安全与隔离。

测试多租户与软删除功能

项目提供了专门的测试文件来验证多租户和软删除功能:

// tests/feature-tenancy-soft-delete.test.ts describe('feature: tenancy + soft-delete hooks', () => { const outDir = generateRouters('tenancy'); // 测试用例验证租户隔离和软删除行为 });

运行测试命令:

pnpm test tests/feature-tenancy-soft-delete.test.ts

高级配置与最佳实践

自定义租户标识符

如果需要使用不同的租户标识字段名,可在配置中自定义:

// src/helpers.ts interface GeneratorConfig { softDeleteKey?: string; // 自定义软删除字段名 tenantKey?: string; // 自定义租户字段名 }

性能优化建议

  • 为租户字段和软删除字段添加索引
  • 对大型租户数据实现分表策略
  • 使用缓存减少重复查询

安全注意事项

  • 始终在服务端验证租户身份,防止越权访问
  • 定期清理真正不再需要的软删除数据
  • 对敏感操作进行审计日志记录

总结

通过Prisma tRPC Generator,开发者可以轻松实现多租户和软删除功能,大幅减少样板代码,专注于业务逻辑开发。本文介绍的方法已经在实际项目中得到验证,你可以直接参考examples/use-services-tenancy.ts中的示例代码快速集成到自己的项目中。

无论是构建SaaS平台还是企业内部系统,多租户与软删除都是提升系统安全性和可靠性的重要手段,而Prisma tRPC Generator让这些复杂功能的实现变得简单高效。

【免费下载链接】prisma-trpc-generatorPrisma 2+ generator to emit fully implemented tRPC routers项目地址: https://gitcode.com/gh_mirrors/pr/prisma-trpc-generator

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 15:00:27

Vitedge开发环境搭建终极指南:HMR支持与热重载技巧详解

Vitedge开发环境搭建终极指南:HMR支持与热重载技巧详解 【免费下载链接】vitedge Edge-side rendering and fullstack Vite framework 项目地址: https://gitcode.com/gh_mirrors/vi/vitedge 想要快速搭建Vitedge开发环境并充分利用其强大的HMR(热…

作者头像 李华
网站建设 2026/7/14 15:00:03

小程序计算机毕设之成人网课资源管理与在线学习平台设计 基于 Android 的终身教育资源服务系统(完整前后端 代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/7/14 14:59:10

【信息科学与工程学】计算机科学与自动化——第四五十一篇 数据仓库设计00

数据仓库设计知识体系框架 编号 概念/特征/模式/方法/算法名称 伪代码/数学方程式/核心描述 核心数学描述/规律 关键参数/变量 物理/工程意义与控制目标 典型应用场景 1​ 数据仓库​ 一个面向主题的、集成的、非易失的且随时间变化的数据集合,用于支持管理决策。 W…

作者头像 李华
网站建设 2026/7/14 14:59:00

摔跤跌倒检测数据集-9,354 张图片 体育安全监测系统 智能运动防护设备 老年人跌倒监护 工业安全监控 智能体育教学 医疗康复辅助

摔跤跌倒检测数据集-9,354 张图片-文章末添加wx领取数据集📦 已发布目标检测数据集合集(持续更新)⚡ 摔跤跌倒检测数据集介绍📌 数据集概览包含类别🎯 应用场景🖼 数据样本展示使用建议🌟 数据集…

作者头像 李华
网站建设 2026/7/14 14:58:21

ComfyUI深度解析:如何构建最强大的AI内容创作工作流

ComfyUI深度解析:如何构建最强大的AI内容创作工作流 【免费下载链接】ComfyUI The most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface. 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI 您是否曾为A…

作者头像 李华
网站建设 2026/7/14 14:57:01

三分钟掌握ytDownloader:你的全网视频下载全能助手

三分钟掌握ytDownloader:你的全网视频下载全能助手 【免费下载链接】ytDownloader Desktop App for downloading Videos and Audios from hundreds of sites 项目地址: https://gitcode.com/GitHub_Trending/yt/ytDownloader 你是否曾在深夜发现一个精彩的Yo…

作者头像 李华