generator-nest-js-boilerplate
Version:
This generator will help you to build your own Nest.js Mongodb API using TypeScript 4
91 lines (80 loc) • 2.29 kB
text/typescript
import {
Controller,
HttpCode,
Delete,
UseGuards,
Req,
Get,
ForbiddenException,
} from '@nestjs/common';
import {
ApiMovedPermanentlyResponse,
ApiOkResponse,
ApiInternalServerErrorResponse,
ApiTags,
ApiNoContentResponse,
} from '@nestjs/swagger';
import { Request as ExpressRequest } from 'express';
import UsersService from '@v1/users/users.service';
import IsLoggedGuard from '@guards/is-logged.guard';
import { UserGooglePayload } from './interfaces/user-google-payload.interface';
import UserDto from '@v1/users/dto/user.dto';
import GoogleAuthGuard from './guards/google-auth.guard';
import AuthService from './auth.service';
('Auth')
('google')
export default class AuthController {
constructor(
private readonly authService: AuthService,
private readonly usersService: UsersService,
) {}
({ description: 'Does redirect to route' })
()
(GoogleAuthGuard)
async googleAuth(() req: ExpressRequest) {}
({
description: 'User registered/authorized successfully',
})
({
schema: {
type: 'object',
example: {
message: 'string',
details: {},
},
},
description: 'InternalServerError. User was not authorized/registered',
})
(GoogleAuthGuard)
('redirect')
async googleAuthRedirect(() req: ExpressRequest): Promise<any> {
if (!req.user) {
throw new ForbiddenException('No user from google');
}
const {
accessToken,
refreshToken,
...user
} = req.user as UserGooglePayload;
const foundUser = await this.usersService.getVerifiedUserByEmail(user.email as string);
if (!foundUser) {
await this.usersService.create(user as UserDto);
return { message: 'Successfully registered' };
}
return { message: 'Successfully login' };
}
({ description: 'No content. 204' })
(IsLoggedGuard)
('logout')
(204)
public logout(() req: ExpressRequest): Promise<void> {
return new Promise((resolve, reject) => {
req.logout((error: any) => {
if (error) {
reject(error);
}
resolve();
});
});
}
}