f9ab09c404
# Introduction Cleaner and fewer scope version of https://github.com/twentyhq/twenty/pull/15745 ( removed sync-metadata hack through, too ambitious migration and upgrade ) Please note that this PR won't have any interaction with the existing sync-metadata Which mean that the sync metadata does not update the standard entities applicationId and universalIdentifier, and it won't we will deprecate it on favor of a workspace migration aka twenty-standard app installation ## API Metadata Any operation going through the api metadata nows automatically scope the related entity to the workspace custom application instance. ( optionally passing an applicationId to allow current hacky implem of app sync service ) We need to either ignore the tests or remove the cli status check from the blocking status badges for a PR to be merged ## New workspace Already handled in previous https://github.com/twentyhq/twenty/pull/15625, when a workspace is created it gets created a twenty standard and custom workspace instance All his views and permissions will be prefilled to the its twenty standard app instance with a specific universalIdentifier ## New universalIdentifier At the contrary as before with standardIds, universalIdentifier are unique for a given workspace This means that createdAt field of both object company and opportunity will have a unique universalIdentifier whereas they share the same standardId ## FlatApplication Introduced the flatApplication and cache. Will migrate existing `MetadataName` to be `SyncableMetadataName` in a following PR ## What's next Next we will describe a twenty standard app configuration as json that will be used to generate a workspace migration that will be run instead of the sync metadata, in a nutshell we aim to deprecated the sync metadata So we can standardize any entity to have a non nullable applicationId and universalIdentifier ## Upgrade command Introduced an upgrade command that will create a custom workspace instance for any workspace that do not have one in order to align with the new behavior when creating a new workspace
31 lines
1.0 KiB
TypeScript
31 lines
1.0 KiB
TypeScript
import { v4 as uuidV4 } from 'uuid';
|
|
|
|
import { type CreateRouteTriggerInput } from 'src/engine/metadata-modules/route-trigger/dtos/create-route-trigger.input';
|
|
import { type FlatRouteTrigger } from 'src/engine/metadata-modules/route-trigger/types/flat-route-trigger.type';
|
|
|
|
export const fromCreateRouteTriggerInputToFlatRouteTrigger = ({
|
|
createRouteTriggerInput,
|
|
workspaceId,
|
|
workspaceCustomApplicationId,
|
|
}: {
|
|
createRouteTriggerInput: CreateRouteTriggerInput;
|
|
workspaceId: string;
|
|
workspaceCustomApplicationId: string;
|
|
}): FlatRouteTrigger => {
|
|
const now = new Date();
|
|
const id = uuidV4();
|
|
|
|
return {
|
|
id,
|
|
universalIdentifier: createRouteTriggerInput.universalIdentifier ?? id,
|
|
path: createRouteTriggerInput.path,
|
|
isAuthRequired: createRouteTriggerInput.isAuthRequired,
|
|
httpMethod: createRouteTriggerInput.httpMethod,
|
|
serverlessFunctionId: createRouteTriggerInput.serverlessFunctionId,
|
|
workspaceId,
|
|
createdAt: now,
|
|
updatedAt: now,
|
|
applicationId: workspaceCustomApplicationId,
|
|
};
|
|
};
|