From be4050768e45fb7893d9bf1957095baed646ae92 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sun, 10 Jan 2021 18:01:22 +0100 Subject: [PATCH] Moded group updateing to a updateusergroup action model ref #76 --- src/controllers/UserGroupController.ts | 15 ++++---- src/models/actions/update/UpdateUserGroup.ts | 39 ++++++++++++++++++++ 2 files changed, 47 insertions(+), 7 deletions(-) create mode 100644 src/models/actions/update/UpdateUserGroup.ts diff --git a/src/controllers/UserGroupController.ts b/src/controllers/UserGroupController.ts index 85426f5..18a901d 100644 --- a/src/controllers/UserGroupController.ts +++ b/src/controllers/UserGroupController.ts @@ -4,6 +4,7 @@ import { getConnectionManager, Repository } from 'typeorm'; import { EntityFromBody } from 'typeorm-routing-controllers-extensions'; import { UserGroupIdsNotMatchingError, UserGroupNotFoundError } from '../errors/UserGroupErrors'; import { CreateUserGroup } from '../models/actions/create/CreateUserGroup'; +import { UpdateUserGroup } from '../models/actions/update/UpdateUserGroup'; import { UserGroup } from '../models/entities/UserGroup'; import { ResponseEmpty } from '../models/responses/ResponseEmpty'; import { ResponseUserGroup } from '../models/responses/ResponseUserGroup'; @@ -62,19 +63,19 @@ export class UserGroupController { @ResponseSchema(UserGroupNotFoundError, { statusCode: 404 }) @ResponseSchema(UserGroupIdsNotMatchingError, { statusCode: 406 }) @OpenAPI({ description: "Update the group whose id you provided.
To change the permissions granted to the group please use /api/permissions instead.
Please remember that ids can't be changed." }) - async put(@Param('id') id: number, @EntityFromBody() userGroup: UserGroup) { - let oldUserGroup = await this.userGroupsRepository.findOne({ id: id }, { relations: ["permissions"] }); + async put(@Param('id') id: number, @EntityFromBody() updateGroup: UpdateUserGroup) { + let oldGroup = await this.userGroupsRepository.findOne({ id: id }); - if (!oldUserGroup) { - throw new UserGroupNotFoundError() + if (!oldGroup) { + throw new UserGroupNotFoundError(); } - if (oldUserGroup.id != userGroup.id) { + if (oldGroup.id != updateGroup.id) { throw new UserGroupIdsNotMatchingError(); } + await this.userGroupsRepository.save(await updateGroup.update(oldGroup)); - await this.userGroupsRepository.save(userGroup); - return userGroup; + return (await this.userGroupsRepository.findOne({ id: id }, { relations: ['permissions', 'groups'] })).toResponse(); } @Delete('/:id') diff --git a/src/models/actions/update/UpdateUserGroup.ts b/src/models/actions/update/UpdateUserGroup.ts new file mode 100644 index 0000000..88b559e --- /dev/null +++ b/src/models/actions/update/UpdateUserGroup.ts @@ -0,0 +1,39 @@ +import { IsInt, IsOptional, IsString } from 'class-validator'; +import { UserGroup } from '../../entities/UserGroup'; + +/** + * This class is used to update a UserGroup entity (via put request). + */ +export class UpdateUserGroup { + + /** + * The updated group's id. + * This shouldn't have changed but it is here in case anyone ever wants to enable id changes (whyever they would want to). + */ + @IsInt() + id: number; + + /** + * The updated group's name. + */ + @IsString() + name: string; + + /** + * The updated groups's description. + */ + @IsString() + @IsOptional() + description?: string; + + /** + * Updates a group entity based on this. + * @param group The group that shall be updated. + */ + public async update(group: UserGroup): Promise { + group.name = this.name; + group.description = this.description; + + return group; + } +} \ No newline at end of file