@@ -1,9 +1,10 @@
 | 
			
		||||
import { JsonController, Param, Body, Get, Post, Put, Delete, NotFoundError, OnUndefined, NotAcceptableError } from 'routing-controllers';
 | 
			
		||||
import { JsonController, Param, Body, Get, Post, Put, Delete, OnUndefined, NotAcceptableError } from 'routing-controllers';
 | 
			
		||||
import { getConnectionManager, Repository } from 'typeorm';
 | 
			
		||||
import { EntityFromBody } from 'typeorm-routing-controllers-extensions';
 | 
			
		||||
import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi';
 | 
			
		||||
import { Track } from '../models/Track';
 | 
			
		||||
import { IsInt, IsNotEmpty, IsPositive, IsString } from 'class-validator';
 | 
			
		||||
import {TrackIdChangeNotAllowedError, TrackNotFoundError} from "../errors/TrackErrors";
 | 
			
		||||
 | 
			
		||||
class CreateTrack {
 | 
			
		||||
	@IsString()
 | 
			
		||||
@@ -15,12 +16,6 @@ class CreateTrack {
 | 
			
		||||
	length: number;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export class TrackNotFoundError extends NotFoundError {
 | 
			
		||||
	constructor() {
 | 
			
		||||
		super('Track not found!');
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@JsonController('/tracks')
 | 
			
		||||
export class TrackController {
 | 
			
		||||
	private trackRepository: Repository<Track>;
 | 
			
		||||
@@ -41,6 +36,7 @@ export class TrackController {
 | 
			
		||||
 | 
			
		||||
	@Get('/:id')
 | 
			
		||||
	@ResponseSchema(Track)
 | 
			
		||||
	@ResponseSchema(TrackNotFoundError, {statusCode: 404})
 | 
			
		||||
	@OnUndefined(TrackNotFoundError)
 | 
			
		||||
	@OpenAPI({description: "Returns a track of a specified id (if it exists)"})
 | 
			
		||||
	getOne(@Param('id') id: number) {
 | 
			
		||||
@@ -59,6 +55,8 @@ export class TrackController {
 | 
			
		||||
 | 
			
		||||
	@Put('/:id')
 | 
			
		||||
	@ResponseSchema(Track)
 | 
			
		||||
	@ResponseSchema(TrackNotFoundError, {statusCode: 404})
 | 
			
		||||
	@ResponseSchema(TrackIdChangeNotAllowedError, {statusCode: 406})
 | 
			
		||||
	@OpenAPI({description: "Update a track object (id can't be changed)."})
 | 
			
		||||
	async put(@Param('id') id: number, @EntityFromBody() track: Track) {
 | 
			
		||||
		let oldTrack = await this.trackRepository.findOne({ id: id });
 | 
			
		||||
@@ -68,7 +66,7 @@ export class TrackController {
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if(oldTrack.id != track.id){
 | 
			
		||||
			throw new NotAcceptableError("The id's don't match!");
 | 
			
		||||
			throw new TrackIdChangeNotAllowedError();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		await this.trackRepository.update(oldTrack, track);
 | 
			
		||||
@@ -77,6 +75,7 @@ export class TrackController {
 | 
			
		||||
 | 
			
		||||
	@Delete('/:id')
 | 
			
		||||
	@ResponseSchema(Track)
 | 
			
		||||
	@ResponseSchema(TrackNotFoundError, {statusCode: 404})
 | 
			
		||||
	@OpenAPI({description: "Delete a specified track (if it exists)."})
 | 
			
		||||
	async remove(@Param('id') id: number) {
 | 
			
		||||
		let track = await this.trackRepository.findOne({ id: id });
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								src/errors/TrackErrors.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/errors/TrackErrors.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
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!!"
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user