]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - shared/extra-utils/miscs/sql.ts
Add ability for plugins to specify scale filter
[github/Chocobozzz/PeerTube.git] / shared / extra-utils / miscs / sql.ts
CommitLineData
1735c825 1import { QueryTypes, Sequelize } from 'sequelize'
48f07b4a 2import { ServerInfo } from '../server/servers'
df66d815 3
a1587156 4const sequelizes: { [ id: number ]: Sequelize } = {}
c8000975 5
48f07b4a
C
6function getSequelize (internalServerNumber: number) {
7 if (sequelizes[internalServerNumber]) return sequelizes[internalServerNumber]
c8000975 8
48f07b4a 9 const dbname = 'peertube_test' + internalServerNumber
df66d815
C
10 const username = 'peertube'
11 const password = 'peertube'
ee90f1bc 12 const host = 'localhost'
df66d815
C
13 const port = 5432
14
c8000975 15 const seq = new Sequelize(dbname, username, password, {
df66d815
C
16 dialect: 'postgres',
17 host,
18 port,
df66d815
C
19 logging: false
20 })
c8000975 21
48f07b4a 22 sequelizes[internalServerNumber] = seq
c8000975
C
23
24 return seq
df66d815
C
25}
26
74d249bc
C
27function deleteAll (internalServerNumber: number, table: string) {
28 const seq = getSequelize(internalServerNumber)
29
30 const options = { type: QueryTypes.DELETE }
31
32 return seq.query(`DELETE FROM "${table}"`, options)
33}
34
35async function getCount (internalServerNumber: number, table: string) {
36 const seq = getSequelize(internalServerNumber)
37
38 const options = { type: QueryTypes.SELECT as QueryTypes.SELECT }
39
40 const [ { total } ] = await seq.query<{ total: string }>(`SELECT COUNT(*) as total FROM "${table}"`, options)
41 if (total === null) return 0
42
43 return parseInt(total, 10)
44}
45
48f07b4a
C
46function setActorField (internalServerNumber: number, to: string, field: string, value: string) {
47 const seq = getSequelize(internalServerNumber)
df66d815 48
1735c825 49 const options = { type: QueryTypes.UPDATE }
df66d815
C
50
51 return seq.query(`UPDATE actor SET "${field}" = '${value}' WHERE url = '${to}'`, options)
52}
53
48f07b4a
C
54function setVideoField (internalServerNumber: number, uuid: string, field: string, value: string) {
55 const seq = getSequelize(internalServerNumber)
a130f33c 56
1735c825 57 const options = { type: QueryTypes.UPDATE }
a130f33c
C
58
59 return seq.query(`UPDATE video SET "${field}" = '${value}' WHERE uuid = '${uuid}'`, options)
60}
61
48f07b4a
C
62function setPlaylistField (internalServerNumber: number, uuid: string, field: string, value: string) {
63 const seq = getSequelize(internalServerNumber)
9f79ade6 64
1735c825 65 const options = { type: QueryTypes.UPDATE }
9f79ade6
C
66
67 return seq.query(`UPDATE "videoPlaylist" SET "${field}" = '${value}' WHERE uuid = '${uuid}'`, options)
68}
69
48f07b4a
C
70async function countVideoViewsOf (internalServerNumber: number, uuid: string) {
71 const seq = getSequelize(internalServerNumber)
cda03765
C
72
73 // tslint:disable
a1587156
C
74 const query = 'SELECT SUM("videoView"."views") AS "total" FROM "videoView" ' +
75 `INNER JOIN "video" ON "video"."id" = "videoView"."videoId" WHERE "video"."uuid" = '${uuid}'`
cda03765 76
1735c825
C
77 const options = { type: QueryTypes.SELECT as QueryTypes.SELECT }
78 const [ { total } ] = await seq.query<{ total: number }>(query, options)
cda03765
C
79
80 if (!total) return 0
81
1735c825 82 return parseInt(total + '', 10)
cda03765
C
83}
84
84531547
C
85function getActorImage (internalServerNumber: number, filename: string) {
86 return selectQuery(internalServerNumber, `SELECT * FROM "actorImage" WHERE filename = '${filename}'`)
87 .then(rows => rows[0])
88}
89
74d249bc
C
90function selectQuery (internalServerNumber: number, query: string) {
91 const seq = getSequelize(internalServerNumber)
92 const options = { type: QueryTypes.SELECT as QueryTypes.SELECT }
93
94 return seq.query<any>(query, options)
95}
96
97function updateQuery (internalServerNumber: number, query: string) {
98 const seq = getSequelize(internalServerNumber)
99 const options = { type: QueryTypes.UPDATE as QueryTypes.UPDATE }
100
101 return seq.query(query, options)
102}
103
48f07b4a
C
104async function closeAllSequelize (servers: ServerInfo[]) {
105 for (const server of servers) {
a1587156
C
106 if (sequelizes[server.internalServerNumber]) {
107 await sequelizes[server.internalServerNumber].close()
108 // eslint-disable-next-line
109 delete sequelizes[server.internalServerNumber]
c8000975
C
110 }
111 }
112}
113
32a18cbf 114function setPluginField (internalServerNumber: number, pluginName: string, field: string, value: string) {
09071200
C
115 const seq = getSequelize(internalServerNumber)
116
117 const options = { type: QueryTypes.UPDATE }
118
32a18cbf
C
119 return seq.query(`UPDATE "plugin" SET "${field}" = '${value}' WHERE "name" = '${pluginName}'`, options)
120}
121
122function setPluginVersion (internalServerNumber: number, pluginName: string, newVersion: string) {
123 return setPluginField(internalServerNumber, pluginName, 'version', newVersion)
124}
125
126function setPluginLatestVersion (internalServerNumber: number, pluginName: string, newVersion: string) {
127 return setPluginField(internalServerNumber, pluginName, 'latestVersion', newVersion)
09071200
C
128}
129
6b9c966f
C
130function setActorFollowScores (internalServerNumber: number, newScore: number) {
131 const seq = getSequelize(internalServerNumber)
132
133 const options = { type: QueryTypes.UPDATE }
134
135 return seq.query(`UPDATE "actorFollow" SET "score" = ${newScore}`, options)
136}
137
f43db2f4
C
138function setTokenField (internalServerNumber: number, accessToken: string, field: string, value: string) {
139 const seq = getSequelize(internalServerNumber)
140
141 const options = { type: QueryTypes.UPDATE }
142
143 return seq.query(`UPDATE "oAuthToken" SET "${field}" = '${value}' WHERE "accessToken" = '${accessToken}'`, options)
144}
145
df66d815 146export {
a130f33c 147 setVideoField,
9f79ade6 148 setPlaylistField,
c8000975 149 setActorField,
cda03765 150 countVideoViewsOf,
09071200 151 setPluginVersion,
32a18cbf 152 setPluginLatestVersion,
74d249bc 153 selectQuery,
84531547 154 getActorImage,
74d249bc 155 deleteAll,
f43db2f4 156 setTokenField,
74d249bc 157 updateQuery,
6b9c966f 158 setActorFollowScores,
74d249bc
C
159 closeAllSequelize,
160 getCount
df66d815 161}