homemanager-be/src/app-user/app-user.controller.ts

56 lines
1.5 KiB
TypeScript

import {
ClassSerializerInterceptor,
Controller,
Get,
Post,
UseGuards,
UseInterceptors,
} from '@nestjs/common';
import {
ApiBasicAuth,
ApiBearerAuth,
ApiOkResponse,
ApiOperation,
ApiTags,
ApiUnauthorizedResponse,
} from '@nestjs/swagger';
import { User } from 'src/objects/user/user.entity';
import { LoggedInUser } from 'src/shared/decorators/user.decorator';
import { AuthGuard } from 'src/shared/guards/auth.guard';
import { LoginGuard } from 'src/shared/guards/login.guard';
import { AppUserService } from './app-user.service';
import { UserLoginResponseDto } from './dto/user-login-response.dto';
@ApiTags('users')
@UseInterceptors(ClassSerializerInterceptor)
@Controller({
path: 'user',
})
export class AppUserController {
constructor(private readonly service: AppUserService) {}
@Post('login')
@UseGuards(LoginGuard)
@ApiBasicAuth('Email and Password')
@ApiOperation({ summary: 'Log in using email and password' })
@ApiUnauthorizedResponse({ description: 'Invalid email or password' })
@ApiOkResponse({ type: UserLoginResponseDto })
async userDoLogin(@LoggedInUser() loginRequest: User) {
return this.service.login(loginRequest);
}
@Get()
@UseGuards(AuthGuard)
@ApiOperation({ summary: 'Get logged in user' })
@ApiBearerAuth('Bearer token')
async userGetInfo(@LoggedInUser() user: User) {
return {
name: user.name,
email: user.email,
emailVerified: user.emailVerified,
picture: user.picture,
updatedAt: user.updatedAt,
};
}
}