Prisma и type-safe стек (tRPC)
Когда база меняется на лету, а поля переименовывают «по памяти» — падает прод. Prisma делает схему декларативной, tRPC — вызовы на клиенте и сервере типизированными.
Схема и миграции
// schema.prisma
model User {
id Int @id @default(autoincrement())
email String @unique
name String
posts Post[]
}
// npx prisma migrate dev → файл миграции + новый клиент
// npx prisma studio → UI по базе
Типизированный доступ
const user = await prisma.user.findUnique({
where: { email }
}); // user.name уже известен TypeScript
tRPC: функции вместо URL
// сервер
export const appRouter = router({
me: procedure.query(({ ctx }) => ctx.user)
});
// клиент — с типом того же роутера:
const me = await trpc.me.query(); // типы подтянутся сами
💡
Суть type-safe стека: последнее поле в БД и первое использование на клиенте проверены компилятором. Ошибка «такого поля нет» становится errоr ещё на dev, а не 500-й в проде.
ℹ️
Миграции обязаны быть в git (урок 11) и применяться к проду по их же истории. Никаких «я поменял колонку руками в prod-базе».