Skip to content

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 library
  • pg: PostgreSQL client
  • drizzle-kit: CLI for migrations