POST content API

This commit is contained in:
Hongbo Wu
2024-05-10 16:26:42 +08:00
parent 0f184c4c21
commit 6e7a436cea
4 changed files with 19 additions and 6 deletions

View File

@ -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)
}

View File

@ -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) => ({

View File

@ -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}`)

View File

@ -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: