*/
import { values } from 'lodash'
+import * as Sequelize from 'sequelize'
+import { database as db } from '../initializers/database'
import { REQUEST_VIDEO_QADU_TYPES } from '../initializers'
-
-// ---------------------------------------------------------------------------
-
-module.exports = function (sequelize, DataTypes) {
- const RequestVideoQadu = sequelize.define('RequestVideoQadu',
+import { addMethodsToModel } from './utils'
+import {
+ RequestVideoQaduClass,
+ RequestVideoQaduInstance,
+ RequestVideoQaduAttributes,
+
+ RequestVideoQaduMethods
+} from './request-video-qadu-interface'
+
+let RequestVideoQadu: Sequelize.Model<RequestVideoQaduInstance, RequestVideoQaduAttributes>
+let countTotalRequests: RequestVideoQaduMethods.CountTotalRequests
+let listWithLimitAndRandom: RequestVideoQaduMethods.ListWithLimitAndRandom
+let removeByRequestIdsAndPod: RequestVideoQaduMethods.RemoveByRequestIdsAndPod
+let removeAll: RequestVideoQaduMethods.RemoveAll
+
+export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) {
+ RequestVideoQadu = sequelize.define<RequestVideoQaduInstance, RequestVideoQaduAttributes>('RequestVideoQadu',
{
type: {
type: DataTypes.ENUM(values(REQUEST_VIDEO_QADU_TYPES)),
{
fields: [ 'videoId' ]
}
- ],
- classMethods: {
- associate,
-
- listWithLimitAndRandom,
-
- countTotalRequests,
- removeAll,
- removeByRequestIdsAndPod
- }
+ ]
}
)
+ const classMethods = [
+ associate,
+
+ listWithLimitAndRandom,
+ countTotalRequests,
+ removeAll,
+ removeByRequestIdsAndPod
+ ]
+ addMethodsToModel(RequestVideoQadu, classMethods)
+
return RequestVideoQadu
}
// ------------------------------ STATICS ------------------------------
function associate (models) {
- this.belongsTo(models.Pod, {
+ RequestVideoQadu.belongsTo(models.Pod, {
foreignKey: {
name: 'podId',
allowNull: false
onDelete: 'CASCADE'
})
- this.belongsTo(models.Video, {
+ RequestVideoQadu.belongsTo(models.Video, {
foreignKey: {
name: 'videoId',
allowNull: false
})
}
-function countTotalRequests (callback) {
+countTotalRequests = function (callback: RequestVideoQaduMethods.CountTotalRequestsCallback) {
const query = {}
- return this.count(query).asCallback(callback)
+ return RequestVideoQadu.count(query).asCallback(callback)
}
-function listWithLimitAndRandom (limitPods, limitRequestsPerPod, callback) {
- const self = this
- const Pod = this.sequelize.models.Pod
+listWithLimitAndRandom = function (limitPods: number, limitRequestsPerPod: number, callback: RequestVideoQaduMethods.ListWithLimitAndRandomCallback) {
+ const Pod = db.Pod
+ const tableJoin = ''
- Pod.listRandomPodIdsWithRequest(limitPods, 'RequestVideoQadus', function (err, podIds) {
+ Pod.listRandomPodIdsWithRequest(limitPods, 'RequestVideoQadus', tableJoin, function (err, podIds) {
if (err) return callback(err)
// We don't have friends that have requests
const query = {
include: [
{
- model: self.sequelize.models.Pod,
+ model: RequestVideoQadu['sequelize'].models.Pod,
where: {
id: {
$in: podIds
}
},
{
- model: self.sequelize.models.Video
+ model: RequestVideoQadu['sequelize'].models.Video
}
]
}
- self.findAll(query).asCallback(function (err, requests) {
+ RequestVideoQadu.findAll(query).asCallback(function (err, requests) {
if (err) return callback(err)
const requestsGrouped = groupAndTruncateRequests(requests, limitRequestsPerPod)
})
}
-function removeByRequestIdsAndPod (ids, podId, callback) {
+removeByRequestIdsAndPod = function (ids: number[], podId: number, callback: RequestVideoQaduMethods.RemoveByRequestIdsAndPodCallback) {
const query = {
where: {
id: {
}
}
- this.destroy(query).asCallback(callback)
+ RequestVideoQadu.destroy(query).asCallback(callback)
}
-function removeAll (callback) {
+removeAll = function (callback: RequestVideoQaduMethods.RemoveAllCallback) {
// Delete all requests
- this.truncate({ cascade: true }).asCallback(callback)
+ RequestVideoQadu.truncate({ cascade: true }).asCallback(callback)
}
// ---------------------------------------------------------------------------
-function groupAndTruncateRequests (requests, limitRequestsPerPod) {
+function groupAndTruncateRequests (requests: RequestVideoQaduInstance[], limitRequestsPerPod: number) {
const requestsGrouped = {}
requests.forEach(function (request) {