import { firestore } from "firebase-admin" ; import { DocumentData , DocumentReference , FirebaseAdmin , Query , QuerySnapshot , WriteResult } from "../client/firebase-admin" ; export interface IWebhook { type : string ; id : number ; name : string ; active : boolean ; events : string [ ] ; config : { url : string ; contentType ? : 'form' | 'json' ; secret ? : string ; insecureSsl ? : '0' | '1' ; } ; updatedAt : firestore . Timestamp ; createdAt : firestore . Timestamp ; url : string ; testUrl : string ; pingUrl : string ; lastResponse : { code ? : any ; status : string ; message ? : any ; } ; } export interface IRepository { id : number ; fullName : string ; uid ? : string ; webhook ? : IWebhook ; } export class RepositoryModel implements IRepository { id : number ; fullName : string ; uid ? : string ; webhook ? : IWebhook ; public static getRepositoryReference ( uid ) { return FirebaseAdmin . firestore ( ) . collection ( 'repositories' ) . doc ( uid ) ; } public static getRepositoryReferenceById ( id ) { return FirebaseAdmin . firestore ( ) . collection ( 'repositories' ) . where ( 'id' , '==' , id ) . limit ( 1 ) ; } public static async getRepositoryById ( id ) { const repositoriesSnapshot = await this . getRepositoryReferenceById ( id ) . get ( ) ; if ( repositoriesSnapshot . empty ) { return null ; } else { return repositoriesSnapshot . docs . shift ( ) . data ( ) ; } } public static async getRepositoryUidById ( id ) { const repositoriesSnapshot = await this . getRepositoryReferenceById ( id ) . get ( ) ; if ( repositoriesSnapshot . empty ) { return null ; } else { return repositoriesSnapshot . docs . shift ( ) . id ; } } public static async saveRepository ( repository ) { return await FirebaseAdmin . firestore ( ) . collection ( 'repositories' ) . doc ( repository . uid ) . set ( repository , { merge : true } ) ; } }