Database
Configure a instância principal, o adapter, o logger e o cache de collections.
Database
A classe Database é a fachada principal do @tile.js/database.
Ela é responsável por:
- escolher o backend de persistência
- centralizar o lifecycle da conexão
- expor
collection()emodel() - manter cache das collections por nome
- aplicar a configuração de logger
Uso mais comum
import { Database } from "@tile.js/database";
import { memberSchema, type Member } from "./schema/member.ts";
const connection = new Database({
dbName: "app",
storage: "workspace",
logger: {
enabled: true,
colors: true,
},
});
export const database = Object.assign(connection, {
member: connection.collection<Member>("member", memberSchema),
});import { Database } from "@tile.js/database";
import { mongodbAdapter } from "@tile.js/database/adapters/mongodb";
import { MongoClient } from "mongodb";
import { memberSchema, type Member } from "./schema/member.ts";
const client = new MongoClient("mongodb://127.0.0.1:27017");
const connection = new Database({
storage: mongodbAdapter(client, {
dbName: "app",
manageClient: true,
}),
});
export const database = Object.assign(connection, {
member: connection.collection<Member>("member", memberSchema),
});Regra do construtor
Se storage receber um StorageAdapter, não passe dbName nem compression no new Database(...). Essas opções deixam de ser válidas no construtor e devem ser configuradas no adapter.
Configuração
Prop
Type
collection() e model()
As duas APIs são equivalentes:
const userA = connection.collection("user", userSchema);
const userB = connection.model("user", userSchema);
console.log(userA === userB); // trueVocê também pode recuperar a collection já registrada:
const user = connection.getCollection("user");
const userAlias = connection.getModel("user");O cache é feito por nome da collection. Se você registrar o mesmo nome duas vezes, a primeira instância será reutilizada.
Estrutura recomendada
Para a maior parte dos projetos, concentrar a instância em src/database/index.ts e os schemas em src/database/schema/*.ts já deixa o bootstrap claro e previsível.
Responsabilidades da instância
Backend
Decide se a persistência será local, MongoDB, Mongoose ou um adapter próprio.
Collections
Garante que cada nome de collection tenha uma única instância ativa por Database.
Lifecycle
Encapsula connect(), disconnect() e o flush pendente quando o adapter suporta isso.
Logger
Mantém mensagens de debug, info e erro no mesmo ponto de configuração.
Próximos passos
Lifecycle e estado de conexão
Entenda quando chamar connect() e disconnect(), e o que isConnected() realmente informa.
Escolher um adapter
Compare o adapter local, MongoDB, Mongoose e o contrato de adapters customizados.
Definir o schema
Depois da instância principal, o próximo passo é modelar os documentos.