@nxtoai/brahma
v1.0.17
Published
A flexible Prisma service for NestJS applications
Downloads
21
Readme
Gati - Database Audit System for NxtoAI Microservices
A flexible and powerful database audit system for NestJS microservices, providing automatic audit logging and change tracking.
Installation
npm install @nxtoai/gatiConfiguration
1. Database Setup
Each microservice should have its own database URL in its .env file:
# User Service
DATABASE_URL="postgresql://user:password@localhost:5432/user_db"
# Order Service
DATABASE_URL="postgresql://user:password@localhost:5432/order_db"
# Payment Service
DATABASE_URL="postgresql://user:password@localhost:5432/payment_db"2. Import the Module
In each microservice's module:
import { Module } from '@nestjs/common';
import { BrahmaModule } from '@nxtoai/gati';
@Module({
imports: [
BrahmaModule.forRoot({
databaseUrl: process.env.DATABASE_URL,
log: ['error', 'warn'],
errorFormat: 'pretty',
maxWait: 5000,
timeout: 10000,
isolationLevel: 'ReadCommitted'
}),
],
})
export class AppModule {}3. Initialize Audit System
Run the following SQL commands in each microservice's database:
-- Create audit schema and tables
\i path/to/audit_triggers.sql
-- Add audit trigger to your tables
SELECT audit.add_audit_trigger('your_table_name');Usage
1. Inject BrahmaService
import { Injectable } from '@nestjs/common';
import { BrahmaService } from '@nxtoai/gati';
@Injectable()
export class YourService {
constructor(private readonly brahma: BrahmaService) {}
async createRecord(data: any) {
// With audit (default)
return await this.brahma.create('your_table', {
data: {
...data,
// Audit fields will be automatically added
}
});
}
async createRecordWithoutAudit(data: any) {
// Without audit
return await this.brahma.create('your_table', {
data: {
...data
}
}, false);
}
async updateRecord(id: string, data: any) {
// With audit (default)
return await this.brahma.update('your_table', {
where: { id },
data
});
}
async updateRecordWithoutAudit(id: string, data: any) {
// Without audit
return await this.brahma.update('your_table', {
where: { id },
data
}, false);
}
async deleteRecord(id: string) {
// With audit (default)
return await this.brahma.delete('your_table', {
where: { id }
});
}
async deleteRecordWithoutAudit(id: string) {
// Without audit
return await this.brahma.delete('your_table', {
where: { id }
}, false);
}
}2. Set Audit Context
Create a middleware to set the audit context:
