@happ-integ/db
Универсальная абстракция базы данных (D1 / Neon).
Установка
bash
pnpm add @happ-integ/dbПровайдеры
| Провайдер | Описание | Когда использовать |
|---|---|---|
d1 | Cloudflare D1 (SQLite) | По умолчанию, для большинства случаев |
neon | Neon PostgreSQL | Сложные запросы, транзакции |
Использование
D1 (по умолчанию)
typescript
import { DB } from "@happ-integ/db";
const db = new DB({
provider: "d1",
project: "sofa",
d1: env.DB,
});Neon
typescript
const db = new DB({
provider: "neon",
project: "sofa",
});CRUD операции
typescript
// Insert
await db.insert("calls", {
id: "123",
phone: "+380501234567",
status: "pending",
});
// Insert Many
await db.insertMany("calls", [
{ id: "1", phone: "..." },
{ id: "2", phone: "..." },
]);
// Select
const calls = await db.select<Call>("calls", { status: "pending" });
// Select с опциями
const recentCalls = await db.select<Call>("calls", { status: "completed" }, { limit: 10, orderBy: "created_at DESC" });
// Update
await db.update("calls", { status: "completed" }, { id: "123" });
// Delete
await db.delete("calls", { id: "123" });Raw SQL
typescript
const result = await db.query<Call>("SELECT * FROM calls WHERE status = ? AND created_at > ?", [
"pending",
"2024-01-01",
]);Health Check
typescript
const isHealthy = await db.healthCheck();API
DB
typescript
new DB(config: DBConfig)Config:
| Параметр | Тип | Описание |
|---|---|---|
provider | "d1" | "neon" | Провайдер (default: "d1") |
project | string | Имя проекта (для префиксов) |
d1 | D1Database | D1 binding (требуется для D1) |
Методы
insert(table, data): Promise<void>
insertMany(table, data[]): Promise<void>
select<T>(table, where?, options?): Promise<T[]>
update(table, data, where): Promise<void>
delete(table, where): Promise<void>
query<T>(sql, params?): Promise<IQueryResult<T>>
healthCheck(): Promise<boolean>
getProvider(): DBProvider
Когда использовать напрямую D1Client/NeonClient
typescript
import { D1Client } from "@happ-integ/d1";
import { NeonClient } from "@happ-integ/neon";
// Для сложных SQL запросов с JOIN, подзапросами
// Для транзакций (Neon)
// Для batch операций (D1)
// Для специфичных возможностей провайдера