Flowise/packages/server/src/services/variables/index.ts

134 lines
4.6 KiB
TypeScript

import { StatusCodes } from 'http-status-codes'
import { getRunningExpressApp } from '../../utils/getRunningExpressApp'
import { Variable } from '../../database/entities/Variable'
import { InternalFlowiseError } from '../../errors/internalFlowiseError'
import { getErrorMessage } from '../../errors/utils'
const createVariable = async (newVariable: Variable) => {
try {
const appServer = getRunningExpressApp()
const variable = await appServer.AppDataSource.getRepository(Variable).create(newVariable)
const dbResponse = await appServer.AppDataSource.getRepository(Variable).save(variable)
return dbResponse
} catch (error) {
throw new InternalFlowiseError(
StatusCodes.INTERNAL_SERVER_ERROR,
`Error: variablesServices.createVariable - ${getErrorMessage(error)}`
)
}
}
const deleteVariable = async (variableId: string): Promise<any> => {
try {
const appServer = getRunningExpressApp()
const dbResponse = await appServer.AppDataSource.getRepository(Variable).delete({ id: variableId })
return dbResponse
} catch (error) {
throw new InternalFlowiseError(
StatusCodes.INTERNAL_SERVER_ERROR,
`Error: variablesServices.deleteVariable - ${getErrorMessage(error)}`
)
}
}
const getAllVariables = async () => {
try {
const appServer = getRunningExpressApp()
const dbResponse = await appServer.AppDataSource.getRepository(Variable).find()
return dbResponse
} catch (error) {
throw new InternalFlowiseError(
StatusCodes.INTERNAL_SERVER_ERROR,
`Error: variablesServices.getAllVariables - ${getErrorMessage(error)}`
)
}
}
const getVariableById = async (variableId: string) => {
try {
const appServer = getRunningExpressApp()
const dbResponse = await appServer.AppDataSource.getRepository(Variable).findOneBy({
id: variableId
})
return dbResponse
} catch (error) {
throw new InternalFlowiseError(
StatusCodes.INTERNAL_SERVER_ERROR,
`Error: variablesServices.getVariableById - ${getErrorMessage(error)}`
)
}
}
const updateVariable = async (variable: Variable, updatedVariable: Variable) => {
try {
const appServer = getRunningExpressApp()
const tmpUpdatedVariable = await appServer.AppDataSource.getRepository(Variable).merge(variable, updatedVariable)
const dbResponse = await appServer.AppDataSource.getRepository(Variable).save(tmpUpdatedVariable)
return dbResponse
} catch (error) {
throw new InternalFlowiseError(
StatusCodes.INTERNAL_SERVER_ERROR,
`Error: variablesServices.updateVariable - ${getErrorMessage(error)}`
)
}
}
const importVariables = async (newVariables: Partial<Variable>[]): Promise<any> => {
try {
const appServer = getRunningExpressApp()
// step 1 - check whether array is zero
if (newVariables.length == 0) return
// step 2 - check whether ids are duplicate in database
let ids = '('
let count: number = 0
const lastCount = newVariables.length - 1
newVariables.forEach((newVariable) => {
ids += `'${newVariable.id}'`
if (lastCount != count) ids += ','
if (lastCount == count) ids += ')'
count += 1
})
const selectResponse = await appServer.AppDataSource.getRepository(Variable)
.createQueryBuilder('v')
.select('v.id')
.where(`v.id IN ${ids}`)
.getMany()
const foundIds = selectResponse.map((response) => {
return response.id
})
// step 3 - remove ids that are only duplicate
const prepVariables: Partial<Variable>[] = newVariables.map((newVariable) => {
let id: string = ''
if (newVariable.id) id = newVariable.id
if (foundIds.includes(id)) {
newVariable.id = undefined
newVariable.name += ' (1)'
}
return newVariable
})
// step 4 - transactional insert array of entities
const insertResponse = await appServer.AppDataSource.getRepository(Variable).insert(prepVariables)
return insertResponse
} catch (error) {
throw new InternalFlowiseError(
StatusCodes.INTERNAL_SERVER_ERROR,
`Error: variableService.importVariables - ${getErrorMessage(error)}`
)
}
}
export default {
createVariable,
deleteVariable,
getAllVariables,
getVariableById,
updateVariable,
importVariables
}