1 import * as Sequelize from 'sequelize'
2 import * as Promise from 'bluebird'
4 // Don't use barrel, import just what we need
5 import { ResultList } from '../../../shared/models/result-list.model'
7 export namespace ServerMethods {
8 export type CountAll = () => Promise<number>
10 export type IncrementScores = (ids: number[], value: number) => Promise<[ number, ServerInstance[] ]>
12 export type List = () => Promise<ServerInstance[]>
14 export type ListForApi = (start: number, count: number, sort: string) => Promise< ResultList<ServerInstance> >
16 export type ListAllIds = (transaction: Sequelize.Transaction) => Promise<number[]>
18 export type ListRandomServerIdsWithRequest = (limit: number, tableWithServers: string, tableWithServersJoins: string) => Promise<number[]>
20 export type ListBadServers = () => Promise<ServerInstance[]>
22 export type Load = (id: number) => Promise<ServerInstance>
24 export type LoadByHost = (host: string) => Promise<ServerInstance>
26 export type RemoveAll = () => Promise<number>
28 export type UpdateServersScore = (goodServers: number[], badServers: number[]) => void
31 export interface ServerClass {
32 countAll: ServerMethods.CountAll
33 incrementScores: ServerMethods.IncrementScores
34 list: ServerMethods.List
35 listForApi: ServerMethods.ListForApi
36 listAllIds: ServerMethods.ListAllIds
37 listRandomServerIdsWithRequest: ServerMethods.ListRandomServerIdsWithRequest
38 listBadServers: ServerMethods.ListBadServers
39 load: ServerMethods.Load
40 loadByHost: ServerMethods.LoadByHost
41 removeAll: ServerMethods.RemoveAll
42 updateServersScore: ServerMethods.UpdateServersScore
45 export interface ServerAttributes {
48 score?: number | Sequelize.literal // Sequelize literal for 'score +' + value
51 export interface ServerInstance extends ServerClass, ServerAttributes, Sequelize.Instance<ServerAttributes> {
56 export interface ServerModel extends ServerClass, Sequelize.Model<ServerInstance, ServerAttributes> {}