Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ export class CreateGroupInConnectionDs {
group_parameters: {
title: string;
connectionId: string;
cedarPolicy?: string | null;
};
creation_info: {
cognitoUserName: string;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
import { ApiProperty } from '@nestjs/swagger';
import { IsNotEmpty, IsString } from 'class-validator';
import { IsNotEmpty, IsOptional, IsString } from 'class-validator';

export class CreateGroupInConnectionDTO {
@IsNotEmpty()
@IsString()
@ApiProperty()
title: string;

@IsOptional()
@IsString()
@ApiProperty({ required: false, nullable: true })
cedarPolicy?: string | null;
Comment on lines +9 to +13
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ export class FoundGroupInConnectionDTO {
@ApiProperty()
isMain: boolean;

@ApiProperty({ required: false, nullable: true })
cedarPolicy?: string | null;

@ApiProperty({ required: false, isArray: true, type: SimpleFoundUserInfoDs })
users?: Array<SimpleFoundUserInfoDs>;
}
Expand Down
10 changes: 3 additions & 7 deletions backend/src/entities/connection/connection.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,7 @@ import { AmplitudeEventTypeEnum, InTransactionEnum } from '../../enums/index.js'
import { Messages } from '../../exceptions/text/messages.js';
import { processExceptionMessage } from '../../exceptions/utils/process-exception-message.js';
import { ConnectionEditGuard, ConnectionReadGuard } from '../../guards/index.js';
import {
isConnectionTypeAgent,
slackPostMessage,
toPrettyErrorsMsg,
} from '../../helpers/index.js';
import { isConnectionTypeAgent, slackPostMessage, toPrettyErrorsMsg } from '../../helpers/index.js';
import { SentryInterceptor } from '../../interceptors/index.js';
import { SuccessResponse } from '../../microservices/saas-microservice/data-structures/common-responce.ds.js';
import { AmplitudeService } from '../amplitude/amplitude.service.js';
Expand Down Expand Up @@ -413,14 +409,15 @@ export class ConnectionController {
@SlugUuid('connectionId') connectionId: string,
@UserId() userId: string,
): Promise<FoundGroupResponseDto> {
const { title } = groupData;
const { title, cedarPolicy } = groupData;
if (!title) {
throw new BadRequestException(Messages.GROUP_TITLE_MISSING);
}
const inputData: CreateGroupInConnectionDs = {
group_parameters: {
title: title,
connectionId: connectionId,
cedarPolicy: cedarPolicy,
},
creation_info: {
cognitoUserName: userId,
Expand Down Expand Up @@ -689,5 +686,4 @@ export class ConnectionController {
}
return await this.unfreezeConnectionUseCase.execute({ connectionId, userId }, InTransactionEnum.ON);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export class CreateGroupInConnectionUseCase

protected async implementation(inputData: CreateGroupInConnectionDs): Promise<FoundGroupResponseDto> {
const {
group_parameters: { connectionId, title },
group_parameters: { connectionId, title, cedarPolicy },
creation_info: { cognitoUserName },
} = inputData;
const connectionToUpdate = await this._dbContext.connectionRepository.findConnectionWithGroups(connectionId);
Expand All @@ -36,15 +36,13 @@ export class CreateGroupInConnectionUseCase
const foundUser = await this._dbContext.userRepository.findOneUserById(cognitoUserName);
const newGroupEntity = buildNewGroupEntityForConnectionWithUser(connectionToUpdate, foundUser, title);
const savedGroup = await this._dbContext.groupRepository.saveNewOrUpdatedGroup(newGroupEntity);
savedGroup.cedarPolicy = generateCedarPolicyForGroup(
connectionId,
false,
{
savedGroup.cedarPolicy =
cedarPolicy ??
generateCedarPolicyForGroup(connectionId, false, {
connection: { connectionId, accessLevel: AccessLevelEnum.none },
group: { groupId: savedGroup.id, accessLevel: AccessLevelEnum.none },
tables: [],
},
);
});
Comment on lines +39 to +45
Comment on lines +39 to +45
await this._dbContext.groupRepository.saveNewOrUpdatedGroup(savedGroup);
Cacher.invalidateCedarPolicyCache(connectionId);
return buildFoundGroupResponseDto(savedGroup);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export function buildFoundUserGroupInConnectionDto(
id: group.id,
title: group.title,
isMain: group.isMain,
cedarPolicy: group.cedarPolicy,
users: group.users?.length ? group.users.map((user) => buildSimpleUserInfoDs(user)) : undefined,
},
accessLevel,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ export class FoundGroupDataInfoDs {

@ApiProperty()
isMain: boolean;

@ApiProperty({ required: false, nullable: true })
cedarPolicy?: string | null;
}

export class FoundGroupDataWithUsersDs extends FoundGroupDataInfoDs {
Expand Down
3 changes: 3 additions & 0 deletions backend/src/entities/group/dto/found-group-response.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ export class FoundGroupResponseDto {
@ApiProperty()
isMain: boolean;

@ApiProperty({ required: false, nullable: true })
cedarPolicy?: string | null;

@ApiProperty({ required: false, isArray: true, type: SimpleFoundUserInfoDs })
users?: Array<SimpleFoundUserInfoDs>;
}
7 changes: 6 additions & 1 deletion backend/src/entities/group/dto/update-group-title.dto.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { ApiProperty } from '@nestjs/swagger';
import { IsNotEmpty, IsString, IsUUID } from 'class-validator';
import { IsNotEmpty, IsOptional, IsString, IsUUID } from 'class-validator';

export class UpdateGroupTitleDto {
@ApiProperty()
Expand All @@ -12,4 +12,9 @@ export class UpdateGroupTitleDto {
@IsNotEmpty()
@IsUUID()
groupId: string;

@IsOptional()
@IsString()
@ApiProperty({ required: false, nullable: true })
cedarPolicy?: string | null;
Comment on lines +16 to +19
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import AbstractUseCase from '../../../common/abstract-use.case.js';
import { IGlobalDatabaseContext } from '../../../common/application/global-database-context.interface.js';
import { BaseType } from '../../../common/data-injection.tokens.js';
import { Messages } from '../../../exceptions/text/messages.js';
import { Cacher } from '../../../helpers/cache/cacher.js';
import { FoundGroupDataInfoDs } from '../application/data-sctructures/found-user-groups.ds.js';
import { UpdateGroupTitleDto } from '../dto/update-group-title.dto.js';
import { IUpdateGroupTitle } from './use-cases.interfaces.js';
Expand All @@ -20,7 +21,7 @@ export class UpdateGroupTitleUseCase
}

protected async implementation(groupData: UpdateGroupTitleDto): Promise<FoundGroupDataInfoDs> {
const { groupId, title } = groupData;
const { groupId, title, cedarPolicy } = groupData;
const groupToUpdate = await this._dbContext.groupRepository.findGroupByIdWithConnectionAndUsers(groupId);
if (!groupToUpdate) {
throw new HttpException(
Expand All @@ -34,16 +35,21 @@ export class UpdateGroupTitleUseCase
groupToUpdate.connection.id,
);

if (connectionWithGroups.groups.find((group) => group.title === title)) {
if (connectionWithGroups.groups.find((group) => group.title === title && group.id !== groupId)) {
throw new BadRequestException(Messages.GROUP_NAME_UNIQUE);
}

groupToUpdate.title = title;
if (cedarPolicy !== undefined) {
groupToUpdate.cedarPolicy = cedarPolicy;
Cacher.invalidateCedarPolicyCache(groupToUpdate.connection.id);
}
Comment on lines 42 to +46
const updatedGroup = await this._dbContext.groupRepository.saveNewOrUpdatedGroup(groupToUpdate);
Comment on lines 42 to 47
return {
id: updatedGroup.id,
title: updatedGroup.title,
isMain: updatedGroup.isMain,
cedarPolicy: updatedGroup.cedarPolicy,
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ export function buildFoundGroupResponseDto(group: GroupEntity): FoundGroupRespon
id: group.id,
title: group.title,
isMain: group.isMain,
cedarPolicy: group.cedarPolicy,
users: group.users?.map((user) => buildSimpleUserInfoDs(user)),
};
}
Loading