aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/models/request-video-event.ts
diff options
context:
space:
mode:
Diffstat (limited to 'server/models/request-video-event.ts')
-rw-r--r--server/models/request-video-event.ts72
1 files changed, 43 insertions, 29 deletions
diff --git a/server/models/request-video-event.ts b/server/models/request-video-event.ts
index c61525029..234e2a8a9 100644
--- a/server/models/request-video-event.ts
+++ b/server/models/request-video-event.ts
@@ -3,14 +3,28 @@
3*/ 3*/
4 4
5import { values } from 'lodash' 5import { values } from 'lodash'
6import * as Sequelize from 'sequelize'
6 7
7import { REQUEST_VIDEO_EVENT_TYPES } from '../initializers' 8import { REQUEST_VIDEO_EVENT_TYPES } from '../initializers'
8import { isVideoEventCountValid } from '../helpers' 9import { isVideoEventCountValid } from '../helpers'
9 10
10// --------------------------------------------------------------------------- 11import { addMethodsToModel } from './utils'
12import {
13 RequestVideoEventClass,
14 RequestVideoEventInstance,
15 RequestVideoEventAttributes,
16
17 RequestVideoEventMethods
18} from './request-video-event-interface'
19
20let RequestVideoEvent: Sequelize.Model<RequestVideoEventInstance, RequestVideoEventAttributes>
21let countTotalRequests: RequestVideoEventMethods.CountTotalRequests
22let listWithLimitAndRandom: RequestVideoEventMethods.ListWithLimitAndRandom
23let removeByRequestIdsAndPod: RequestVideoEventMethods.RemoveByRequestIdsAndPod
24let removeAll: RequestVideoEventMethods.RemoveAll
11 25
12module.exports = function (sequelize, DataTypes) { 26export default function (sequelize, DataTypes) {
13 const RequestVideoEvent = sequelize.define('RequestVideoEvent', 27 RequestVideoEvent = sequelize.define('RequestVideoEvent',
14 { 28 {
15 type: { 29 type: {
16 type: DataTypes.ENUM(values(REQUEST_VIDEO_EVENT_TYPES)), 30 type: DataTypes.ENUM(values(REQUEST_VIDEO_EVENT_TYPES)),
@@ -33,26 +47,27 @@ module.exports = function (sequelize, DataTypes) {
33 { 47 {
34 fields: [ 'videoId' ] 48 fields: [ 'videoId' ]
35 } 49 }
36 ], 50 ]
37 classMethods: {
38 associate,
39
40 listWithLimitAndRandom,
41
42 countTotalRequests,
43 removeAll,
44 removeByRequestIdsAndPod
45 }
46 } 51 }
47 ) 52 )
48 53
54 const classMethods = [
55 associate,
56
57 listWithLimitAndRandom,
58 countTotalRequests,
59 removeAll,
60 removeByRequestIdsAndPod
61 ]
62 addMethodsToModel(RequestVideoEvent, classMethods)
63
49 return RequestVideoEvent 64 return RequestVideoEvent
50} 65}
51 66
52// ------------------------------ STATICS ------------------------------ 67// ------------------------------ STATICS ------------------------------
53 68
54function associate (models) { 69function associate (models) {
55 this.belongsTo(models.Video, { 70 RequestVideoEvent.belongsTo(models.Video, {
56 foreignKey: { 71 foreignKey: {
57 name: 'videoId', 72 name: 'videoId',
58 allowNull: false 73 allowNull: false
@@ -61,14 +76,13 @@ function associate (models) {
61 }) 76 })
62} 77}
63 78
64function countTotalRequests (callback) { 79countTotalRequests = function (callback) {
65 const query = {} 80 const query = {}
66 return this.count(query).asCallback(callback) 81 return RequestVideoEvent.count(query).asCallback(callback)
67} 82}
68 83
69function listWithLimitAndRandom (limitPods, limitRequestsPerPod, callback) { 84listWithLimitAndRandom = function (limitPods, limitRequestsPerPod, callback) {
70 const self = this 85 const Pod = RequestVideoEvent['sequelize'].models.Pod
71 const Pod = this.sequelize.models.Pod
72 86
73 // We make a join between videos and authors to find the podId of our video event requests 87 // We make a join between videos and authors to find the podId of our video event requests
74 const podJoins = 'INNER JOIN "Videos" ON "Videos"."authorId" = "Authors"."id" ' + 88 const podJoins = 'INNER JOIN "Videos" ON "Videos"."authorId" = "Authors"."id" ' +
@@ -86,13 +100,13 @@ function listWithLimitAndRandom (limitPods, limitRequestsPerPod, callback) {
86 ], 100 ],
87 include: [ 101 include: [
88 { 102 {
89 model: self.sequelize.models.Video, 103 model: RequestVideoEvent['sequelize'].models.Video,
90 include: [ 104 include: [
91 { 105 {
92 model: self.sequelize.models.Author, 106 model: RequestVideoEvent['sequelize'].models.Author,
93 include: [ 107 include: [
94 { 108 {
95 model: self.sequelize.models.Pod, 109 model: RequestVideoEvent['sequelize'].models.Pod,
96 where: { 110 where: {
97 id: { 111 id: {
98 $in: podIds 112 $in: podIds
@@ -106,7 +120,7 @@ function listWithLimitAndRandom (limitPods, limitRequestsPerPod, callback) {
106 ] 120 ]
107 } 121 }
108 122
109 self.findAll(query).asCallback(function (err, requests) { 123 RequestVideoEvent.findAll(query).asCallback(function (err, requests) {
110 if (err) return callback(err) 124 if (err) return callback(err)
111 125
112 const requestsGrouped = groupAndTruncateRequests(requests, limitRequestsPerPod) 126 const requestsGrouped = groupAndTruncateRequests(requests, limitRequestsPerPod)
@@ -115,7 +129,7 @@ function listWithLimitAndRandom (limitPods, limitRequestsPerPod, callback) {
115 }) 129 })
116} 130}
117 131
118function removeByRequestIdsAndPod (ids, podId, callback) { 132removeByRequestIdsAndPod = function (ids, podId, callback) {
119 const query = { 133 const query = {
120 where: { 134 where: {
121 id: { 135 id: {
@@ -124,10 +138,10 @@ function removeByRequestIdsAndPod (ids, podId, callback) {
124 }, 138 },
125 include: [ 139 include: [
126 { 140 {
127 model: this.sequelize.models.Video, 141 model: RequestVideoEvent['sequelize'].models.Video,
128 include: [ 142 include: [
129 { 143 {
130 model: this.sequelize.models.Author, 144 model: RequestVideoEvent['sequelize'].models.Author,
131 where: { 145 where: {
132 podId 146 podId
133 } 147 }
@@ -137,12 +151,12 @@ function removeByRequestIdsAndPod (ids, podId, callback) {
137 ] 151 ]
138 } 152 }
139 153
140 this.destroy(query).asCallback(callback) 154 RequestVideoEvent.destroy(query).asCallback(callback)
141} 155}
142 156
143function removeAll (callback) { 157removeAll = function (callback) {
144 // Delete all requests 158 // Delete all requests
145 this.truncate({ cascade: true }).asCallback(callback) 159 RequestVideoEvent.truncate({ cascade: true }).asCallback(callback)
146} 160}
147 161
148// --------------------------------------------------------------------------- 162// ---------------------------------------------------------------------------