Skip to content

Commit

Permalink
add internal/ingest recording delete endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
rassokhin-s committed Jul 20, 2023
1 parent 6fec6e5 commit 7d2682c
Show file tree
Hide file tree
Showing 4 changed files with 99 additions and 1 deletion.
32 changes: 32 additions & 0 deletions core/_services/arbimon/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,37 @@ async function createRecordingsFromSegments (sfParams, segments, opts) {
return createRecordings(recordings)
}

async function deleteRecordingsFromSegments (streamId, segments) {
const body = segments.map(s => {
return {
site_external_id: streamId,
uri: s.path
}
})
const options = {
method: 'POST',
url: `${arbimonBaseUrl}api/ingest/recordings/delete`,
headers: {
'Content-Type': 'application/json'
},
body,
json: true,
timeout: 20000
}

return getClientToken()
.then((token) => {
options.headers.authorization = `Bearer ${token}`
return rp(options).catch(rpErrorHandler)
})
.then((response) => {
if (response) {
console.error(`arbimon deleteRecordings: req: ${JSON.stringify(body)} res: ${JSON.stringify(response)}`)
throw Error('Unable to delete recordings in Arbimon')
}
})
}

function createUser (user, idToken) {
const body = {};
['firstname', 'lastname', 'email', 'guid', 'user_id', 'picture'].forEach((attr) => { body[attr] = user[attr] })
Expand Down Expand Up @@ -169,5 +200,6 @@ module.exports = {
updateSite,
deleteSite,
createRecordingsFromSegments,
deleteRecordingsFromSegments,
createUser
}
62 changes: 62 additions & 0 deletions core/internal/ingest/delete.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
const { httpErrorHandler } = require('../../../common/error-handling/http')
// const streamDao = require('../../streams/dao')
// const streamSourceFileDao = require('../../stream-source-files/dao')
// const streamSegmentDao = require('../../stream-segments/dao')
// const fileFormatDao = require('../../stream-segments/dao/file-extensions')
const dao = require('../../stream-source-files/dao')

const Converter = require('../../../common/converter')
const ArrayConverter = require('../../../common/converter/array')
const arbimonService = require('../../_services/arbimon')

/**
* @swagger
*
* /streams/{id}/stream-source-file-and-segments:
* delete:
* summary: Deletes a stream source file and related segments
* tags:
* - internal
* requestBody:
* description: Mixed content of stream source file object and stream segments
* required: true
* responses:
* 204:
* description: Deleted
* 400:
* description: Invalid query parameters
*/

module.exports = function (req, res) {
const streamId = req.params.streamId

const converter = new Converter(req.body, {})
converter.convert('stream_source_file')
converter.convert('stream_segments')

const sfConverter = new Converter(req.body.stream_source_file, {})
sfConverter.convert('id').toString()

const segConverter = new ArrayConverter(req.body.stream_segments)
segConverter.convert('id').toString()
segConverter.convert('start').toMomentUtc()
segConverter.convert('path').toString()

return converter.validate()
.then(async () => {
const sfParams = await sfConverter.validate() // validate stream_source_file attributes
const transformedArray = await segConverter.validate() // validate stream_segment[] attributes

if (arbimonService.isEnabled && transformedArray.length) {
await arbimonService.deleteRecordingsFromSegments(streamId, transformedArray)
}

const streamSourceFile = await dao.get(sfParams.id)
await dao.remove(streamSourceFile)
res.sendStatus(204)
})
.catch((err) => {
console.error('Failed deleting stream source file and segments', err)
httpErrorHandler(req, res, 'Failed deleting stream source file and segments')(err)
})
}
1 change: 1 addition & 0 deletions core/internal/ingest/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@ const { hasRole } = require('../../../common/middleware/authorization/authorizat

router.get('/streams/:id/stream-source-file', require('./get'))
router.post('/streams/:streamId/stream-source-file-and-segments', hasRole(['systemUser']), require('./post'))
router.delete('/streams/:streamId/stream-source-file-and-segments', hasRole(['systemUser']), require('./delete'))

module.exports = router
5 changes: 4 additions & 1 deletion core/internal/ingest/post.js
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,10 @@ module.exports = function (req, res) {
return res
.location(`/stream-source-files/${streamSourceFile.id}`)
.status(201)
.json({ stream_segments: segments.map(s => { return { id: s.id, start: s.start } }) })
.json({
stream_source_file: streamSourceFile.toJSON(),
stream_segments: segments.map(s => { return { id: s.id, start: s.start } })
})
})
.catch((err) => {
transaction.rollback()
Expand Down

0 comments on commit 7d2682c

Please sign in to comment.