47ng / 47ng/prisma-field-encryption

NestJS PrismaService and Extending it With Encryption

Abierto
#78 9 comentarios 0 reacciones 0 asignados Ver en GitHub
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

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.