X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fapi%2Fserver%2Fredundancy.ts;h=99d1c762b8d1d8f3bff98259c74f3c122bdbc724;hb=171efc48e67498406feb6d7873b3482b41505515;hp=4216b9e353835c57c46641c2ec757bd01b87f488;hpb=c48e82b5e0478434de30626d14594a97f2402e7c;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/api/server/redundancy.ts b/server/controllers/api/server/redundancy.ts index 4216b9e35..99d1c762b 100644 --- a/server/controllers/api/server/redundancy.ts +++ b/server/controllers/api/server/redundancy.ts @@ -1,8 +1,25 @@ import * as express from 'express' +import { JobQueue } from '@server/lib/job-queue' +import { VideoRedundancyModel } from '@server/models/redundancy/video-redundancy' +import { HttpStatusCode } from '../../../../shared/models/http/http-error-codes' import { UserRight } from '../../../../shared/models/users' -import { asyncMiddleware, authenticate, ensureUserHasRight } from '../../../middlewares' -import { updateServerRedundancyValidator } from '../../../middlewares/validators/redundancy' -import { ServerModel } from '../../../models/server/server' +import { logger } from '../../../helpers/logger' +import { removeRedundanciesOfServer, removeVideoRedundancy } from '../../../lib/redundancy' +import { + asyncMiddleware, + authenticate, + ensureUserHasRight, + paginationValidator, + setDefaultPagination, + setDefaultVideoRedundanciesSort, + videoRedundanciesSortValidator +} from '../../../middlewares' +import { + addVideoRedundancyValidator, + listVideoRedundanciesValidator, + removeVideoRedundancyValidator, + updateServerRedundancyValidator +} from '../../../middlewares/validators/redundancy' const serverRedundancyRouter = express.Router() @@ -13,6 +30,31 @@ serverRedundancyRouter.put('/redundancy/:host', asyncMiddleware(updateRedundancy) ) +serverRedundancyRouter.get('/redundancy/videos', + authenticate, + ensureUserHasRight(UserRight.MANAGE_VIDEOS_REDUNDANCIES), + listVideoRedundanciesValidator, + paginationValidator, + videoRedundanciesSortValidator, + setDefaultVideoRedundanciesSort, + setDefaultPagination, + asyncMiddleware(listVideoRedundancies) +) + +serverRedundancyRouter.post('/redundancy/videos', + authenticate, + ensureUserHasRight(UserRight.MANAGE_VIDEOS_REDUNDANCIES), + addVideoRedundancyValidator, + asyncMiddleware(addVideoRedundancy) +) + +serverRedundancyRouter.delete('/redundancy/videos/:redundancyId', + authenticate, + ensureUserHasRight(UserRight.MANAGE_VIDEOS_REDUNDANCIES), + removeVideoRedundancyValidator, + asyncMiddleware(removeVideoRedundancyController) +) + // --------------------------------------------------------------------------- export { @@ -21,12 +63,52 @@ export { // --------------------------------------------------------------------------- -async function updateRedundancy (req: express.Request, res: express.Response, next: express.NextFunction) { - const server = res.locals.server as ServerModel +async function listVideoRedundancies (req: express.Request, res: express.Response) { + const resultList = await VideoRedundancyModel.listForApi({ + start: req.query.start, + count: req.query.count, + sort: req.query.sort, + target: req.query.target, + strategy: req.query.strategy + }) + + const result = { + total: resultList.total, + data: resultList.data.map(r => VideoRedundancyModel.toFormattedJSONStatic(r)) + } + + return res.json(result) +} + +async function addVideoRedundancy (req: express.Request, res: express.Response) { + const payload = { + videoId: res.locals.onlyVideo.id + } + + await JobQueue.Instance.createJobWithPromise({ + type: 'video-redundancy', + payload + }) + + return res.status(HttpStatusCode.NO_CONTENT_204).end() +} + +async function removeVideoRedundancyController (req: express.Request, res: express.Response) { + await removeVideoRedundancy(res.locals.videoRedundancy) + + return res.status(HttpStatusCode.NO_CONTENT_204).end() +} + +async function updateRedundancy (req: express.Request, res: express.Response) { + const server = res.locals.server server.redundancyAllowed = req.body.redundancyAllowed await server.save() - return res.sendStatus(204) + // Async, could be long + removeRedundanciesOfServer(server.id) + .catch(err => logger.error('Cannot remove redundancy of %s.', server.host, { err })) + + return res.status(HttpStatusCode.NO_CONTENT_204).end() }