Merge branch 'feature/design' into develop
[oweals/peertube.git] / server / models / account / account-follow-interface.ts
1 import * as Bluebird from 'bluebird'
2 import * as Sequelize from 'sequelize'
3 import { AccountFollow, FollowState } from '../../../shared/models/accounts/follow.model'
4 import { ResultList } from '../../../shared/models/result-list.model'
5 import { AccountInstance } from './account-interface'
6
7 export namespace AccountFollowMethods {
8   export type LoadByAccountAndTarget = (
9     accountId: number,
10     targetAccountId: number,
11     t?: Sequelize.Transaction
12   ) => Bluebird<AccountFollowInstance>
13
14   export type ListFollowingForApi = (id: number, start: number, count: number, sort: string) => Bluebird< ResultList<AccountFollowInstance>>
15   export type ListFollowersForApi = (id: number, start: number, count: number, sort: string) => Bluebird< ResultList<AccountFollowInstance>>
16
17   export type ListAcceptedFollowerUrlsForApi = (
18     accountId: number[],
19     t: Sequelize.Transaction,
20     start?: number,
21     count?: number
22   ) => Promise< ResultList<string> >
23   export type ListAcceptedFollowingUrlsForApi = (
24     accountId: number[],
25     t: Sequelize.Transaction,
26     start?: number,
27     count?: number
28   ) => Promise< ResultList<string> >
29   export type ListAcceptedFollowerSharedInboxUrls = (accountId: number[], t: Sequelize.Transaction) => Promise< ResultList<string> >
30   export type ToFormattedJSON = (this: AccountFollowInstance) => AccountFollow
31 }
32
33 export interface AccountFollowClass {
34   loadByAccountAndTarget: AccountFollowMethods.LoadByAccountAndTarget
35   listFollowersForApi: AccountFollowMethods.ListFollowersForApi
36   listFollowingForApi: AccountFollowMethods.ListFollowingForApi
37
38   listAcceptedFollowerUrlsForApi: AccountFollowMethods.ListAcceptedFollowerUrlsForApi
39   listAcceptedFollowingUrlsForApi: AccountFollowMethods.ListAcceptedFollowingUrlsForApi
40   listAcceptedFollowerSharedInboxUrls: AccountFollowMethods.ListAcceptedFollowerSharedInboxUrls
41 }
42
43 export interface AccountFollowAttributes {
44   accountId: number
45   targetAccountId: number
46   state: FollowState
47 }
48
49 export interface AccountFollowInstance extends AccountFollowClass, AccountFollowAttributes, Sequelize.Instance<AccountFollowAttributes> {
50   id: number
51   createdAt: Date
52   updatedAt: Date
53
54   AccountFollower?: AccountInstance
55   AccountFollowing?: AccountInstance
56
57   toFormattedJSON: AccountFollowMethods.ToFormattedJSON
58 }
59
60 export interface AccountFollowModel extends AccountFollowClass, Sequelize.Model<AccountFollowInstance, AccountFollowAttributes> {}