Drizzle Module¶
Overview¶
The Drizzle module provides Object-Relational Mapping (ORM) functionality for SQL databases in the BidScript application. It leverages Drizzle ORM to provide type-safe database access, schema definitions, and query building.
Key Components¶
Schema Definitions¶
The module includes schema definitions for various database tables:
// Example schema definition
import { pgTable, serial, text, timestamp } from "drizzle-orm/pg-core";
export const users = pgTable("users", {
id: serial("id").primaryKey(),
email: text("email").notNull().unique(),
name: text("name").notNull(),
passwordHash: text("password_hash").notNull(),
createdAt: timestamp("created_at").defaultNow().notNull(),
updatedAt: timestamp("updated_at").defaultNow().notNull(),
});
Database Client¶
The module configures the database client for connecting to PostgreSQL:
// Example database client configuration
import { drizzle } from "drizzle-orm/node-postgres";
import { Pool } from "pg";
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
});
export const db = drizzle(pool);
Migrations¶
The module supports database migrations for schema changes:
// Example migration
import { migrate } from "drizzle-orm/node-postgres/migrator";
// Run migrations
await migrate(db, { migrationsFolder: "./drizzle" });
Integration with Other Modules¶
The Drizzle module integrates with:
- Config Module: For database connection settings
- Auth Module: For user data storage
- Editor Module: For document data storage
Environment Variables¶
The module requires the following environment variables:
DATABASE_URL: Connection string for PostgreSQL
Usage Example¶
// Example of using the Drizzle module for database operations
import { db } from "../drizzle/client";
import { users } from "../drizzle/schema";
import { eq } from "drizzle-orm";
@Injectable()
export class UserService {
async findUserByEmail(email: string) {
return db.select().from(users).where(eq(users.email, email)).limit(1);
}
async createUser(userData: CreateUserDto) {
return db
.insert(users)
.values({
email: userData.email,
name: userData.name,
passwordHash: hashPassword(userData.password),
})
.returning();
}
}
Benefits¶
- Type-safe database access
- SQL query builder
- Schema validation
- Migration support
- Performance optimisation
Dependencies¶
drizzle-orm: Core ORM librarypg: PostgreSQL clientdrizzle-kit: CLI for migrations