From dc485c02eac36096011fa731bb85cce10c1bc4b3 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 18 Dec 2020 15:19:44 +0100 Subject: [PATCH] Added Permission creation ref #11 --- src/controllers/PermissionController.ts | 27 +++++++------ src/models/actions/CreatePermission.ts | 54 +++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 13 deletions(-) create mode 100644 src/models/actions/CreatePermission.ts diff --git a/src/controllers/PermissionController.ts b/src/controllers/PermissionController.ts index d6778df..a90ed5b 100644 --- a/src/controllers/PermissionController.ts +++ b/src/controllers/PermissionController.ts @@ -1,7 +1,8 @@ -import { Get, JsonController, OnUndefined, Param } from 'routing-controllers'; +import { Body, Get, JsonController, OnUndefined, Param, Post } from 'routing-controllers'; import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi'; import { getConnectionManager, Repository } from 'typeorm'; import { PermissionNotFoundError } from '../errors/PermissionErrors'; +import { CreatePermission } from '../models/actions/CreatePermission'; import { Permission } from '../models/entities/Permission'; import { ResponsePermission } from '../models/responses/ResponsePermission'; @@ -9,13 +10,13 @@ import { ResponsePermission } from '../models/responses/ResponsePermission'; @JsonController('/permissions') //@Authorized('RUNNERS:read') export class PermissionController { - private permissionController: Repository; + private permissionRepository: Repository; /** * Gets the repository of this controller's model/entity. */ constructor() { - this.permissionController = getConnectionManager().get().getRepository(Permission); + this.permissionRepository = getConnectionManager().get().getRepository(Permission); } @Get() @@ -23,7 +24,7 @@ export class PermissionController { @OpenAPI({ description: 'Lists all permissions.' }) async getAll() { let responsePermissions: ResponsePermission[] = new Array(); - const permissions = await this.permissionController.find({ relations: ['principal'] }); + const permissions = await this.permissionRepository.find({ relations: ['principal'] }); permissions.forEach(permission => { responsePermissions.push(new ResponsePermission(permission)); }); @@ -37,27 +38,27 @@ export class PermissionController { @OnUndefined(PermissionNotFoundError) @OpenAPI({ description: 'Returns a permissions of a specified id (if it exists)' }) async getOne(@Param('id') id: number) { - let permission = await this.permissionController.findOne({ id: id }, { relations: ['principal'] }); + let permission = await this.permissionRepository.findOne({ id: id }, { relations: ['principal'] }); if (!permission) { throw new PermissionNotFoundError(); } return new ResponsePermission(permission); } - /* + @Post() - @ResponseSchema(ResponseRunnerTeam) + @ResponseSchema(ResponsePermission) @OpenAPI({ description: 'Create a new runnerTeam object (id will be generated automagicly).' }) - async post(@Body({ validate: true }) createRunnerTeam: CreateRunnerTeam) { - let runnerTeam; + async post(@Body({ validate: true }) createPermission: CreatePermission) { + let permission; try { - runnerTeam = await createRunnerTeam.toRunnerTeam(); + permission = await createPermission.toPermission(); } catch (error) { throw error; } - runnerTeam = await this.runnerTeamRepository.save(runnerTeam); - runnerTeam = await this.runnerTeamRepository.findOne(runnerTeam, { relations: ['parentGroup', 'contact'] }); + permission = await this.permissionRepository.save(permission); + permission = await this.permissionRepository.findOne(permission, { relations: ['principal'] }); - return new ResponseRunnerTeam(runnerTeam); + return new ResponsePermission(permission); } /* @Put('/:id') diff --git a/src/models/actions/CreatePermission.ts b/src/models/actions/CreatePermission.ts new file mode 100644 index 0000000..829bff1 --- /dev/null +++ b/src/models/actions/CreatePermission.ts @@ -0,0 +1,54 @@ +import { + IsInt, + IsNotEmpty +} from "class-validator"; +import { getConnectionManager } from 'typeorm'; +import { PrincipalNotFoundError } from '../../errors/PrincipalsErrors'; +import { Permission } from '../entities/Permission'; +import { Principal } from '../entities/Principal'; +import { PermissionAction } from '../enums/PermissionAction'; +import { PermissionTarget } from '../enums/PermissionTargets'; + +/** + * Defines a track of given length. +*/ +export class CreatePermission { + + /** + * The permissions's principal's id. + */ + @IsInt() + @IsNotEmpty() + principal: number; + + /** + * The permissions's target. + */ + @IsNotEmpty() + target: PermissionTarget; + + /** + * The permissions's action. + */ + @IsNotEmpty() + action: PermissionAction; + + /** + * Converts a Permission object based on this. + */ + public async toPermission(): Promise { + let newPermission: Permission = new Permission(); + + newPermission.principal = await this.getPrincipal(); + newPermission.target = this.target; + newPermission.action = this.action; + + return newPermission; + } + + public async getPrincipal(): Promise { + let principal = await getConnectionManager().get().getRepository(Principal).findOne({ id: this.principal }) + if (!principal) { throw new PrincipalNotFoundError(); } + return principal; + } +}