FirebaseAbstract
A classe FirebaseAbstract
é uma classe abstrata que fornece uma interface para realizar operações CRUD em coleções do Firebase Firestore.
Construtor
O construtor da classe FirebaseAbstract
requer o nome da coleção com a qual se deseja trabalhar.
public constructor(collectionName: string);
Uso
Para usar este repositório, crie uma nova classe que estenda a classe FirebaseAbstract
e defina o nome da coleção como um parâmetro do construtor:
import { FirebaseAbstract } from '@burand/functions/firestore';
import { singleton } from 'tsyringe';
import { FirestoreCollecionName } from '@config/firestore-collection-name.js';
import { User } from '@models/user.js';
@singleton()
export class UserRepository extends FirebaseAbstract<User> {
constructor() {
super(FirestoreCollecionName.USERS);
}
}
Agora você pode usar os métodos básicos da classe FirebaseAbstract
para gerenciar documentos na coleção users.
Métodos disponíveis
/**
* A interface do serviço Cloud Firestore.
*
* Não chame esse construtor diretamente.
* Em vez disso, crie um repositório e estenda o comportamento
*
* @template T - O tipo de modelo que representa os documentos armazenados no Firestore.
*/
abstract class FirebaseAbstract<T extends Model> {
protected collectionName: string;
/**
* @param collectionName - Nome da coleção no Firestore
*/
constructor(collectionName: string);
/**
* Adiciona um novo documento ao Firestore.
*
* @param data - Um objeto contendo os dados do novo documento.
* @param options - Um objeto para configurar o comportamento de escrita.
* @returns Uma `Promise` resolvida com o id do documento criado.
*/
add(data: AddDocument<T>, options?: WriteOptions): Promise<string>;
/**
* Atualiza um documento existente no Firestore.
*
* @param data - Um objeto contendo os dados a serem alterados.
* @param options - Um objeto para configurar o comportamento de escrita.
* @returns Uma `Promise` resolvida vazia.
*/
update(data: UpdateDocument<T>, options?: WriteOptions): Promise<void>;
/**
* Grava no documento referenciado pelo `id` especificado. Se
* o documento ainda não existe, ele será criado. Se você fornecer `merge`
* ou `mergeFields`, os dados fornecidos podem ser mesclados em um documento existente.
*
* @param data - Um objeto contendo os dados a serem adicionados ou alterados.
* @param options - Um objeto para configurar o comportamento de escrita.
* @returns Uma `Promise` resolvida vazia.
*/
set(data: SetDocument<T>, options?: SetOptions & WriteOptions): Promise<void>;
/**
* Exclui o documento referenciado pelo `id` especificado.
*
* @param id - O id do documento a ser excluído.
* @returns Uma `Promise` resolvida vazia.
*/
delete(id: string): Promise<void>;
/**
* Busca um documento pelo seu id.
*
* @param id - O id do documento a ser buscado.
* @param options - Um objeto para configurar o comportamento de leitura.
* @throws {DocumentNotFoundError}
* @returns Uma `Promise` resolvida com o conteúdo do documento.
*/
getById<U extends T = T>(id: string, options?: ReadOptions): Promise<U>;
/**
* Busca documentos por seus Ids.
*
* @param ids - Os ids dos documentos a serem buscados.
* @param options - Um objeto para configurar o comportamento de leitura.
* @returns Uma `Promise` resolvida com o conteúdo dos documentos.
*/
getByIds<U extends T = T>(ids: string[], options?: ReadOptions): Promise<U[]>;
/**
* Busca todos os documentos da coleção.
*
* @param options - Um objeto para configurar o comportamento de leitura.
* @returns Uma `Promise` resolvida com o conteúdo dos documentos.
*/
getAll<U extends T = T>(options?: ReadOptions): Promise<U[]>;
/**
* Recupera documentos da coleção com base no campo, operador e valor fornecidos, bem como em opções adicionais.
*
* @async
* @param field - A chave do campo pelo qual os documentos devem ser filtrados.
* @param operator - O operador a ser usado na filtragem (por exemplo, "==" ou ">").
* @param value - O valor a ser comparado na filtragem.
* @param limit - O número máximo de documentos a serem retornados.
* @param orderBy - A chave do campo pelo qual os resultados devem ser ordenados.
* @param orderByDirection - A direção na qual os resultados devem ser ordenados.
* @param options - As opções adicionais para a leitura dos documentos.
* @returns Uma `Promise` resolvida com um array de documentos `T`.
*/
protected getWhere<U extends T = T>(
field: keyof T,
operator: WhereFilterOp,
value: unknown,
limit?: number | null,
orderBy?: keyof T | null,
orderByDirection?: OrderByDirection | null,
options?: ReadOptions
): Promise<U[]>;
/**
* Recupera vários documentos da coleção com base nos filtros fornecidos e opções adicionais.
*
* @async
* @param filters - Um array de objetos de filtro Firebase, cada um contendo um campo, um operador e um valor.
* @param limit - O número máximo de documentos a serem retornados.
* @param orderBy - A chave do campo pelo qual os resultados devem ser ordenados.
* @param orderByDirection - A direção na qual os resultados devem ser ordenados.
* @param options - As opções adicionais para a leitura dos documentos.
* @returns Uma `Promise` resolvida com um array de documentos `T`.
*/
protected getWhereMany<U extends T = T>(
filters: FirebaseWhere<T>[],
limit?: number | null,
orderBy?: keyof T | null,
orderByDirection?: OrderByDirection | null,
options?: ReadOptions
): Promise<U[]>;
/**
* Recupera o primeiro documento da coleção com base no campo, operador e valor fornecidos, bem como em opções adicionais.
*
* @async
* @param field - A chave do campo pelo qual o documento deve ser filtrado.
* @param operator - O operador a ser usado na filtragem (por exemplo, "==" ou ">").
* @param value - O valor a ser comparado na filtragem.
* @param orderBy - A chave do campo pelo qual os resultados devem ser ordenados.
* @param orderByDirection - A direção na qual os resultados devem ser ordenados.
* @param options - As opções adicionais para a leitura do documento.
* @returns Uma `Promise` resolvida com um documento `T` ou `null` se nenhum documento for encontrado.
*/
protected getOneWhere<U extends T = T>(
field: keyof T,
operator: WhereFilterOp,
value: unknown,
orderBy?: keyof T | null,
orderByDirection?: OrderByDirection | null,
options?: ReadOptions
): Promise<U | null>;
/**
* Recupera o primeiro documento da coleção com base nos filtros fornecidos e opções adicionais.
*
* @async
* @param filters - Um array de objetos de filtro Firebase, cada um contendo um campo, um operador e um valor.
* @param orderBy - A chave do campo pelo qual os resultados devem ser ordenados.
* @param orderByDirection - A direção na qual os resultados devem ser ordenados.
* @param options - As opções adicionais para a leitura do documento.
* @returns Uma `Promise` resolvida com um documento `T` ou `null` se nenhum documento for encontrado.
*/
protected getOneWhereMany<U extends T = T>(
filters: FirebaseWhere<T>[],
orderBy?: keyof T | null,
orderByDirection?: OrderByDirection | null,
options?: ReadOptions
): Promise<U | null>;
/**
* Realiza uma consulta no Firestore com base nas restrições de consulta fornecidas.
*
* @param query - A instância de `Query` a ser usada como base para as restrições.
* @param options - Um objeto para configurar o comportamento de leitura.
* @returns Uma `Promise` resolvida com um array de documentos `T`.
*/
protected getDocs<U extends T = T>(query: Query, options?: ReadOptions): Promise<U[]>;
/**
* Obtém uma instância `CollectionReference` que se refere à coleção no caminho absoluto especificado por `collectionName`.
*
* @returns A instância de `CollectionReference`.
*/
protected collection(): CollectionReference;
}
Exceções
As seguintes exceções podem ser lançadas por esta classe:
- DocumentNotFoundError: Lançada quando um documento não é encontrado na coleção.