import * as Sequelize from 'sequelize' import * as Promise from 'bluebird' import { AbstractRequestClass } from './abstract-request-interface' import { PodInstance, PodAttributes } from '../pod' import { RequestEndpoint } from '../../../shared/models/request-scheduler.model' export type RequestsGrouped = { [ podId: number ]: { request: RequestInstance, pod: PodInstance }[] } export namespace RequestMethods { export type CountTotalRequests = () => Promise export type ListWithLimitAndRandom = (limitPods: number, limitRequestsPerPod: number) => Promise export type RemoveWithEmptyTo = () => Promise export type RemoveAll = () => Promise } export interface RequestClass extends AbstractRequestClass { countTotalRequests: RequestMethods.CountTotalRequests listWithLimitAndRandom: RequestMethods.ListWithLimitAndRandom removeWithEmptyTo: RequestMethods.RemoveWithEmptyTo removeAll: RequestMethods.RemoveAll } export interface RequestAttributes { request: object endpoint: RequestEndpoint } export interface RequestInstance extends RequestClass, RequestAttributes, Sequelize.Instance { id: number createdAt: Date updatedAt: Date setPods: Sequelize.HasManySetAssociationsMixin Pods: PodInstance[] } export interface RequestModel extends RequestClass, Sequelize.Model {}