Merge pull request #2995 from specklesystems/fabians/previews-ioc-1
chore(server): previews IoC 1 - index.js repo
This commit is contained in:
Коммит
6590c14ade
|
@ -0,0 +1,15 @@
|
|||
import { Nullable } from '@speckle/shared'
|
||||
|
||||
export type ObjectPreview = {
|
||||
streamId: string
|
||||
objectId: string
|
||||
previewStatus: number
|
||||
priority: number
|
||||
lastUpdate: Date
|
||||
preview: Nullable<string>
|
||||
}
|
||||
|
||||
export type Preview = {
|
||||
id: string
|
||||
data: Buffer
|
||||
}
|
|
@ -11,10 +11,10 @@ const {
|
|||
getCommitById
|
||||
} = require('../core/services/commits')
|
||||
const {
|
||||
getPreviewImage,
|
||||
createObjectPreview,
|
||||
getObjectPreviewInfo
|
||||
} = require('./services/previews')
|
||||
getPreviewImageFactory,
|
||||
createObjectPreviewFactory,
|
||||
getObjectPreviewInfoFactory
|
||||
} = require('./repository/previews')
|
||||
|
||||
const { makeOgImage } = require('./ogImage')
|
||||
const { moduleLogger, logger } = require('@/logging/logging')
|
||||
|
@ -27,6 +27,7 @@ const httpErrorImage = (httpErrorCode) =>
|
|||
require.resolve(`#/assets/previews/images/preview_${httpErrorCode}.png`)
|
||||
|
||||
const cors = require('cors')
|
||||
const { db } = require('@/db/knex')
|
||||
|
||||
const noPreviewImage = require.resolve('#/assets/previews/images/no_preview.png')
|
||||
const previewErrorImage = require.resolve('#/assets/previews/images/preview_error.png')
|
||||
|
@ -60,8 +61,10 @@ exports.init = (app, isInitial) => {
|
|||
}
|
||||
|
||||
// Get existing preview metadata
|
||||
const getObjectPreviewInfo = getObjectPreviewInfoFactory({ db })
|
||||
const previewInfo = await getObjectPreviewInfo({ streamId, objectId })
|
||||
if (!previewInfo) {
|
||||
const createObjectPreview = createObjectPreviewFactory({ db })
|
||||
await createObjectPreview({ streamId, objectId, priority: 0 })
|
||||
}
|
||||
|
||||
|
@ -81,6 +84,7 @@ exports.init = (app, isInitial) => {
|
|||
file: previewErrorImage
|
||||
}
|
||||
}
|
||||
const getPreviewImage = getPreviewImageFactory({ db })
|
||||
const previewImg = await getPreviewImage({ previewId: previewImgId })
|
||||
if (!previewImg) {
|
||||
logger.warn(`Preview image not found: ${previewImgId}`)
|
||||
|
|
|
@ -0,0 +1,69 @@
|
|||
/* istanbul ignore file */
|
||||
import knex from '@/db/knex'
|
||||
import { buildTableHelper } from '@/modules/core/dbSchema'
|
||||
import {
|
||||
ObjectPreview as ObjectPreviewRecord,
|
||||
Preview
|
||||
} from '@/modules/previews/domain/types'
|
||||
import { Knex } from 'knex'
|
||||
import { SetOptional } from 'type-fest'
|
||||
|
||||
const ObjectPreview = buildTableHelper('object_preview', [
|
||||
'streamId',
|
||||
'objectId',
|
||||
'previewStatus',
|
||||
'priority',
|
||||
'lastUpdate',
|
||||
'preview'
|
||||
])
|
||||
const Previews = buildTableHelper('previews', ['id', 'data'])
|
||||
|
||||
const tables = {
|
||||
objectPreview: (db: Knex) => db<ObjectPreviewRecord>(ObjectPreview.name),
|
||||
previews: (db: Knex) => db<Preview>(Previews.name)
|
||||
}
|
||||
|
||||
export const getObjectPreviewInfoFactory =
|
||||
(deps: { db: Knex }) =>
|
||||
async ({ streamId, objectId }: { streamId: string; objectId: string }) => {
|
||||
return await tables
|
||||
.objectPreview(deps.db)
|
||||
.select('*')
|
||||
.where({ streamId, objectId })
|
||||
.first()
|
||||
}
|
||||
|
||||
export const createObjectPreviewFactory =
|
||||
(deps: { db: Knex }) =>
|
||||
async ({
|
||||
streamId,
|
||||
objectId,
|
||||
priority
|
||||
}: Pick<ObjectPreviewRecord, 'streamId' | 'objectId' | 'priority'>) => {
|
||||
const insertionObject: SetOptional<ObjectPreviewRecord, 'lastUpdate' | 'preview'> =
|
||||
{
|
||||
streamId,
|
||||
objectId,
|
||||
priority,
|
||||
previewStatus: 0
|
||||
}
|
||||
const sqlQuery =
|
||||
tables.objectPreview(deps.db).insert(insertionObject).toString() +
|
||||
' on conflict do nothing'
|
||||
|
||||
await knex.raw(sqlQuery)
|
||||
}
|
||||
|
||||
export const getPreviewImageFactory =
|
||||
(deps: { db: Knex }) =>
|
||||
async ({ previewId }: { previewId: string }) => {
|
||||
const previewRow = await tables
|
||||
.previews(deps.db)
|
||||
.where({ id: previewId })
|
||||
.first()
|
||||
.select('*')
|
||||
if (!previewRow) {
|
||||
return null
|
||||
}
|
||||
return previewRow.data
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
/* istanbul ignore file */
|
||||
'use strict'
|
||||
|
||||
const knex = require('@/db/knex')
|
||||
|
||||
const ObjectPreview = () => knex('object_preview')
|
||||
const Previews = () => knex('previews')
|
||||
|
||||
module.exports = {
|
||||
async getObjectPreviewInfo({ streamId, objectId }) {
|
||||
return await ObjectPreview().select('*').where({ streamId, objectId }).first()
|
||||
},
|
||||
|
||||
async createObjectPreview({ streamId, objectId, priority }) {
|
||||
const insertionObject = {
|
||||
streamId,
|
||||
objectId,
|
||||
priority,
|
||||
previewStatus: 0
|
||||
}
|
||||
const sqlQuery =
|
||||
ObjectPreview().insert(insertionObject).toString() + ' on conflict do nothing'
|
||||
await knex.raw(sqlQuery)
|
||||
},
|
||||
|
||||
async getPreviewImage({ previewId }) {
|
||||
const previewRow = await Previews().where({ id: previewId }).first().select('*')
|
||||
if (!previewRow) {
|
||||
return null
|
||||
}
|
||||
return previewRow.data
|
||||
}
|
||||
}
|
Загрузка…
Ссылка в новой задаче