chore(server): core IoC #97 - getObjectsStreamFactory

This commit is contained in:
Kristaps Fabians Geikins 2024-10-21 17:36:05 +03:00
Родитель 960fe33f69
Коммит b373e446b3
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 16D20A16730A0111
4 изменённых файлов: 40 добавлений и 14 удалений

Просмотреть файл

@ -54,6 +54,25 @@ export type GetObjectChildrenStream = (params: {
objectId: string objectId: string
}) => Promise<stream.PassThrough & AsyncIterable<{ dataText: string; id: string }>> }) => Promise<stream.PassThrough & AsyncIterable<{ dataText: string; id: string }>>
export type GetObjectsStream = (params: {
streamId: string
objectIds: string[]
}) => Promise<
stream.PassThrough &
AsyncIterable<
{
dataText: string
} & Pick<
SpeckleObject,
| 'id'
| 'speckleType'
| 'totalChildrenCount'
| 'totalChildrenCountByDepth'
| 'createdAt'
>
>
>
export type GetObjectChildren = (params: { export type GetObjectChildren = (params: {
streamId: string streamId: string
objectId: string objectId: string

Просмотреть файл

@ -13,6 +13,7 @@ import {
GetObjectChildren, GetObjectChildren,
GetObjectChildrenQuery, GetObjectChildrenQuery,
GetObjectChildrenStream, GetObjectChildrenStream,
GetObjectsStream,
GetStreamObjects, GetStreamObjects,
StoreClosuresIfNotFound, StoreClosuresIfNotFound,
StoreObjects, StoreObjects,
@ -167,6 +168,22 @@ export const getObjectChildrenStreamFactory =
return q.stream({ highWaterMark: 500 }) return q.stream({ highWaterMark: 500 })
} }
export const getObjectsStreamFactory =
(deps: { db: Knex }): GetObjectsStream =>
async ({ streamId, objectIds }) => {
const res = tables
.objects(deps.db)
.whereIn('id', objectIds)
.andWhere('streamId', streamId)
.orderBy('id')
.select(
knex.raw(
'"id", "speckleType", "totalChildrenCount", "totalChildrenCountByDepth", "createdAt", data::text as "dataText"'
)
)
return res.stream({ highWaterMark: 500 })
}
export const getObjectChildrenFactory = export const getObjectChildrenFactory =
(deps: { db: Knex }): GetObjectChildren => (deps: { db: Knex }): GetObjectChildren =>
async ({ streamId, objectId, limit, depth, select, cursor }) => { async ({ streamId, objectId, limit, depth, select, cursor }) => {

Просмотреть файл

@ -3,10 +3,13 @@ import { corsMiddleware } from '@/modules/core/configs/cors'
import type { Application } from 'express' import type { Application } from 'express'
import { validatePermissionsReadStream } from '@/modules/core/rest/authUtils' import { validatePermissionsReadStream } from '@/modules/core/rest/authUtils'
import { SpeckleObjectsStream } from '@/modules/core/rest/speckleObjectsStream' import { SpeckleObjectsStream } from '@/modules/core/rest/speckleObjectsStream'
import { getObjectsStream } from '@/modules/core/services/objects'
import { pipeline, PassThrough } from 'stream' import { pipeline, PassThrough } from 'stream'
import { getObjectsStreamFactory } from '@/modules/core/repositories/objects'
import { db } from '@/db/knex'
export default (app: Application) => { export default (app: Application) => {
const getObjectsStream = getObjectsStreamFactory({ db })
app.options('/api/getobjects/:streamId', corsMiddleware()) app.options('/api/getobjects/:streamId', corsMiddleware())
app.post('/api/getobjects/:streamId', corsMiddleware(), async (req, res) => { app.post('/api/getobjects/:streamId', corsMiddleware(), async (req, res) => {

Просмотреть файл

@ -3,19 +3,6 @@ const knex = require(`@/db/knex`)
const Objects = () => knex('objects') const Objects = () => knex('objects')
module.exports = { module.exports = {
async getObjectsStream({ streamId, objectIds }) {
const res = Objects()
.whereIn('id', objectIds)
.andWhere('streamId', streamId)
.orderBy('id')
.select(
knex.raw(
'"id", "speckleType", "totalChildrenCount", "totalChildrenCountByDepth", "createdAt", data::text as "dataText"'
)
)
return res.stream({ highWaterMark: 500 })
},
async hasObjects({ streamId, objectIds }) { async hasObjects({ streamId, objectIds }) {
const dbRes = await Objects() const dbRes = await Objects()
.whereIn('id', objectIds) .whereIn('id', objectIds)