1 import * as Sequelize from 'sequelize'
2 import * as Promise from 'bluebird'
4 // Don't use barrel, import just what we need
5 import { Pod as FormattedPod } from '../../../shared/models/pods/pod.model'
6 import { ResultList } from '../../../shared/models/result-list.model'
8 export namespace PodMethods {
9 export type ToFormattedJSON = (this: PodInstance) => FormattedPod
11 export type CountAll = () => Promise<number>
13 export type IncrementScores = (ids: number[], value: number) => Promise<[ number, PodInstance[] ]>
15 export type List = () => Promise<PodInstance[]>
17 export type ListForApi = (start: number, count: number, sort: string) => Promise< ResultList<PodInstance> >
19 export type ListAllIds = (transaction: Sequelize.Transaction) => Promise<number[]>
21 export type ListRandomPodIdsWithRequest = (limit: number, tableWithPods: string, tableWithPodsJoins: string) => Promise<number[]>
23 export type ListBadPods = () => Promise<PodInstance[]>
25 export type Load = (id: number) => Promise<PodInstance>
27 export type LoadByHost = (host: string) => Promise<PodInstance>
29 export type RemoveAll = () => Promise<number>
31 export type UpdatePodsScore = (goodPods: number[], badPods: number[]) => void
34 export interface PodClass {
35 countAll: PodMethods.CountAll
36 incrementScores: PodMethods.IncrementScores
38 listForApi: PodMethods.ListForApi
39 listAllIds: PodMethods.ListAllIds
40 listRandomPodIdsWithRequest: PodMethods.ListRandomPodIdsWithRequest
41 listBadPods: PodMethods.ListBadPods
43 loadByHost: PodMethods.LoadByHost
44 removeAll: PodMethods.RemoveAll
45 updatePodsScore: PodMethods.UpdatePodsScore
48 export interface PodAttributes {
51 score?: number | Sequelize.literal // Sequelize literal for 'score +' + value
54 export interface PodInstance extends PodClass, PodAttributes, Sequelize.Instance<PodAttributes> {
58 toFormattedJSON: PodMethods.ToFormattedJSON,
61 export interface PodModel extends PodClass, Sequelize.Model<PodInstance, PodAttributes> {}