47ng / 47ng/prisma-field-encryption
NestJS PrismaService and Extending it With Encryption
- Lenguaje dominante
- TypeScript
- Estrellas
- 306
- Forks
- 40
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
I am trying to encrypt a particular field in my Prisma model.
Here is the full codes of my `PrismaService` residing my in NestJS's `PrismaModule`:
```
import { Injectable } from '@nestjs/common';
import { PrismaClient } from '@prisma/client'
import { OnModuleDestroy, OnModuleInit } from '@nestjs/common';
import { fieldEncryptionExtension } from 'prisma-field-encryption';
@Injectable()
export class PrismaService extends PrismaClient implements OnModuleDestroy, OnModuleInit {
constructor() {
super({
log: ['query'],
errorFormat: 'pretty',
});
// Extend PrismaClient with fieldEncryptionExtension
this.$extends(fieldEncryptionExtension()); // extending `PrismaClient`
}
async onModuleInit() {
await this.$connect();
}
async onModuleDestroy() {
await this.$disconnect();
}
}
```
On my `prisma.schema`:
```
model User {
telegramId Int @id @map("telegram_id")
mnemonics String @unique @db.VarChar(1024) /// @encrypted
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
}
```
Within my database, after using `prismaService.user.create`, the resulting entry in the PostgreSQL database is NOT encrypted.
```
import { Injectable } from '@nestjs/common';
import { User as UserModel } from '@prisma/client';
import { PrismaService } from 'src/prisma/services/prisma/prisma.service';
import { Mnemonic } from 'src/common/entities/mnemonic/mnemonic';
@Injectable()
export class AuthService {
constructor(private readonly prismaSvc: PrismaService) {}
async signUp(telegramId: number): Promise> {
const mnemonic = Mnemonic.createNew()
const user = await this.prismaSvc.user.create({data: {telegramId: telegramId, mnemonics: mnemonic.toString()}, select: {telegramId: true}});
return user
}
}
```
Any idea how does it work? Thank you.
Guía de contribución
Evaluación
Este issue todavía no se ha evaluado.