Skip to content

Database

The lts add database command in LightTs hooks up TypeORM for PostgreSQL, complete with migrations, seeders, and dummy data support. It generates clean, customizable database configurations using standard Node.js libraries, keeping your data layer flexible and transparent.

  1. Run the Command

    Terminal window
    lts add database
  2. Select Database

    Choose PostgreSQL (other databases like MySQL, MariaDB, or MongoDB may be supported in future updates).

  3. Configure Options

    Enable migrations, seeders, or dummy data as prompted.

  4. Set Up Config

    Update .env with your database credentials.

src/database/index.ts
import { db } from '@/config';
import path from 'path';
import { DataSource } from 'typeorm';
import { SnakeNamingStrategy } from 'typeorm-naming-strategies';
export const AppDataSource = new DataSource({
type: 'postgres',
host: db.host,
port: db.port,
username: db.user,
password: db.pwd,
database: db.name,
synchronize: false,
logging: false,
entities: [path.join(__dirname, '/entities/**/*.entity.{ts,js}')],
migrations: [path.join(__dirname, '/migrations/**/*.{ts,js}')],
subscribers: [],
migrationsTableName: 'migrations',
namingStrategy: new SnakeNamingStrategy(),
});
export async function createConnection() {
if (!AppDataSource.isInitialized) { try { await AppDataSource.initialize(); } catch (error) { throw error; } }
}
src/database/entities/user.entity.ts
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
email: string;
@Column()
password: string;
}
  1. Create Migration

    Generate a migration script to manage schema changes:

    Terminal window
    npm run typeorm migration:create src/database/migrations/sample.ts

    Example migration:

    src/database/migrations/sample.ts
    import { MigrationInterface, QueryRunner } from 'typeorm';
    export class SampleMigration implements MigrationInterface {
    async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(`
    CREATE TABLE user (
    id SERIAL PRIMARY KEY,
    name VARCHAR NOT NULL,
    email VARCHAR NOT NULL,
    password VARCHAR NOT NULL
    )
    `);
    }
    async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(`DROP TABLE user`);
    }
    }
  2. Create Seeder

    Generate a seeder script for initial data:

    Terminal window
    npm run typeorm migration:create src/database/seeders/scripts/sample.ts

    Example seeder:

    src/database/seeders/scripts/sample.ts
    import { MigrationInterface, QueryRunner } from 'typeorm';
    export class SampleSeeder implements MigrationInterface {
    async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(`
    INSERT INTO user (name, email, password)
    VALUES ('Admin', '[email protected]', 'secure123')
    `);
    }
    async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(`DELETE FROM user WHERE email = '[email protected]'`);
    }
    }
  3. Create Dummy Data

    Generate a dummy data script for testing:

    Terminal window
    npm run typeorm migration:create src/database/dummy/scripts/sample.ts

    Example dummy data:

    src/database/dummy/scripts/sample.ts
    import { MigrationInterface, QueryRunner } from 'typeorm';
    export class SampleDummy implements MigrationInterface {
    async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(`
    INSERT INTO user (name, email, password)
    VALUES
    ('Test User', '[email protected]', 'test123'),
    ('Demo User', '[email protected]', 'demo123')
    `);
    }
    async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(`DELETE FROM user WHERE email IN ('[email protected]', '[email protected]')`);
    }
    }
  4. Run Scripts

    Apply migrations, seeders, or dummy data:

    Terminal window
    npm run migrate
    npm run seed
    npm run dummy
src/database/seeders/index.ts
import { db } from '@/config';
import path from 'path';
import { DataSource } from 'typeorm';
import { SnakeNamingStrategy } from 'typeorm-naming-strategies';
export const seedsDatasource = new DataSource({
type: 'postgres',
host: db.host,
port: db.port,
username: db.user,
password: db.pwd,
database: db.name,
synchronize: false,
logging: false,
entities: [path.join(__dirname, '../entities/**/*.entity.{ts,js}')],
migrations: [path.join(__dirname, '/scripts/**/*.{ts,js}')],
subscribers: [],
migrationsTableName: 'migration_seeders',
namingStrategy: new SnakeNamingStrategy(),
});
  • Set synchronize: false in production to prevent schema changes.
  • Customize entities, migrations, seeders, and dummy data in src/database/.
  • Use npm run typeorm migration:create to generate new scripts for migrations, seeders, or dummy data.
  • Run scripts with npm run migrate, npm run seed, or npm run dummy for development, and npm run build:migrate or npm run build:seed for production.