Skip to content

Commit

Permalink
Merge pull request #2634 from Abobos/feature/update-organisation
Browse files Browse the repository at this point in the history
feat: Implement rename organization
  • Loading branch information
scopsy authored Feb 8, 2023
2 parents b55f53c + dbcccb1 commit edd8cb6
Show file tree
Hide file tree
Showing 6 changed files with 85 additions and 1 deletion.
25 changes: 25 additions & 0 deletions apps/api/src/app/organization/e2e/rename-organization.e2e.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { OrganizationRepository } from '@novu/dal';
import { UserSession } from '@novu/testing';
import { expect } from 'chai';

describe('Rename Organization - /organizations (PATCH)', function () {
let session: UserSession;
const organizationRepository = new OrganizationRepository();

beforeEach(async () => {
session = new UserSession();
await session.initialize();
});

it('should rename the organization', async function () {
const payload = {
name: 'Liberty Powers',
};

await session.testAgent.patch('/v1/organizations').send(payload);

const organization = await organizationRepository.findById(session.organization._id);

expect(organization?.name).to.equal(payload.name);
});
});
18 changes: 17 additions & 1 deletion apps/api/src/app/organization/organization.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
Param,
Post,
Put,
Patch,
UseGuards,
UseInterceptors,
} from '@nestjs/common';
Expand All @@ -33,6 +34,8 @@ import { IGetOrganizationsDto } from './dtos/get-organizations.dto';
import { GetMyOrganization } from './usecases/get-my-organization/get-my-organization.usecase';
import { GetMyOrganizationCommand } from './usecases/get-my-organization/get-my-organization.command';
import { IGetMyOrganizationDto } from './dtos/get-my-organization.dto';
import { RenameOrganizationCommand } from './usecases/rename-organization/rename-organization-command';
import { RenameOrganization } from './usecases/rename-organization/rename-organization.usecase';

@Controller('/organizations')
@UseInterceptors(ClassSerializerInterceptor)
Expand All @@ -47,7 +50,8 @@ export class OrganizationController {
private changeMemberRoleUsecase: ChangeMemberRole,
private updateBrandingDetailsUsecase: UpdateBrandingDetails,
private getOrganizationsUsecase: GetOrganizations,
private getMyOrganizationUsecase: GetMyOrganization
private getMyOrganizationUsecase: GetMyOrganization,
private renameOrganizationUsecase: RenameOrganization
) {}

@Post('/')
Expand Down Expand Up @@ -154,4 +158,16 @@ export class OrganizationController {
})
);
}

@Patch('/')
@Roles(MemberRoleEnum.ADMIN)
async renameOrganization(@UserSession() user: IJwtPayload, @Body() body: { name: string }) {
return await this.renameOrganizationUsecase.execute(
RenameOrganizationCommand.create({
name: body.name,
userId: user._id,
id: user.organizationId,
})
);
}
}
2 changes: 2 additions & 0 deletions apps/api/src/app/organization/usecases/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { ChangeMemberRole } from './membership/change-member-role/change-member-
import { UpdateBrandingDetails } from './update-branding-details/update-branding-details.usecase';
import { GetOrganizations } from './get-organizations/get-organizations.usecase';
import { GetMyOrganization } from './get-my-organization/get-my-organization.usecase';
import { RenameOrganization } from './rename-organization/rename-organization.usecase';

export const USE_CASES = [
AddMember,
Expand All @@ -18,4 +19,5 @@ export const USE_CASES = [
UpdateBrandingDetails,
GetOrganizations,
GetMyOrganization,
RenameOrganization,
];
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { IsDefined, MaxLength } from 'class-validator';
import { AuthenticatedCommand } from '../../../shared/commands/authenticated.command';

export class RenameOrganizationCommand extends AuthenticatedCommand {
@IsDefined()
public readonly id: string;

@MaxLength(50)
name: string;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { Injectable } from '@nestjs/common';
import { OrganizationRepository } from '@novu/dal';
import { RenameOrganizationCommand } from './rename-organization-command';

@Injectable()
export class RenameOrganization {
constructor(private organizationRepository: OrganizationRepository) {}

async execute(command: RenameOrganizationCommand) {
const payload = {
name: command.name,
};

await this.organizationRepository.renameOrganization(command.id, payload);

return payload;
}
}
13 changes: 13 additions & 0 deletions libs/dal/src/repositories/organization/organization.repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,19 @@ export class OrganizationRepository extends BaseRepository<
);
}

async renameOrganization(organizationId: string, payload: { name: string }) {
return this.update(
{
_id: organizationId,
},
{
$set: {
name: payload.name,
},
}
);
}

async findPartnerConfigurationDetails(organizationId: string, userId: string, configurationId: string) {
const members = await this.memberRepository.findUserActiveMembers(userId);

Expand Down

0 comments on commit edd8cb6

Please sign in to comment.