Skip to content
Download

Módulo SQL

O Bunstone fornece um módulo SQL nativo que encapsula o cliente SQL nativo do Bun. Ele foi projetado para ficar disponível globalmente após o registro.

Instalação

O módulo SQL faz parte do pacote principal @grupodiariodaregiao/bunstone.

Registro

Para usar o módulo SQL, você deve registrá-lo no seu AppModule raiz usando o método SqlModule.register().

Exemplo de registro

typescript
import { Module, SqlModule } from "@grupodiariodaregiao/bunstone";
import { AppController } from "./app.controller";

@Module({
  imports: [
    SqlModule.register({
      host: "localhost",
      port: 5432,
      username: "user",
      password: "password",
      database: "my_db",
      provider: "postgresql",
    }),
  ],
  controllers: [AppController],
})
export class AppModule {}

OU usando uma string de conexão:

typescript
@Module({
  imports: [
    SqlModule.register("postgresql://user:password@localhost:5432/my_db"),
  ],
})
export class AppModule {}

Uso

Depois de registrado, o SqlService fica disponível globalmente. Você pode injetá-lo em qualquer controller ou provider sem precisar importar o SqlModule nos módulos subsequentes.

Injetando o SqlService

typescript
import { Injectable, SqlService } from "@grupodiariodaregiao/bunstone";

@Injectable()
export class UserService {
  constructor(private readonly sqlService: SqlService) {}

  async getUsers() {
    // Consulta básica
    return await this.sqlService.query("SELECT * FROM users");
  }

  async getUserById(id: number) {
    // Consulta parametrizada por segurança
    return await this.sqlService.query("SELECT * FROM users WHERE id = ?", [
      id,
    ]);
  }
}

Disponibilidade global

Como o SqlModule é configurado com global: true, qualquer provider dentro dele (como o SqlService) fica disponível em toda a aplicação. Você só precisa registrá-lo uma vez no seu módulo raiz.

Exemplo prático

Veja como registrar e usar o módulo SQL em um controller:

ts
import {
  Module,
  Controller,
  Get,
  Post,
  Body,
  AppStartup,
  SqlModule,
  SqlService,
} from "../../index";

@Controller("users")
class UserController {
  constructor(private readonly sql: SqlService) {}

  @Get()
  async getUsers() {
    // Example query using SqlService (requires a running database)
    // return await this.sql.query('SELECT * FROM users');
    return [{ id: 1, name: "Database User" }];
  }

  @Post()
  async createUser(@Body() body: { name: string }) {
    // Example insertion
    // await this.sql.query('INSERT INTO users (name) VALUES (?)', [body.name]);
    return { success: true, user: body.name };
  }
}

@Module({
  imports: [
    SqlModule.register({
      provider: "postgresql",
      host: "localhost",
      port: 5432,
      username: "user",
      password: "password",
      database: "mydb",
    }),
  ],
  controllers: [UserController],
})
class AppModule {}

const app = await AppStartup.create(AppModule);
// app.listen(3000); // Commented out to prevent actual startup without DB
console.log("SQL Database example configured.");

Veja no GitHub

Distribuído sob a Licença MIT.