]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/models/application/application.ts
Stricter models typing
[github/Chocobozzz/PeerTube.git] / server / models / application / application.ts
index 8ba40a8951afec013bc579fc3175d8b4af347c5b..5531d134a1b6f67c14b6b9bc2b8483cccb2eb90d 100644 (file)
@@ -1,61 +1,55 @@
-import * as Sequelize from 'sequelize'
+import * as memoizee from 'memoizee'
+import { AllowNull, Column, Default, DefaultScope, HasOne, IsInt, Model, Table } from 'sequelize-typescript'
+import { AttributesOnly } from '@shared/core-utils'
+import { AccountModel } from '../account/account'
 
-import { addMethodsToModel } from '../utils'
-import {
-  ApplicationAttributes,
-  ApplicationInstance,
+export const getServerActor = memoizee(async function () {
+  const application = await ApplicationModel.load()
+  if (!application) throw Error('Could not load Application from database.')
 
-  ApplicationMethods
-} from './application-interface'
+  const actor = application.Account.Actor
+  actor.Account = application.Account
 
-let Application: Sequelize.Model<ApplicationInstance, ApplicationAttributes>
-let loadMigrationVersion: ApplicationMethods.LoadMigrationVersion
-let updateMigrationVersion: ApplicationMethods.UpdateMigrationVersion
-let countTotal: ApplicationMethods.CountTotal
+  return actor
+}, { promise: true })
 
-export default function defineApplication (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) {
-  Application = sequelize.define<ApplicationInstance, ApplicationAttributes>('Application',
+@DefaultScope(() => ({
+  include: [
     {
-      migrationVersion: {
-        type: DataTypes.INTEGER,
-        defaultValue: 0,
-        allowNull: false,
-        validate: {
-          isInt: true
-        }
-      }
+      model: AccountModel,
+      required: true
     }
-  )
-
-  const classMethods = [
-    countTotal,
-    loadMigrationVersion,
-    updateMigrationVersion
   ]
-  addMethodsToModel(Application, classMethods)
-
-  return Application
-}
-
-// ---------------------------------------------------------------------------
-
-countTotal = function () {
-  return this.count()
-}
-
-loadMigrationVersion = function () {
-  const query = {
-    attributes: [ 'migrationVersion' ]
+}))
+@Table({
+  tableName: 'application',
+  timestamps: false
+})
+export class ApplicationModel extends Model<Partial<AttributesOnly<ApplicationModel>>> {
+
+  @AllowNull(false)
+  @Default(0)
+  @IsInt
+  @Column
+  migrationVersion: number
+
+  @AllowNull(true)
+  @Column
+  latestPeerTubeVersion: string
+
+  @HasOne(() => AccountModel, {
+    foreignKey: {
+      allowNull: true
+    },
+    onDelete: 'cascade'
+  })
+  Account: AccountModel
+
+  static countTotal () {
+    return ApplicationModel.count()
   }
 
-  return Application.findOne(query).then(data => data ? data.migrationVersion : null)
-}
-
-updateMigrationVersion = function (newVersion: number, transaction: Sequelize.Transaction) {
-  const options: Sequelize.UpdateOptions = {
-    where: {},
-    transaction: transaction
+  static load () {
+    return ApplicationModel.findOne()
   }
-
-  return Application.update({ migrationVersion: newVersion }, options)
 }