86
									
								
								src/controllers/UserController.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								src/controllers/UserController.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,86 @@
 | 
				
			|||||||
 | 
					import { Body, Delete, Get, JsonController, OnUndefined, Param, Post, Put } from 'routing-controllers';
 | 
				
			||||||
 | 
					import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi';
 | 
				
			||||||
 | 
					import { getConnectionManager, Repository } from 'typeorm';
 | 
				
			||||||
 | 
					import { EntityFromBody } from 'typeorm-routing-controllers-extensions';
 | 
				
			||||||
 | 
					import { UserGroupNotFoundError, UserIdsNotMatchingError, UserNotFoundError } from '../errors/UserErrors';
 | 
				
			||||||
 | 
					import { CreateUser } from '../models/creation/CreateUser';
 | 
				
			||||||
 | 
					import { User } from '../models/entities/User';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@JsonController('/users')
 | 
				
			||||||
 | 
					export class UserController {
 | 
				
			||||||
 | 
						private userRepository: Repository<User>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Gets the repository of this controller's model/entity.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						constructor() {
 | 
				
			||||||
 | 
							this.userRepository = getConnectionManager().get().getRepository(User);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Get()
 | 
				
			||||||
 | 
						@ResponseSchema(User, { isArray: true })
 | 
				
			||||||
 | 
						@OpenAPI({ description: 'Lists all users.' })
 | 
				
			||||||
 | 
						getAll() {
 | 
				
			||||||
 | 
							return this.userRepository.find();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Get('/:id')
 | 
				
			||||||
 | 
						@ResponseSchema(User)
 | 
				
			||||||
 | 
						@ResponseSchema(UserNotFoundError, { statusCode: 404 })
 | 
				
			||||||
 | 
						@OnUndefined(UserNotFoundError)
 | 
				
			||||||
 | 
						@OpenAPI({ description: 'Returns a user of a specified id (if it exists)' })
 | 
				
			||||||
 | 
						getOne(@Param('id') id: number) {
 | 
				
			||||||
 | 
							return this.userRepository.findOne({ id: id });
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Post()
 | 
				
			||||||
 | 
						@ResponseSchema(User)
 | 
				
			||||||
 | 
						@ResponseSchema(UserGroupNotFoundError)
 | 
				
			||||||
 | 
						@OpenAPI({ description: 'Create a new user object (id will be generated automagicly).' })
 | 
				
			||||||
 | 
						async post(@Body({ validate: true }) createUser: CreateUser) {
 | 
				
			||||||
 | 
							let user;
 | 
				
			||||||
 | 
							try {
 | 
				
			||||||
 | 
								user = await createUser.toUser();
 | 
				
			||||||
 | 
							} catch (error) {
 | 
				
			||||||
 | 
								return error;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return this.userRepository.save(user);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Put('/:id')
 | 
				
			||||||
 | 
						@ResponseSchema(User)
 | 
				
			||||||
 | 
						@ResponseSchema(UserNotFoundError, { statusCode: 404 })
 | 
				
			||||||
 | 
						@ResponseSchema(UserIdsNotMatchingError, { statusCode: 406 })
 | 
				
			||||||
 | 
						@OpenAPI({ description: "Update a user object (id can't be changed)." })
 | 
				
			||||||
 | 
						async put(@Param('id') id: number, @EntityFromBody() user: User) {
 | 
				
			||||||
 | 
							let oldUser = await this.userRepository.findOne({ id: id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!oldUser) {
 | 
				
			||||||
 | 
								throw new UserNotFoundError();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (oldUser.id != user.id) {
 | 
				
			||||||
 | 
								throw new UserIdsNotMatchingError();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							await this.userRepository.update(oldUser, user);
 | 
				
			||||||
 | 
							return user;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Delete('/:id')
 | 
				
			||||||
 | 
						@ResponseSchema(User)
 | 
				
			||||||
 | 
						@ResponseSchema(UserNotFoundError, { statusCode: 404 })
 | 
				
			||||||
 | 
						@OpenAPI({ description: 'Delete a specified runner (if it exists).' })
 | 
				
			||||||
 | 
						async remove(@Param('id') id: number) {
 | 
				
			||||||
 | 
							let runner = await this.userRepository.findOne({ id: id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!runner) {
 | 
				
			||||||
 | 
								throw new UserNotFoundError();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							await this.userRepository.delete(runner);
 | 
				
			||||||
 | 
							return runner;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user