]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/controllers/api/server/redundancy.ts
Fix redundancy remove on host redundancy update
[github/Chocobozzz/PeerTube.git] / server / controllers / api / server / redundancy.ts
CommitLineData
c48e82b5 1import * as express from 'express'
c0e8b12e
C
2import { JobQueue } from '@server/lib/job-queue'
3import { VideoRedundancyModel } from '@server/models/redundancy/video-redundancy'
4import { HttpStatusCode } from '../../../../shared/models/http/http-error-codes'
c48e82b5 5import { UserRight } from '../../../../shared/models/users'
c0e8b12e
C
6import { logger } from '../../../helpers/logger'
7import { removeRedundanciesOfServer, removeVideoRedundancy } from '../../../lib/redundancy'
b764380a
C
8import {
9 asyncMiddleware,
10 authenticate,
11 ensureUserHasRight,
12 paginationValidator,
13 setDefaultPagination,
14 setDefaultVideoRedundanciesSort,
15 videoRedundanciesSortValidator
16} from '../../../middlewares'
17import {
b764380a 18 addVideoRedundancyValidator,
c0e8b12e
C
19 listVideoRedundanciesValidator,
20 removeVideoRedundancyValidator,
21 updateServerRedundancyValidator
b764380a 22} from '../../../middlewares/validators/redundancy'
c48e82b5
C
23
24const serverRedundancyRouter = express.Router()
25
26serverRedundancyRouter.put('/redundancy/:host',
27 authenticate,
28 ensureUserHasRight(UserRight.MANAGE_SERVER_FOLLOW),
29 asyncMiddleware(updateServerRedundancyValidator),
30 asyncMiddleware(updateRedundancy)
31)
32
b764380a
C
33serverRedundancyRouter.get('/redundancy/videos',
34 authenticate,
35 ensureUserHasRight(UserRight.MANAGE_VIDEOS_REDUNDANCIES),
36 listVideoRedundanciesValidator,
37 paginationValidator,
38 videoRedundanciesSortValidator,
39 setDefaultVideoRedundanciesSort,
40 setDefaultPagination,
41 asyncMiddleware(listVideoRedundancies)
42)
43
44serverRedundancyRouter.post('/redundancy/videos',
45 authenticate,
46 ensureUserHasRight(UserRight.MANAGE_VIDEOS_REDUNDANCIES),
47 addVideoRedundancyValidator,
48 asyncMiddleware(addVideoRedundancy)
49)
50
51serverRedundancyRouter.delete('/redundancy/videos/:redundancyId',
52 authenticate,
53 ensureUserHasRight(UserRight.MANAGE_VIDEOS_REDUNDANCIES),
54 removeVideoRedundancyValidator,
55 asyncMiddleware(removeVideoRedundancyController)
56)
57
c48e82b5
C
58// ---------------------------------------------------------------------------
59
60export {
61 serverRedundancyRouter
62}
63
64// ---------------------------------------------------------------------------
65
b764380a
C
66async function listVideoRedundancies (req: express.Request, res: express.Response) {
67 const resultList = await VideoRedundancyModel.listForApi({
68 start: req.query.start,
69 count: req.query.count,
70 sort: req.query.sort,
71 target: req.query.target,
72 strategy: req.query.strategy
73 })
74
75 const result = {
76 total: resultList.total,
77 data: resultList.data.map(r => VideoRedundancyModel.toFormattedJSONStatic(r))
78 }
79
80 return res.json(result)
81}
82
83async function addVideoRedundancy (req: express.Request, res: express.Response) {
84 const payload = {
85 videoId: res.locals.onlyVideo.id
86 }
87
a1587156 88 await JobQueue.Instance.createJobWithPromise({
b764380a
C
89 type: 'video-redundancy',
90 payload
91 })
92
76148b27 93 return res.status(HttpStatusCode.NO_CONTENT_204).end()
b764380a
C
94}
95
96async function removeVideoRedundancyController (req: express.Request, res: express.Response) {
97 await removeVideoRedundancy(res.locals.videoRedundancy)
98
76148b27 99 return res.status(HttpStatusCode.NO_CONTENT_204).end()
b764380a
C
100}
101
dae86118
C
102async function updateRedundancy (req: express.Request, res: express.Response) {
103 const server = res.locals.server
c48e82b5
C
104
105 server.redundancyAllowed = req.body.redundancyAllowed
106
107 await server.save()
108
7b6cf83e
C
109 if (server.redundancyAllowed !== true) {
110 // Async, could be long
111 removeRedundanciesOfServer(server.id)
112 .catch(err => logger.error('Cannot remove redundancy of %s.', server.host, { err }))
113 }
161b061d 114
76148b27 115 return res.status(HttpStatusCode.NO_CONTENT_204).end()
c48e82b5 116}