import { RepositoryExtendedInfo, RepositoryIndexedInfo, RepositoryIndexedData } from './classes'; import { DataError, ResponseError } from './errors'; export interface RepositoryObject { provideType(): string; id: string; } export interface RepositoryExtendedObject extends RepositoryObject { getExtended(): RepositoryExtendedInfo[]; } export interface RepositoryIndexedObject extends RepositoryExtendedObject { getIndexes(): RepositoryIndexedInfo[]; } export interface DatabaseProvider { createIfNotExists(collectionName: string, createCallback: (err?: Error) => void, index?: RepositoryIndexedInfo[]): void; createItem(collectionName: string, item: T, returnCallback: (data: T, err?: Error) => void, extended?: RepositoryExtendedInfo[]): void; readItem(collectionName: string, id: string, returnCallback: (data: T, err?: { general: Error; data: DataError; }) => void): void; readArray(collectionName: string, returnCallback: (data: T[], err?: Error) => void, extended?: RepositoryExtendedInfo[], queryLimit?: number): void; queryItem(collectionName: string, index: RepositoryIndexedInfo, data: RepositoryIndexedData, returnCallback: (data: T, err?: Error) => void): void; queryArray(collectionName: string, index: RepositoryIndexedInfo, data: RepositoryIndexedData, returnCallback: (data: T[], err?: Error) => void, extended?: RepositoryExtendedInfo[], queryLimit?: number): void; updateItem(collectionName: string, item: T, returnCallback: (data: T, err?: Error) => void, extended?: RepositoryExtendedInfo[]): void; removeItem(collectionName: string, id: string, returnCallback: (err?: Error) => void): void; } export interface IDatabaseProvider { createIfNotExists(collectionName: string, index?: RepositoryIndexedInfo[]): VoidResponsePromise; createItem(collectionName: string, item: T, extended?: RepositoryExtendedInfo[]): ResponsePromise; readItem(collectionName: string, id: string): ResponsePromise; readArray(collectionName: string, extended?: RepositoryExtendedInfo[], queryLimit?: number): ResponsePromise; queryItem(collectionName: string, index: RepositoryIndexedInfo, data: RepositoryIndexedData): ResponsePromise; queryArray(collectionName: string, index: RepositoryIndexedInfo, data: RepositoryIndexedData, extended?: RepositoryExtendedInfo[], queryLimit?: number): ResponsePromise; updateItem(collectionName: string, item: T, extended?: RepositoryExtendedInfo[]): ResponsePromise; removeItem(collectionName: string, id: string): VoidResponsePromise; } export interface EmailProvider { send(recipient_email: string, subject: string, body: string, callback: (err?: Error) => void): void; } export interface IEmailProvider { send(recipient_email: string, subject: string, body: string): VoidResponsePromise; } export interface ResponsePromise { start(): ResponsePromise; then(onfulfilled: (value: T) => void): ResponsePromise; catch(onrejected: (reason: ResponseError) => void): ResponsePromise; finally(onfinally: () => void): ResponsePromise; } export interface VoidResponsePromise { start(): VoidResponsePromise; then(onfulfilled: () => void): VoidResponsePromise; catch(onrejected: (reason: ResponseError) => void): VoidResponsePromise; finally(onfinally: () => void): VoidResponsePromise; }