Update manifest structure (#17547)
Move all sync entities in an `entities` key. Rename functions to
logicFunctions
```json
{
application: {
...
},
entities: {
objects: [],
logicFunctions: [],
...
}
}
```
This commit is contained in:
+2
-2
@@ -319,8 +319,8 @@ export abstract class CommonBaseQueryRunnerService<
|
||||
);
|
||||
}
|
||||
|
||||
if (isDefined(authContext.application?.defaultLogicFunctionRoleId)) {
|
||||
return authContext.application?.defaultLogicFunctionRoleId;
|
||||
if (isDefined(authContext.application?.defaultRoleId)) {
|
||||
return authContext.application?.defaultRoleId;
|
||||
}
|
||||
|
||||
if (!isDefined(authContext.userWorkspaceId)) {
|
||||
|
||||
+70
-137
@@ -3,14 +3,14 @@ import { Injectable, Logger } from '@nestjs/common';
|
||||
import { parse } from 'path';
|
||||
|
||||
import {
|
||||
ApplicationManifest,
|
||||
Manifest,
|
||||
FieldManifest,
|
||||
ObjectExtensionManifest,
|
||||
ObjectManifest,
|
||||
RelationFieldManifest,
|
||||
RoleManifest,
|
||||
LogicFunctionManifest,
|
||||
LogicFunctionTriggerManifest,
|
||||
ObjectFieldManifest,
|
||||
RelationFieldManifest,
|
||||
} from 'twenty-shared/application';
|
||||
import { FieldMetadataType, HTTPMethod, Sources } from 'twenty-shared/types';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
@@ -29,7 +29,6 @@ import { FieldMetadataService } from 'src/engine/metadata-modules/field-metadata
|
||||
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service';
|
||||
import { findFlatEntitiesByApplicationId } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entities-by-application-id.util';
|
||||
import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||
import { buildObjectIdByNameMaps } from 'src/engine/metadata-modules/flat-object-metadata/utils/build-object-id-by-name-maps.util';
|
||||
import { ObjectMetadataService } from 'src/engine/metadata-modules/object-metadata/object-metadata.service';
|
||||
import { FieldPermissionService } from 'src/engine/metadata-modules/object-permission/field-permission/field-permission.service';
|
||||
import { ObjectPermissionService } from 'src/engine/metadata-modules/object-permission/object-permission.service';
|
||||
@@ -87,21 +86,21 @@ export class ApplicationSyncService {
|
||||
applicationId: application.id,
|
||||
});
|
||||
|
||||
await this.syncRelations({
|
||||
await this.syncObjectRelations({
|
||||
objectsToSync: manifest.objects,
|
||||
workspaceId,
|
||||
applicationId: application.id,
|
||||
});
|
||||
|
||||
if (manifest.objectExtensions && manifest.objectExtensions.length > 0) {
|
||||
await this.syncObjectExtensionsOrThrow({
|
||||
objectExtensionsToSync: manifest.objectExtensions,
|
||||
if (manifest.fields.length > 0) {
|
||||
await this.syncFieldsOrThrow({
|
||||
fieldsToSync: manifest.fields,
|
||||
workspaceId,
|
||||
applicationId: application.id,
|
||||
});
|
||||
}
|
||||
|
||||
if (manifest.functions.length > 0) {
|
||||
if (manifest.logicFunctions.length > 0) {
|
||||
if (!isDefined(application.logicFunctionLayerId)) {
|
||||
throw new ApplicationException(
|
||||
`Failed to sync logic function, could not find a logic function layer.`,
|
||||
@@ -110,7 +109,7 @@ export class ApplicationSyncService {
|
||||
}
|
||||
|
||||
await this.syncLogicFunctions({
|
||||
logicFunctionsToSync: manifest.functions,
|
||||
logicFunctionsToSync: manifest.logicFunctions,
|
||||
code: manifest.sources,
|
||||
workspaceId,
|
||||
applicationId: application.id,
|
||||
@@ -148,13 +147,13 @@ export class ApplicationSyncService {
|
||||
version: packageJson.version,
|
||||
sourcePath: 'cli-sync', // Placeholder for CLI-synced apps
|
||||
logicFunctionLayerId: null,
|
||||
defaultLogicFunctionRoleId: null,
|
||||
defaultRoleId: null,
|
||||
workspaceId,
|
||||
}));
|
||||
|
||||
let logicFunctionLayerId = application.logicFunctionLayerId;
|
||||
|
||||
if (manifest.functions.length > 0) {
|
||||
if (manifest.logicFunctions.length > 0) {
|
||||
if (!isDefined(logicFunctionLayerId)) {
|
||||
logicFunctionLayerId = (
|
||||
await this.logicFunctionLayerService.create(
|
||||
@@ -190,7 +189,7 @@ export class ApplicationSyncService {
|
||||
description: manifest.application.description,
|
||||
version: packageJson.version,
|
||||
logicFunctionLayerId,
|
||||
defaultLogicFunctionRoleId: null,
|
||||
defaultRoleId: null,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -199,13 +198,13 @@ export class ApplicationSyncService {
|
||||
workspaceId,
|
||||
applicationId,
|
||||
}: {
|
||||
manifest: ApplicationManifest;
|
||||
manifest: Manifest;
|
||||
workspaceId: string;
|
||||
applicationId: string;
|
||||
}) {
|
||||
let defaultLogicFunctionRoleId: string | null = null;
|
||||
let defaultRoleId: string | null = null;
|
||||
|
||||
for (const role of manifest.roles ?? []) {
|
||||
for (const role of manifest.roles) {
|
||||
let existingRole = await this.roleService.getRoleByUniversalIdentifier({
|
||||
universalIdentifier: role.universalIdentifier,
|
||||
workspaceId,
|
||||
@@ -235,15 +234,15 @@ export class ApplicationSyncService {
|
||||
|
||||
if (
|
||||
existingRole.universalIdentifier ===
|
||||
manifest.application.functionRoleUniversalIdentifier
|
||||
manifest.application.defaultRoleUniversalIdentifier
|
||||
) {
|
||||
defaultLogicFunctionRoleId = existingRole.id;
|
||||
defaultRoleId = existingRole.id;
|
||||
}
|
||||
}
|
||||
|
||||
if (isDefined(defaultLogicFunctionRoleId)) {
|
||||
if (isDefined(defaultRoleId)) {
|
||||
await this.applicationService.update(applicationId, {
|
||||
defaultLogicFunctionRoleId: defaultLogicFunctionRoleId,
|
||||
defaultRoleId: defaultRoleId,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -269,19 +268,13 @@ export class ApplicationSyncService {
|
||||
},
|
||||
);
|
||||
|
||||
const { idByNameSingular: objectIdByNameSingular } =
|
||||
buildObjectIdByNameMaps(flatObjectMetadataMaps);
|
||||
|
||||
const formattedObjectPermissions = role.objectPermissions
|
||||
?.map((perm) => ({
|
||||
...perm,
|
||||
objectMetadataId: isDefined(perm.objectNameSingular)
|
||||
? objectIdByNameSingular[perm.objectNameSingular]
|
||||
: isDefined(perm.objectUniversalIdentifier)
|
||||
? flatObjectMetadataMaps.idByUniversalIdentifier[
|
||||
perm.objectUniversalIdentifier
|
||||
]
|
||||
: undefined,
|
||||
objectMetadataId:
|
||||
flatObjectMetadataMaps.idByUniversalIdentifier[
|
||||
perm.objectUniversalIdentifier
|
||||
],
|
||||
}))
|
||||
.filter((perm): perm is typeof perm & { objectMetadataId: string } =>
|
||||
isDefined(perm.objectMetadataId),
|
||||
@@ -299,32 +292,15 @@ export class ApplicationSyncService {
|
||||
|
||||
const formattedFieldPermissions = role?.fieldPermissions
|
||||
?.map((perm) => {
|
||||
const objectMetadataId = isDefined(perm.objectNameSingular)
|
||||
? objectIdByNameSingular[perm.objectNameSingular]
|
||||
: isDefined(perm.objectUniversalIdentifier)
|
||||
? flatObjectMetadataMaps.idByUniversalIdentifier[
|
||||
perm.objectUniversalIdentifier
|
||||
]
|
||||
: undefined;
|
||||
const objectMetadataId =
|
||||
flatObjectMetadataMaps.idByUniversalIdentifier[
|
||||
perm.objectUniversalIdentifier
|
||||
];
|
||||
|
||||
const fieldMetadataId = isDefined(objectMetadataId)
|
||||
? isDefined(perm.fieldName)
|
||||
? Object.values(flatFieldMetadataMaps.byId).find(
|
||||
(flatField) =>
|
||||
isDefined(flatField) &&
|
||||
flatField.objectMetadataId === objectMetadataId &&
|
||||
flatField.name === perm.fieldName,
|
||||
)?.id
|
||||
: isDefined(perm.fieldUniversalIdentifier)
|
||||
? Object.values(flatFieldMetadataMaps.byId).find(
|
||||
(flatField) =>
|
||||
isDefined(flatField) &&
|
||||
flatField.objectMetadataId === objectMetadataId &&
|
||||
flatField.universalIdentifier ===
|
||||
perm.fieldUniversalIdentifier,
|
||||
)?.id
|
||||
: undefined
|
||||
: undefined;
|
||||
const fieldMetadataId =
|
||||
flatFieldMetadataMaps.idByUniversalIdentifier[
|
||||
perm.fieldUniversalIdentifier
|
||||
];
|
||||
|
||||
return {
|
||||
...perm,
|
||||
@@ -365,7 +341,7 @@ export class ApplicationSyncService {
|
||||
}
|
||||
|
||||
private isRelationFieldManifest(
|
||||
field: FieldManifest | RelationFieldManifest,
|
||||
field: ObjectFieldManifest,
|
||||
): field is RelationFieldManifest {
|
||||
return this.isFieldTypeRelation(field.type);
|
||||
}
|
||||
@@ -374,26 +350,22 @@ export class ApplicationSyncService {
|
||||
return type === FieldMetadataType.RELATION;
|
||||
}
|
||||
|
||||
private async syncFieldsWithoutRelations({
|
||||
private async syncObjectFieldsWithoutRelations({
|
||||
objectId,
|
||||
fieldsToSync: allFieldsToSync,
|
||||
fieldsToSync,
|
||||
workspaceId,
|
||||
applicationId,
|
||||
}: {
|
||||
objectId: string;
|
||||
workspaceId: string;
|
||||
applicationId: string;
|
||||
fieldsToSync?: (FieldManifest | RelationFieldManifest)[];
|
||||
fieldsToSync: ObjectFieldManifest[];
|
||||
}) {
|
||||
if (!isDefined(allFieldsToSync)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const fieldsToSync = allFieldsToSync.filter(
|
||||
const fieldsWithoutRelation = fieldsToSync.filter(
|
||||
(field): field is FieldManifest => !this.isRelationFieldManifest(field),
|
||||
);
|
||||
|
||||
if (fieldsToSync.length === 0) {
|
||||
if (fieldsWithoutRelation.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -414,7 +386,7 @@ export class ApplicationSyncService {
|
||||
!this.isFieldTypeRelation(field.type),
|
||||
) as FlatFieldMetadata[];
|
||||
|
||||
const fieldsToSyncUniversalIds = fieldsToSync.map(
|
||||
const fieldsToSyncUniversalIds = fieldsWithoutRelation.map(
|
||||
(field) => field.universalIdentifier,
|
||||
);
|
||||
|
||||
@@ -436,7 +408,7 @@ export class ApplicationSyncService {
|
||||
fieldsToSyncUniversalIds.includes(field.universalIdentifier),
|
||||
);
|
||||
|
||||
const fieldsToCreate = fieldsToSync.filter(
|
||||
const fieldsToCreate = fieldsWithoutRelation.filter(
|
||||
(fieldToSync) =>
|
||||
!existingFieldsStandardIds.includes(fieldToSync.universalIdentifier),
|
||||
);
|
||||
@@ -456,7 +428,7 @@ export class ApplicationSyncService {
|
||||
}
|
||||
|
||||
for (const fieldToUpdate of fieldsToUpdate) {
|
||||
const fieldToSync = fieldsToSync.find(
|
||||
const fieldToSync = fieldsWithoutRelation.find(
|
||||
(field) =>
|
||||
field.universalIdentifier === fieldToUpdate.universalIdentifier,
|
||||
);
|
||||
@@ -512,21 +484,25 @@ export class ApplicationSyncService {
|
||||
}
|
||||
}
|
||||
|
||||
private async syncRelationFields({
|
||||
private async syncObjectFieldsRelationOnly({
|
||||
objectId,
|
||||
relationsToSync,
|
||||
fieldsToSync,
|
||||
workspaceId,
|
||||
applicationId,
|
||||
flatObjectMetadataMaps,
|
||||
}: {
|
||||
objectId: string;
|
||||
relationsToSync: RelationFieldManifest[];
|
||||
fieldsToSync: ObjectFieldManifest[];
|
||||
workspaceId: string;
|
||||
applicationId: string;
|
||||
flatObjectMetadataMaps: {
|
||||
idByUniversalIdentifier: Partial<Record<string, string>>;
|
||||
};
|
||||
}) {
|
||||
const relationFields = fieldsToSync.filter((field) =>
|
||||
this.isRelationFieldManifest(field),
|
||||
);
|
||||
|
||||
const { flatFieldMetadataMaps } =
|
||||
await this.flatEntityMapsCacheService.getOrRecomputeManyOrAllFlatEntityMaps(
|
||||
{
|
||||
@@ -535,7 +511,7 @@ export class ApplicationSyncService {
|
||||
},
|
||||
);
|
||||
|
||||
for (const relation of relationsToSync) {
|
||||
for (const relation of relationFields) {
|
||||
const existingRelationField = Object.values(
|
||||
flatFieldMetadataMaps.byId,
|
||||
).find(
|
||||
@@ -677,7 +653,7 @@ export class ApplicationSyncService {
|
||||
workspaceId,
|
||||
});
|
||||
|
||||
await this.syncFieldsWithoutRelations({
|
||||
await this.syncObjectFieldsWithoutRelations({
|
||||
fieldsToSync: objectToSync.fields,
|
||||
objectId: objectToUpdate.id,
|
||||
workspaceId,
|
||||
@@ -710,7 +686,7 @@ export class ApplicationSyncService {
|
||||
workspaceId,
|
||||
});
|
||||
|
||||
await this.syncFieldsWithoutRelations({
|
||||
await this.syncObjectFieldsWithoutRelations({
|
||||
fieldsToSync: objectToCreate.fields,
|
||||
objectId: createdObject.id,
|
||||
workspaceId,
|
||||
@@ -719,7 +695,7 @@ export class ApplicationSyncService {
|
||||
}
|
||||
}
|
||||
|
||||
private async syncRelations({
|
||||
private async syncObjectRelations({
|
||||
objectsToSync,
|
||||
workspaceId,
|
||||
applicationId,
|
||||
@@ -737,15 +713,6 @@ export class ApplicationSyncService {
|
||||
);
|
||||
|
||||
for (const objectToSync of objectsToSync) {
|
||||
const relationFields = objectToSync.fields.filter(
|
||||
(field): field is RelationFieldManifest =>
|
||||
this.isRelationFieldManifest(field),
|
||||
);
|
||||
|
||||
if (relationFields.length === 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const sourceObjectId =
|
||||
flatObjectMetadataMaps.idByUniversalIdentifier[
|
||||
objectToSync.universalIdentifier
|
||||
@@ -758,9 +725,9 @@ export class ApplicationSyncService {
|
||||
);
|
||||
}
|
||||
|
||||
await this.syncRelationFields({
|
||||
await this.syncObjectFieldsRelationOnly({
|
||||
objectId: sourceObjectId,
|
||||
relationsToSync: relationFields,
|
||||
fieldsToSync: objectToSync.fields,
|
||||
workspaceId,
|
||||
applicationId,
|
||||
flatObjectMetadataMaps,
|
||||
@@ -768,12 +735,12 @@ export class ApplicationSyncService {
|
||||
}
|
||||
}
|
||||
|
||||
private async syncObjectExtensionsOrThrow({
|
||||
objectExtensionsToSync,
|
||||
private async syncFieldsOrThrow({
|
||||
fieldsToSync,
|
||||
workspaceId,
|
||||
applicationId,
|
||||
}: {
|
||||
objectExtensionsToSync: ObjectExtensionManifest[];
|
||||
fieldsToSync: FieldManifest[];
|
||||
workspaceId: string;
|
||||
applicationId: string;
|
||||
}) {
|
||||
@@ -785,36 +752,11 @@ export class ApplicationSyncService {
|
||||
},
|
||||
);
|
||||
|
||||
const { idByNameSingular: objectIdByNameSingular } =
|
||||
buildObjectIdByNameMaps(flatObjectMetadataMaps);
|
||||
|
||||
for (const objectExtension of objectExtensionsToSync) {
|
||||
const { targetObject, fields } = objectExtension;
|
||||
|
||||
let targetObjectId: string | undefined;
|
||||
|
||||
if (isDefined(targetObject.nameSingular)) {
|
||||
targetObjectId = objectIdByNameSingular[targetObject.nameSingular];
|
||||
|
||||
if (!isDefined(targetObjectId)) {
|
||||
throw new ApplicationException(
|
||||
`Failed to find target object with nameSingular "${targetObject.nameSingular}" for object extension`,
|
||||
ApplicationExceptionCode.OBJECT_NOT_FOUND,
|
||||
);
|
||||
}
|
||||
} else if (isDefined(targetObject.universalIdentifier)) {
|
||||
targetObjectId =
|
||||
flatObjectMetadataMaps.idByUniversalIdentifier[
|
||||
targetObject.universalIdentifier
|
||||
];
|
||||
|
||||
if (!isDefined(targetObjectId)) {
|
||||
throw new ApplicationException(
|
||||
`Failed to find target object with universalIdentifier "${targetObject.universalIdentifier}" for object extension`,
|
||||
ApplicationExceptionCode.OBJECT_NOT_FOUND,
|
||||
);
|
||||
}
|
||||
}
|
||||
for (const fieldToSync of fieldsToSync) {
|
||||
const targetObjectId =
|
||||
flatObjectMetadataMaps.idByUniversalIdentifier[
|
||||
fieldToSync.objectUniversalIdentifier
|
||||
];
|
||||
|
||||
if (!isDefined(targetObjectId)) {
|
||||
throw new ApplicationException(
|
||||
@@ -823,29 +765,20 @@ export class ApplicationSyncService {
|
||||
);
|
||||
}
|
||||
|
||||
// Sync regular fields for this extension
|
||||
await this.syncFieldsWithoutRelations({
|
||||
await this.syncObjectFieldsWithoutRelations({
|
||||
objectId: targetObjectId,
|
||||
fieldsToSync: fields,
|
||||
fieldsToSync: [fieldToSync],
|
||||
workspaceId,
|
||||
applicationId,
|
||||
});
|
||||
|
||||
// Sync relation fields for this extension
|
||||
const relationFields = fields.filter(
|
||||
(field): field is RelationFieldManifest =>
|
||||
this.isRelationFieldManifest(field),
|
||||
);
|
||||
|
||||
if (relationFields.length > 0) {
|
||||
await this.syncRelationFields({
|
||||
objectId: targetObjectId,
|
||||
relationsToSync: relationFields,
|
||||
workspaceId,
|
||||
applicationId,
|
||||
flatObjectMetadataMaps,
|
||||
});
|
||||
}
|
||||
await this.syncObjectFieldsRelationOnly({
|
||||
objectId: targetObjectId,
|
||||
fieldsToSync: [fieldToSync],
|
||||
workspaceId,
|
||||
applicationId,
|
||||
flatObjectMetadataMaps,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -57,10 +57,10 @@ export class ApplicationEntity extends WorkspaceRelatedEntity {
|
||||
logicFunctionLayerId: string | null;
|
||||
|
||||
@Column({ nullable: true, type: 'uuid' })
|
||||
defaultLogicFunctionRoleId: string | null;
|
||||
defaultRoleId: string | null;
|
||||
|
||||
@Field(() => RoleDTO, { nullable: true })
|
||||
defaultLogicFunctionRole: RoleDTO | null;
|
||||
defaultRole: RoleDTO | null;
|
||||
|
||||
@Column({ nullable: false, type: 'boolean', default: true })
|
||||
canBeUninstalled: boolean;
|
||||
|
||||
@@ -7,8 +7,6 @@ import {
|
||||
import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
|
||||
import path, { join } from 'path';
|
||||
|
||||
import GraphQLUpload from 'graphql-upload/GraphQLUpload.mjs';
|
||||
import { PermissionFlagType } from 'twenty-shared/constants';
|
||||
import { FileFolder } from 'twenty-shared/types';
|
||||
@@ -164,33 +162,16 @@ export class ApplicationResolver {
|
||||
);
|
||||
}
|
||||
|
||||
const stream = createReadStream();
|
||||
const buffer = await streamToBuffer(stream);
|
||||
const buffer = await streamToBuffer(createReadStream());
|
||||
|
||||
const dirname = path.dirname(filePath);
|
||||
|
||||
const filename = path.basename(filePath);
|
||||
|
||||
const folderPath = join(
|
||||
`workspace-${workspaceId}`,
|
||||
applicationUniversalIdentifier,
|
||||
fileFolder,
|
||||
dirname,
|
||||
);
|
||||
|
||||
await this.fileStorageService.writeFile({
|
||||
file: buffer,
|
||||
name: filename,
|
||||
folder: folderPath,
|
||||
return await this.fileStorageService.writeFile_v2({
|
||||
sourceFile: buffer,
|
||||
mimeType: mimetype,
|
||||
});
|
||||
|
||||
const createdFile = this.fileRepository.create({
|
||||
path: join(folderPath, filename),
|
||||
size: buffer.length,
|
||||
fileFolder,
|
||||
applicationUniversalIdentifier,
|
||||
workspaceId,
|
||||
resourcePath: filePath,
|
||||
settings: { isTemporaryFile: false, toDelete: false },
|
||||
});
|
||||
|
||||
return await this.fileRepository.save(createdFile);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,17 +33,14 @@ export class ApplicationService {
|
||||
where: { id: applicationId, workspaceId },
|
||||
});
|
||||
|
||||
if (
|
||||
!isDefined(application) ||
|
||||
!isDefined(application.defaultLogicFunctionRoleId)
|
||||
) {
|
||||
if (!isDefined(application) || !isDefined(application.defaultRoleId)) {
|
||||
throw new ApplicationException(
|
||||
`Could not find application ${applicationId}`,
|
||||
ApplicationExceptionCode.APPLICATION_NOT_FOUND,
|
||||
);
|
||||
}
|
||||
|
||||
return application.defaultLogicFunctionRoleId;
|
||||
return application.defaultRoleId;
|
||||
}
|
||||
|
||||
async findWorkspaceTwentyStandardAndCustomApplicationOrThrow({
|
||||
|
||||
@@ -47,7 +47,7 @@ export class ApplicationDTO {
|
||||
@IsOptional()
|
||||
@IsString()
|
||||
@Field({ nullable: true })
|
||||
defaultLogicFunctionRoleId?: string;
|
||||
defaultRoleId?: string;
|
||||
|
||||
@IsOptional()
|
||||
@Field(() => RoleDTO, { nullable: true })
|
||||
|
||||
+2
-2
@@ -1,12 +1,12 @@
|
||||
import { ArgsType, Field } from '@nestjs/graphql';
|
||||
|
||||
import GraphQLJSON from 'graphql-type-json';
|
||||
import { ApplicationManifest, PackageJson } from 'twenty-shared/application';
|
||||
import { Manifest, PackageJson } from 'twenty-shared/application';
|
||||
|
||||
@ArgsType()
|
||||
export class ApplicationInput {
|
||||
@Field(() => GraphQLJSON, { nullable: false })
|
||||
manifest: ApplicationManifest;
|
||||
manifest: Manifest;
|
||||
|
||||
@Field(() => GraphQLJSON, { nullable: false })
|
||||
packageJson: PackageJson;
|
||||
|
||||
+2
-2
@@ -126,9 +126,9 @@ export class CommonApiContextBuilderService {
|
||||
);
|
||||
} else if (
|
||||
isApplicationAuthContext(authContext) &&
|
||||
isDefined(authContext.application.defaultLogicFunctionRoleId)
|
||||
isDefined(authContext.application.defaultRoleId)
|
||||
) {
|
||||
roleId = authContext.application.defaultLogicFunctionRoleId;
|
||||
roleId = authContext.application.defaultRoleId;
|
||||
} else if (isUserAuthContext(authContext)) {
|
||||
const userWorkspaceRoleId =
|
||||
await this.userRoleService.getRoleIdForUserWorkspace({
|
||||
|
||||
+2
-2
@@ -29,8 +29,8 @@ const MOCK_FLAT_APPLICATION: FlatApplication = {
|
||||
sourceType: 'local',
|
||||
sourcePath: '',
|
||||
logicFunctionLayerId: null,
|
||||
defaultLogicFunctionRoleId: null,
|
||||
defaultLogicFunctionRole: null,
|
||||
defaultRoleId: null,
|
||||
defaultRole: null,
|
||||
canBeUninstalled: false,
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date(),
|
||||
|
||||
+2
-2
@@ -24,8 +24,8 @@ const MOCK_FLAT_APPLICATION: FlatApplication = {
|
||||
sourceType: 'local',
|
||||
sourcePath: '',
|
||||
logicFunctionLayerId: null,
|
||||
defaultLogicFunctionRoleId: null,
|
||||
defaultLogicFunctionRole: null,
|
||||
defaultRoleId: null,
|
||||
defaultRole: null,
|
||||
canBeUninstalled: false,
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date(),
|
||||
|
||||
-9
@@ -1,9 +0,0 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
|
||||
import { FunctionBuildService } from 'src/engine/metadata-modules/function-build/function-build.service';
|
||||
|
||||
@Module({
|
||||
providers: [FunctionBuildService],
|
||||
exports: [FunctionBuildService],
|
||||
})
|
||||
export class FunctionBuildModule {}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
|
||||
import { LogicFunctionBuildService } from 'src/engine/metadata-modules/logic-function-build/logic-function-build.service';
|
||||
|
||||
@Module({
|
||||
providers: [LogicFunctionBuildService],
|
||||
exports: [LogicFunctionBuildService],
|
||||
})
|
||||
export class LogicFunctionBuildModule {}
|
||||
+1
-1
@@ -20,7 +20,7 @@ export type FunctionBuildParams = {
|
||||
};
|
||||
|
||||
@Injectable()
|
||||
export class FunctionBuildService {
|
||||
export class LogicFunctionBuildService {
|
||||
constructor(private readonly fileStorageService: FileStorageService) {}
|
||||
|
||||
async isBuilt({
|
||||
+2
-2
@@ -14,7 +14,7 @@ import { FileModule } from 'src/engine/core-modules/file/file.module';
|
||||
import { SecretEncryptionModule } from 'src/engine/core-modules/secret-encryption/secret-encryption.module';
|
||||
import { ThrottlerModule } from 'src/engine/core-modules/throttler/throttler.module';
|
||||
import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module';
|
||||
import { FunctionBuildModule } from 'src/engine/metadata-modules/function-build/function-build.module';
|
||||
import { LogicFunctionBuildModule } from 'src/engine/metadata-modules/logic-function-build/logic-function-build.module';
|
||||
import { LogicFunctionLayerModule } from 'src/engine/metadata-modules/logic-function-layer/logic-function-layer.module';
|
||||
import { LogicFunctionTriggerJob } from 'src/engine/metadata-modules/logic-function/jobs/logic-function-trigger.job';
|
||||
import { LogicFunctionEntity } from 'src/engine/metadata-modules/logic-function/logic-function.entity';
|
||||
@@ -40,7 +40,7 @@ import { WorkspaceMigrationModule } from 'src/engine/workspace-manager/workspace
|
||||
PermissionsModule,
|
||||
WorkspaceManyOrAllFlatEntityMapsCacheModule,
|
||||
WorkspaceMigrationModule,
|
||||
FunctionBuildModule,
|
||||
LogicFunctionBuildModule,
|
||||
LogicFunctionLayerModule,
|
||||
SubscriptionsModule,
|
||||
WorkspaceCacheModule,
|
||||
|
||||
+2
-2
@@ -43,7 +43,7 @@ import { WorkspaceCacheService } from 'src/engine/workspace-cache/services/works
|
||||
import { WorkspaceMigrationBuilderException } from 'src/engine/workspace-manager/workspace-migration/exceptions/workspace-migration-builder-exception';
|
||||
import { WorkspaceMigrationValidateBuildAndRunService } from 'src/engine/workspace-manager/workspace-migration/services/workspace-migration-validate-build-and-run-service';
|
||||
import { cleanServerUrl } from 'src/utils/clean-server-url';
|
||||
import { FunctionBuildService } from 'src/engine/metadata-modules/function-build/function-build.service';
|
||||
import { LogicFunctionBuildService } from 'src/engine/metadata-modules/logic-function-build/logic-function-build.service';
|
||||
|
||||
const MIN_TOKEN_EXPIRATION_IN_SECONDS = 5;
|
||||
|
||||
@@ -52,7 +52,7 @@ export class LogicFunctionService {
|
||||
constructor(
|
||||
private readonly fileStorageService: FileStorageService,
|
||||
private readonly logicFunctionExecutorService: LogicFunctionExecutorService,
|
||||
private readonly functionBuildService: FunctionBuildService,
|
||||
private readonly functionBuildService: LogicFunctionBuildService,
|
||||
private readonly logicFunctionLayerService: LogicFunctionLayerService,
|
||||
@InjectRepository(LogicFunctionEntity)
|
||||
private readonly logicFunctionRepository: Repository<LogicFunctionEntity>,
|
||||
|
||||
+2
-2
@@ -367,9 +367,9 @@ export class NavigationMenuItemService {
|
||||
|
||||
if (
|
||||
isApplicationAuthContext(authContext) &&
|
||||
isDefined(authContext.application.defaultLogicFunctionRoleId)
|
||||
isDefined(authContext.application.defaultRoleId)
|
||||
) {
|
||||
return authContext.application.defaultLogicFunctionRoleId;
|
||||
return authContext.application.defaultRoleId;
|
||||
}
|
||||
|
||||
if (isUserAuthContext(authContext)) {
|
||||
|
||||
+2
-2
@@ -24,7 +24,7 @@ import {
|
||||
import { CreateLogicFunctionAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/logic-function/types/workspace-migration-logic-function-action.type';
|
||||
import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/workspace-migration-action-runner-args.type';
|
||||
import { FlatLogicFunction } from 'src/engine/metadata-modules/logic-function/types/flat-logic-function.type';
|
||||
import { FunctionBuildService } from 'src/engine/metadata-modules/function-build/function-build.service';
|
||||
import { LogicFunctionBuildService } from 'src/engine/metadata-modules/logic-function-build/logic-function-build.service';
|
||||
|
||||
@Injectable()
|
||||
export class CreateLogicFunctionActionHandlerService extends WorkspaceMigrationRunnerActionHandler(
|
||||
@@ -33,7 +33,7 @@ export class CreateLogicFunctionActionHandlerService extends WorkspaceMigrationR
|
||||
) {
|
||||
constructor(
|
||||
private readonly fileStorageService: FileStorageService,
|
||||
private readonly functionBuildService: FunctionBuildService,
|
||||
private readonly functionBuildService: LogicFunctionBuildService,
|
||||
@InjectRepository(ApplicationEntity)
|
||||
private readonly applicationRepository: Repository<ApplicationEntity>,
|
||||
) {
|
||||
|
||||
+2
-2
@@ -16,7 +16,6 @@ import { FileStorageService } from 'src/engine/core-modules/file-storage/file-st
|
||||
import { LambdaBuildDirectoryManager } from 'src/engine/core-modules/logic-function-executor/drivers/utils/lambda-build-directory-manager';
|
||||
import { LogicFunctionExecutorService } from 'src/engine/core-modules/logic-function-executor/logic-function-executor.service';
|
||||
import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util';
|
||||
import { FunctionBuildService } from 'src/engine/metadata-modules/function-build/function-build.service';
|
||||
import { LogicFunctionEntity } from 'src/engine/metadata-modules/logic-function/logic-function.entity';
|
||||
import {
|
||||
LogicFunctionException,
|
||||
@@ -27,6 +26,7 @@ import { getLogicFunctionBaseFolderPath } from 'src/engine/metadata-modules/logi
|
||||
import { UpdateLogicFunctionAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/logic-function/types/workspace-migration-logic-function-action.type';
|
||||
import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/workspace-migration-action-runner-args.type';
|
||||
import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/from-flat-entity-properties-updates-to-partial-flat-entity';
|
||||
import { LogicFunctionBuildService } from 'src/engine/metadata-modules/logic-function-build/logic-function-build.service';
|
||||
|
||||
@Injectable()
|
||||
export class UpdateLogicFunctionActionHandlerService extends WorkspaceMigrationRunnerActionHandler(
|
||||
@@ -36,7 +36,7 @@ export class UpdateLogicFunctionActionHandlerService extends WorkspaceMigrationR
|
||||
constructor(
|
||||
private readonly fileStorageService: FileStorageService,
|
||||
private readonly logicFunctionExecutorService: LogicFunctionExecutorService,
|
||||
private readonly functionBuildService: FunctionBuildService,
|
||||
private readonly functionBuildService: LogicFunctionBuildService,
|
||||
@InjectRepository(ApplicationEntity)
|
||||
private readonly applicationRepository: Repository<ApplicationEntity>,
|
||||
) {
|
||||
|
||||
+2
-2
@@ -69,13 +69,13 @@ import { UpdateViewGroupActionHandlerService } from 'src/engine/workspace-manage
|
||||
import { CreateViewActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/view/services/create-view-action-handler.service';
|
||||
import { DeleteViewActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/view/services/delete-view-action-handler.service';
|
||||
import { UpdateViewActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/view/services/update-view-action-handler.service';
|
||||
import { FunctionBuildModule } from 'src/engine/metadata-modules/function-build/function-build.module';
|
||||
import { LogicFunctionBuildModule } from 'src/engine/metadata-modules/logic-function-build/logic-function-build.module';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
TypeOrmModule.forFeature([ApplicationEntity]),
|
||||
WorkspaceSchemaManagerModule,
|
||||
FunctionBuildModule,
|
||||
LogicFunctionBuildModule,
|
||||
],
|
||||
providers: [
|
||||
CreateFieldActionHandlerService,
|
||||
|
||||
Reference in New Issue
Block a user