Compare commits

..

No commits in common. "624ea6ba33f5339e0898f2beb29d31591a91947a" and "d85c126c276a91996178ccf8b8e7a566d33dac69" have entirely different histories.

2 changed files with 92 additions and 109 deletions

View File

@ -1,91 +1,92 @@
import { JsonController, Param, Body, Get, Post, Put, Delete, NotFoundError, OnUndefined, NotAcceptableError, Authorized } from 'routing-controllers'; import { JsonController, Param, Body, Get, Post, Put, Delete, NotFoundError, OnUndefined, NotAcceptableError, Authorized } from 'routing-controllers';
import { getConnectionManager, Repository } from 'typeorm'; import { getConnectionManager, Repository } from 'typeorm';
import { EntityFromBody } from 'typeorm-routing-controllers-extensions'; import { EntityFromBody } from 'typeorm-routing-controllers-extensions';
import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi'; import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi';
import { Track } from '../models/Track'; import { Track } from '../models/Track';
import { IsInt, IsNotEmpty, IsPositive, IsString } from 'class-validator'; import { IsInt, IsNotEmpty, IsPositive, IsString } from 'class-validator';
import {TrackIdChangeNotAllowedError, TrackNotFoundError} from "../errors/TrackErrors";
class CreateTrack {
class CreateTrack { @IsString()
@IsString() @IsNotEmpty()
@IsNotEmpty() name: string;
name: string;
@IsInt()
@IsInt() @IsPositive()
@IsPositive() length: number;
length: number; }
}
export class TrackNotFoundError extends NotFoundError {
@JsonController('/tracks') constructor() {
@Authorized("TRACKS:read") super('Track not found!');
export class TrackController { }
private trackRepository: Repository<Track>; }
/** @JsonController('/tracks')
* Gets the repository of this controller's model/entity. @Authorized("TRACKS:read")
*/ export class TrackController {
constructor() { private trackRepository: Repository<Track>;
this.trackRepository = getConnectionManager().get().getRepository(Track);
} /**
* Gets the repository of this controller's model/entity.
@Get() */
@ResponseSchema(Track, { isArray: true }) constructor() {
@OpenAPI({ description: "Lists all tracks." }) this.trackRepository = getConnectionManager().get().getRepository(Track);
getAll() { }
return this.trackRepository.find();
} @Get()
@ResponseSchema(Track, { isArray: true })
@Get('/:id') @OpenAPI({ description: "Lists all tracks." })
@ResponseSchema(Track) getAll() {
@ResponseSchema(TrackNotFoundError, {statusCode: 404}) return this.trackRepository.find();
@OnUndefined(TrackNotFoundError) }
@OpenAPI({ description: "Returns a track of a specified id (if it exists)" })
getOne(@Param('id') id: number) { @Get('/:id')
return this.trackRepository.findOne({ id: id }); @ResponseSchema(Track)
} @OnUndefined(TrackNotFoundError)
@OpenAPI({ description: "Returns a track of a specified id (if it exists)" })
@Post() getOne(@Param('id') id: number) {
@ResponseSchema(Track) return this.trackRepository.findOne({ id: id });
@OpenAPI({ description: "Create a new track object (id will be generated automagicly)." }) }
post(
@Body({ validate: true }) @Post()
track: CreateTrack @ResponseSchema(Track)
) { @OpenAPI({ description: "Create a new track object (id will be generated automagicly)." })
return this.trackRepository.save(track); post(
} @Body({ validate: true })
track: CreateTrack
@Put('/:id') ) {
@ResponseSchema(Track) return this.trackRepository.save(track);
@ResponseSchema(TrackNotFoundError, {statusCode: 404}) }
@ResponseSchema(TrackIdChangeNotAllowedError, {statusCode: 406})
@OpenAPI({description: "Update a track object (id can't be changed)."}) @Put('/:id')
async put(@Param('id') id: number, @EntityFromBody() track: Track) { @ResponseSchema(Track)
let oldTrack = await this.trackRepository.findOne({ id: id }); @OpenAPI({ description: "Update a track object (id can't be changed)." })
async put(@Param('id') id: number, @EntityFromBody() track: Track) {
if (!oldTrack) { let oldTrack = await this.trackRepository.findOne({ id: id });
throw new TrackNotFoundError();
} if (!oldTrack) {
throw new TrackNotFoundError();
if(oldTrack.id != track.id){ }
throw new TrackIdChangeNotAllowedError();
} if (oldTrack.id != track.id) {
throw new NotAcceptableError("The id's don't match!");
await this.trackRepository.update(oldTrack, track); }
return track;
} await this.trackRepository.update(oldTrack, track);
return track;
@Delete('/:id') }
@ResponseSchema(Track)
@ResponseSchema(TrackNotFoundError, {statusCode: 404}) @Delete('/:id')
@OpenAPI({description: "Delete a specified track (if it exists)."}) @ResponseSchema(Track)
async remove(@Param('id') id: number) { @OpenAPI({ description: "Delete a specified track (if it exists)." })
let track = await this.trackRepository.findOne({ id: id }); async remove(@Param('id') id: number) {
let track = await this.trackRepository.findOne({ id: id });
if (!track) {
throw new TrackNotFoundError(); if (!track) {
} throw new TrackNotFoundError();
}
await this.trackRepository.delete(track);
return track; await this.trackRepository.delete(track);
} return track;
} }
}

View File

@ -1,18 +0,0 @@
import { JsonController, Param, Body, Get, Post, Put, Delete, NotFoundError, OnUndefined, NotAcceptableError } from 'routing-controllers';
import { IsInt, IsNotEmpty, IsPositive, IsString } from 'class-validator';
export class TrackNotFoundError extends NotFoundError {
@IsString()
name = "TrackNotFoundError"
@IsString()
message = "Track not found!"
}
export class TrackIdChangeNotAllowedError extends NotAcceptableError {
@IsString()
name = "TrackIdChangeNotAllowed"
@IsString()
message = "The id's don't match!!"
}