]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/models/request/request-interface.ts
Continue activitypub
[github/Chocobozzz/PeerTube.git] / server / models / request / request-interface.ts
1 import * as Sequelize from 'sequelize'
2 import * as Promise from 'bluebird'
3
4 import { AbstractRequestClass } from './abstract-request-interface'
5 import { PodInstance, PodAttributes } from '../pod/pod-interface'
6 import { RequestEndpoint } from '../../../shared/models/request-scheduler.model'
7
8 export type RequestsGrouped = {
9 [ podId: number ]: {
10 request: RequestInstance,
11 pod: PodInstance
12 }[]
13 }
14
15 export namespace RequestMethods {
16 export type CountTotalRequests = () => Promise<number>
17
18 export type ListWithLimitAndRandom = (limitPods: number, limitRequestsPerPod: number) => Promise<RequestsGrouped>
19
20 export type RemoveWithEmptyTo = () => Promise<number>
21
22 export type RemoveAll = () => Promise<void>
23 }
24
25 export interface RequestClass extends AbstractRequestClass<RequestsGrouped> {
26 countTotalRequests: RequestMethods.CountTotalRequests
27 listWithLimitAndRandom: RequestMethods.ListWithLimitAndRandom
28 removeWithEmptyTo: RequestMethods.RemoveWithEmptyTo
29 removeAll: RequestMethods.RemoveAll
30 }
31
32 export interface RequestAttributes {
33 request: object
34 endpoint: RequestEndpoint
35 }
36
37 export interface RequestInstance extends RequestClass, RequestAttributes, Sequelize.Instance<RequestAttributes> {
38 id: number
39 createdAt: Date
40 updatedAt: Date
41
42 setPods: Sequelize.HasManySetAssociationsMixin<PodAttributes, number>
43 Pods: PodInstance[]
44 }
45
46 export interface RequestModel extends RequestClass, Sequelize.Model<RequestInstance, RequestAttributes> {}