mono/packages/vfs/ref-server/controllers/account.controller.ts

79 lines
2.7 KiB
TypeScript

import { Body, Controller, HttpCode, HttpStatus, Post, Req, UseGuards } from '@nestjs/common';
import { ApiBearerAuth, ApiResponse, ApiUseTags } from '@nestjs/swagger';
import { Roles } from '../decorators/roles.decorator';
import { InAccountLoginDto } from '../dto/in-account-login.dto';
import { InAccountRegisterDto } from '../dto/in-account-register.dto';
import { InAccountDto } from '../dto/in-account.dto';
import { InTokenDto } from '../dto/in-token.dto';
import { OutAccountTokenDto } from '../dto/out-account-token.dto';
import { AccessGuard } from '../guards/access.guard';
import { AccountService } from '../services/account.service';
import { Permissions } from '../decorators/permissions.decorator';
@ApiUseTags('account')
@Controller('/api/account')
@UseGuards(AccessGuard)
export class AccountController {
constructor(
private accountService: AccountService
) {
}
@HttpCode(HttpStatus.OK)
@Post('/info')
@ApiResponse({
status: HttpStatus.OK, type: OutAccountTokenDto,
description: 'API View that checks the veracity of a token, returning the token if it is valid.'
})
async info( @Body() tokenDto: InTokenDto) {
try {
return await this.accountService.info(tokenDto);
} catch (error) {
throw error;
}
}
@HttpCode(HttpStatus.OK)
@Post('/login')
@ApiResponse({
status: HttpStatus.OK, type: OutAccountTokenDto,
description: 'API View that checks the veracity of a token, returning the token if it is valid.'
})
async login( @Body() accountLoginDto: InAccountLoginDto) {
try {
return await this.accountService.login(accountLoginDto);
} catch (error) {
throw error;
}
}
@HttpCode(HttpStatus.CREATED)
@Post('/register')
@ApiResponse({
status: HttpStatus.OK, type: OutAccountTokenDto,
description: `API View that receives a POST with a user's username and password.
Returns a JSON Web Token that can be used for authenticated requests.`
})
async register( @Body() accountRegisterDto: InAccountRegisterDto) {
try {
return await this.accountService.register(accountRegisterDto);
} catch (error) {
throw error;
}
}
@ApiBearerAuth()
@Roles('isActive')
@Permissions('change_profile')
@HttpCode(HttpStatus.OK)
@Post('/update')
@ApiResponse({
status: HttpStatus.OK, type: OutAccountTokenDto,
description: ''
})
async update( @Req() req, @Body() accountDto: InAccountDto) {
try {
return await this.accountService.update(req['user'].id, accountDto);
} catch (error) {
throw error;
}
}
}