]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/models/application/application.ts
Bumped to version v5.2.1
[github/Chocobozzz/PeerTube.git] / server / models / application / application.ts
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 }