From 9d90451d1c14a630c8751b96049f4ec5d5cae4ef Mon Sep 17 00:00:00 2001 From: Kristaps Fabians Geikins Date: Mon, 21 Oct 2024 17:44:30 +0300 Subject: [PATCH] chore(server): core IoC #98 - hasObjectsFactory --- .../modules/core/domain/objects/operations.ts | 5 +++++ .../modules/core/repositories/objects.ts | 22 +++++++++++++++++++ .../server/modules/core/rest/diffUpload.ts | 7 ++++-- .../server/modules/core/services/objects.js | 21 ------------------ 4 files changed, 32 insertions(+), 23 deletions(-) delete mode 100644 packages/server/modules/core/services/objects.js diff --git a/packages/server/modules/core/domain/objects/operations.ts b/packages/server/modules/core/domain/objects/operations.ts index efeb2ddd8..7e9de7115 100644 --- a/packages/server/modules/core/domain/objects/operations.ts +++ b/packages/server/modules/core/domain/objects/operations.ts @@ -85,6 +85,11 @@ export type GetObjectChildren = (params: { cursor: string | null }> +export type HasObjects = (params: { + streamId: string + objectIds: string[] +}) => Promise<{ [objectId: string]: boolean }> + export type GetObjectChildrenQuery = (params: { streamId: string objectId: string diff --git a/packages/server/modules/core/repositories/objects.ts b/packages/server/modules/core/repositories/objects.ts index dbe8444c6..851bf78fa 100644 --- a/packages/server/modules/core/repositories/objects.ts +++ b/packages/server/modules/core/repositories/objects.ts @@ -15,6 +15,7 @@ import { GetObjectChildrenStream, GetObjectsStream, GetStreamObjects, + HasObjects, StoreClosuresIfNotFound, StoreObjects, StoreObjectsIfNotFound, @@ -184,6 +185,27 @@ export const getObjectsStreamFactory = return res.stream({ highWaterMark: 500 }) } +export const hasObjectsFactory = + (deps: { db: Knex }): HasObjects => + async ({ streamId, objectIds }) => { + const dbRes = await tables + .objects(deps.db) + .whereIn('id', objectIds) + .andWhere('streamId', streamId) + .select('id') + + const res: Record = {} + // eslint-disable-next-line @typescript-eslint/no-for-in-array + for (const i in objectIds) { + res[objectIds[i]] = false + } + // eslint-disable-next-line @typescript-eslint/no-for-in-array + for (const i in dbRes) { + res[dbRes[i].id] = true + } + return res + } + export const getObjectChildrenFactory = (deps: { db: Knex }): GetObjectChildren => async ({ streamId, objectId, limit, depth, select, cursor }) => { diff --git a/packages/server/modules/core/rest/diffUpload.ts b/packages/server/modules/core/rest/diffUpload.ts index 848f4319c..724cf6a16 100644 --- a/packages/server/modules/core/rest/diffUpload.ts +++ b/packages/server/modules/core/rest/diffUpload.ts @@ -1,11 +1,14 @@ import zlib from 'zlib' import { corsMiddleware } from '@/modules/core/configs/cors' import { validatePermissionsWriteStream } from '@/modules/core/rest/authUtils' -import { hasObjects } from '@/modules/core/services/objects' import { chunk } from 'lodash' import type { Application } from 'express' +import { hasObjectsFactory } from '@/modules/core/repositories/objects' +import { db } from '@/db/knex' export default (app: Application) => { + const hasObjects = hasObjectsFactory({ db }) + app.options('/api/diff/:streamId', corsMiddleware()) app.post('/api/diff/:streamId', corsMiddleware(), async (req, res) => { @@ -31,7 +34,7 @@ export default (app: Application) => { objectListChunks.map((objectListChunk) => hasObjects({ streamId: req.params.streamId, - objectIds: objectListChunk + objectIds: objectListChunk as string[] }) ) ) diff --git a/packages/server/modules/core/services/objects.js b/packages/server/modules/core/services/objects.js deleted file mode 100644 index 528969736..000000000 --- a/packages/server/modules/core/services/objects.js +++ /dev/null @@ -1,21 +0,0 @@ -const knex = require(`@/db/knex`) - -const Objects = () => knex('objects') - -module.exports = { - async hasObjects({ streamId, objectIds }) { - const dbRes = await Objects() - .whereIn('id', objectIds) - .andWhere('streamId', streamId) - .select('id') - - const res = {} - for (const i in objectIds) { - res[objectIds[i]] = false - } - for (const i in dbRes) { - res[dbRes[i].id] = true - } - return res - } -}