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