All files / admin/firestore FirestoreCollection.ts

100% Statements 9/9
100% Branches 0/0
100% Functions 4/4
100% Lines 8/8

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29  1x     1x         25x 25x       18x       7x 7x 7x                
import type { Firestore } from 'firebase-admin/firestore';
import { FirestoreDocument } from './FirestoreDocument';
import type { FirestorePath } from '../../shared/firestore/FirestorePath';
 
export class FirestoreCollection<
    Documents extends Record<string, FirestoreDocument<any, any>>
> {
 
    public constructor(
        private readonly firestore: Firestore,
        private readonly path: FirestorePath
    ) {}
 
    public document<Key extends keyof Documents & string>(key: Key): Documents[Key] {
        return new FirestoreDocument(this.firestore, this.path.appending(key)) as Documents[Key];
    }
 
    public async remove(): Promise<void> {
        const collection = this.firestore.collection(this.path.fullPath);
        const documents = await collection.listDocuments();
        await Promise.all(documents.map(async document => document.delete()));
    }
}
 
export namespace FirestoreCollection {
 
    export type DocumentsOf<Collection extends FirestoreCollection<any>> = Collection extends FirestoreCollection<infer Documents> ? Documents : never;
}