]>
Commit | Line | Data |
---|---|---|
1 | import memoizee from 'memoizee' | |
2 | import { AllowNull, Column, Default, DefaultScope, HasOne, IsInt, Model, Table } from 'sequelize-typescript' | |
3 | import { getNodeABIVersion } from '@server/helpers/version' | |
4 | import { AttributesOnly } from '@shared/typescript-utils' | |
5 | import { AccountModel } from '../account/account' | |
6 | ||
7 | export const getServerActor = memoizee(async function () { | |
8 | const application = await ApplicationModel.load() | |
9 | if (!application) throw Error('Could not load Application from database.') | |
10 | ||
11 | const actor = application.Account.Actor | |
12 | actor.Account = application.Account | |
13 | ||
14 | return actor | |
15 | }, { promise: true }) | |
16 | ||
17 | @DefaultScope(() => ({ | |
18 | include: [ | |
19 | { | |
20 | model: AccountModel, | |
21 | required: true | |
22 | } | |
23 | ] | |
24 | })) | |
25 | @Table({ | |
26 | tableName: 'application', | |
27 | timestamps: false | |
28 | }) | |
29 | export class ApplicationModel extends Model<Partial<AttributesOnly<ApplicationModel>>> { | |
30 | ||
31 | @AllowNull(false) | |
32 | @Default(0) | |
33 | @IsInt | |
34 | @Column | |
35 | migrationVersion: number | |
36 | ||
37 | @AllowNull(true) | |
38 | @Column | |
39 | latestPeerTubeVersion: string | |
40 | ||
41 | @AllowNull(false) | |
42 | @Column | |
43 | nodeVersion: string | |
44 | ||
45 | @AllowNull(false) | |
46 | @Column | |
47 | nodeABIVersion: number | |
48 | ||
49 | @HasOne(() => AccountModel, { | |
50 | foreignKey: { | |
51 | allowNull: true | |
52 | }, | |
53 | onDelete: 'cascade' | |
54 | }) | |
55 | Account: AccountModel | |
56 | ||
57 | static countTotal () { | |
58 | return ApplicationModel.count() | |
59 | } | |
60 | ||
61 | static load () { | |
62 | return ApplicationModel.findOne() | |
63 | } | |
64 | ||
65 | static async nodeABIChanged () { | |
66 | const application = await this.load() | |
67 | ||
68 | return application.nodeABIVersion !== getNodeABIVersion() | |
69 | } | |
70 | ||
71 | static async updateNodeVersions () { | |
72 | const application = await this.load() | |
73 | ||
74 | application.nodeABIVersion = getNodeABIVersion() | |
75 | application.nodeVersion = process.version | |
76 | ||
77 | await application.save() | |
78 | } | |
79 | } |