POST content API
This commit is contained in:
@ -1,4 +1,5 @@
|
||||
import { findLibraryItemById } from '../services/library_item'
|
||||
import { logger } from '../utils/logger'
|
||||
import { htmlToHighlightedMarkdown, htmlToMarkdown } from '../utils/parser'
|
||||
import { uploadToBucket } from '../utils/uploads'
|
||||
|
||||
@ -33,22 +34,32 @@ const CONTENT_TYPES = {
|
||||
}
|
||||
|
||||
export const uploadContentJob = async (data: UploadContentJobData) => {
|
||||
logger.info('Uploading content to bucket', data)
|
||||
|
||||
const { libraryItemId, userId, format, filePath } = data
|
||||
const libraryItem = await findLibraryItemById(libraryItemId, userId, {
|
||||
select: ['originalContent'],
|
||||
})
|
||||
if (!libraryItem) {
|
||||
logger.error('Library item not found', data)
|
||||
throw new Error('Library item not found')
|
||||
}
|
||||
|
||||
if (!libraryItem.originalContent) {
|
||||
logger.error('Original content not found', data)
|
||||
throw new Error('Original content not found')
|
||||
}
|
||||
|
||||
logger.info('Converting content', data)
|
||||
const content = convertContent(libraryItem.originalContent, format)
|
||||
|
||||
console.time('uploadToBucket')
|
||||
logger.info('Uploading content', data)
|
||||
await uploadToBucket(filePath, Buffer.from(content), {
|
||||
contentType: CONTENT_TYPES[format],
|
||||
timeout: 60000, // 1 minute
|
||||
})
|
||||
console.timeEnd('uploadToBucket')
|
||||
|
||||
logger.info('Content uploaded', data)
|
||||
}
|
||||
|
||||
@ -24,13 +24,13 @@ export function contentRouter() {
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
||||
router.get('/', async (req, res) => {
|
||||
if (!isContentRequest(req.query)) {
|
||||
router.post('/', async (req, res) => {
|
||||
if (!isContentRequest(req.body)) {
|
||||
logger.error('Bad request')
|
||||
return res.status(400).send({ errorCode: 'BAD_REQUEST' })
|
||||
}
|
||||
|
||||
const { libraryItemIds, format } = req.query
|
||||
const { libraryItemIds, format } = req.body
|
||||
if (
|
||||
!Array.isArray(libraryItemIds) ||
|
||||
libraryItemIds.length === 0 ||
|
||||
@ -89,12 +89,14 @@ export function contentRouter() {
|
||||
}
|
||||
})
|
||||
)
|
||||
logger.info('Signed urls generated', data)
|
||||
|
||||
const validData = data.filter(
|
||||
(d) => d.downloadUrl !== undefined && !('error' in d)
|
||||
) as UploadContentJobData[]
|
||||
|
||||
await enqueueBulkUploadContentJob(validData)
|
||||
logger.info('Bulk upload content job enqueued', validData)
|
||||
|
||||
res.send({
|
||||
data: data.map((d) => ({
|
||||
|
||||
@ -772,7 +772,7 @@ export const findLibraryItemsByIds = async (
|
||||
}
|
||||
) => {
|
||||
const selectColumns =
|
||||
options?.select ||
|
||||
options?.select?.map((column) => `library_item.${column}`) ||
|
||||
getColumns(libraryItemRepository)
|
||||
.filter((column) => column !== 'originalContent')
|
||||
.map((column) => `library_item.${column}`)
|
||||
|
||||
@ -93,12 +93,12 @@ export const getJobPriority = (jobName: string): number => {
|
||||
return 5
|
||||
case BULK_ACTION_JOB_NAME:
|
||||
case `${REFRESH_FEED_JOB_NAME}_high`:
|
||||
return 10
|
||||
case PROCESS_YOUTUBE_TRANSCRIPT_JOB_NAME:
|
||||
case UPLOAD_CONTENT_JOB:
|
||||
return 10
|
||||
case `${REFRESH_FEED_JOB_NAME}_low`:
|
||||
case EXPORT_ITEM_JOB_NAME:
|
||||
case CREATE_DIGEST_JOB:
|
||||
case UPLOAD_CONTENT_JOB:
|
||||
return 50
|
||||
case EXPORT_ALL_ITEMS_JOB_NAME:
|
||||
case REFRESH_ALL_FEEDS_JOB_NAME:
|
||||
|
||||
Reference in New Issue
Block a user