diff --git a/dbal/cpp/src/daemon/server/process_health_check.hpp b/dbal/cpp/src/daemon/server/handlers/process_health_check.hpp similarity index 100% rename from dbal/cpp/src/daemon/server/process_health_check.hpp rename to dbal/cpp/src/daemon/server/handlers/process_health_check.hpp diff --git a/dbal/cpp/src/daemon/server/process_not_found.hpp b/dbal/cpp/src/daemon/server/handlers/process_not_found.hpp similarity index 100% rename from dbal/cpp/src/daemon/server/process_not_found.hpp rename to dbal/cpp/src/daemon/server/handlers/process_not_found.hpp diff --git a/dbal/cpp/src/daemon/server/process_status.hpp b/dbal/cpp/src/daemon/server/handlers/process_status.hpp similarity index 100% rename from dbal/cpp/src/daemon/server/process_status.hpp rename to dbal/cpp/src/daemon/server/handlers/process_status.hpp diff --git a/dbal/cpp/src/daemon/server/process_version.hpp b/dbal/cpp/src/daemon/server/handlers/process_version.hpp similarity index 100% rename from dbal/cpp/src/daemon/server/process_version.hpp rename to dbal/cpp/src/daemon/server/handlers/process_version.hpp diff --git a/dbal/cpp/src/daemon/server/parse_request_line.hpp b/dbal/cpp/src/daemon/server/parsing/parse_request_line.hpp similarity index 100% rename from dbal/cpp/src/daemon/server/parse_request_line.hpp rename to dbal/cpp/src/daemon/server/parsing/parse_request_line.hpp diff --git a/dbal/cpp/src/daemon/server/server_parse_request.hpp b/dbal/cpp/src/daemon/server/parsing/server_parse_request.hpp similarity index 100% rename from dbal/cpp/src/daemon/server/server_parse_request.hpp rename to dbal/cpp/src/daemon/server/parsing/server_parse_request.hpp diff --git a/dbal/cpp/src/daemon/server/to_lowercase.hpp b/dbal/cpp/src/daemon/server/parsing/to_lowercase.hpp similarity index 100% rename from dbal/cpp/src/daemon/server/to_lowercase.hpp rename to dbal/cpp/src/daemon/server/parsing/to_lowercase.hpp diff --git a/dbal/cpp/src/daemon/server/trim_string.hpp b/dbal/cpp/src/daemon/server/parsing/trim_string.hpp similarity index 100% rename from dbal/cpp/src/daemon/server/trim_string.hpp rename to dbal/cpp/src/daemon/server/parsing/trim_string.hpp diff --git a/dbal/cpp/src/daemon/server/validate_content_length.hpp b/dbal/cpp/src/daemon/server/validation_internal/validate_content_length.hpp similarity index 100% rename from dbal/cpp/src/daemon/server/validate_content_length.hpp rename to dbal/cpp/src/daemon/server/validation_internal/validate_content_length.hpp diff --git a/dbal/cpp/src/daemon/server/validate_header.hpp b/dbal/cpp/src/daemon/server/validation_internal/validate_header.hpp similarity index 100% rename from dbal/cpp/src/daemon/server/validate_header.hpp rename to dbal/cpp/src/daemon/server/validation_internal/validate_header.hpp diff --git a/dbal/cpp/src/daemon/server/validate_request_path.hpp b/dbal/cpp/src/daemon/server/validation_internal/validate_request_path.hpp similarity index 100% rename from dbal/cpp/src/daemon/server/validate_request_path.hpp rename to dbal/cpp/src/daemon/server/validation_internal/validate_request_path.hpp diff --git a/dbal/cpp/src/daemon/server/validate_transfer_encoding.hpp b/dbal/cpp/src/daemon/server/validation_internal/validate_transfer_encoding.hpp similarity index 100% rename from dbal/cpp/src/daemon/server/validate_transfer_encoding.hpp rename to dbal/cpp/src/daemon/server/validation_internal/validate_transfer_encoding.hpp diff --git a/frontends/nextjs/src/lib/packages/server/install-package-content.ts b/frontends/nextjs/src/lib/packages/server/install-package-content.ts index 602ecd579..53fe5ca66 100644 --- a/frontends/nextjs/src/lib/packages/server/install-package-content.ts +++ b/frontends/nextjs/src/lib/packages/server/install-package-content.ts @@ -2,6 +2,8 @@ import 'server-only' import { Database } from '@/lib/database' import type { PackageContent } from '@/lib/package-types' +import { mergeByKey } from './merge-by-key' +import { mergeRecords } from './merge-records' export async function installPackageContent(packageId: string, content: PackageContent): Promise { const [schemas, pages, workflows, luaScripts, hierarchy, configs] = await Promise.all([ @@ -13,23 +15,32 @@ export async function installPackageContent(packageId: string, content: PackageC Database.getComponentConfigs(), ]) + const mergedSchemas = mergeByKey(schemas, content.schemas, (schema) => schema.name) + const mergedPages = mergeByKey(pages, content.pages, (page) => page.id) + const mergedWorkflows = mergeByKey(workflows, content.workflows, (workflow) => workflow.id) + const mergedLuaScripts = mergeByKey(luaScripts, content.luaScripts, (script) => script.id) + const mergedHierarchy = mergeRecords(hierarchy, content.componentHierarchy) + const mergedConfigs = mergeRecords(configs, content.componentConfigs) + await Promise.all([ - Database.setSchemas([...schemas, ...content.schemas]), - Database.setPages([...pages, ...content.pages]), - Database.setWorkflows([...workflows, ...content.workflows]), - Database.setLuaScripts([...luaScripts, ...content.luaScripts]), - Database.setComponentHierarchy({ ...hierarchy, ...content.componentHierarchy }), - Database.setComponentConfigs({ ...configs, ...content.componentConfigs }), + Database.setSchemas(mergedSchemas), + Database.setPages(mergedPages), + Database.setWorkflows(mergedWorkflows), + Database.setLuaScripts(mergedLuaScripts), + Database.setComponentHierarchy(mergedHierarchy), + Database.setComponentConfigs(mergedConfigs), ]) if (content.cssClasses) { const cssClasses = await Database.getCssClasses() - await Database.setCssClasses([...cssClasses, ...content.cssClasses]) + const mergedCssClasses = mergeByKey(cssClasses, content.cssClasses, (category) => category.name) + await Database.setCssClasses(mergedCssClasses) } if (content.dropdownConfigs) { const dropdowns = await Database.getDropdownConfigs() - await Database.setDropdownConfigs([...dropdowns, ...content.dropdownConfigs]) + const mergedDropdowns = mergeByKey(dropdowns, content.dropdownConfigs, (config) => config.id) + await Database.setDropdownConfigs(mergedDropdowns) } if (content.seedData) {