mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-11-26 08:34:55 +00:00
108 lines
4.1 KiB
TypeScript
108 lines
4.1 KiB
TypeScript
import { Body, Controller, HttpCode, HttpStatus, Post, Req, UseGuards } from '@nestjs/common';
|
|
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
|
|
import { Request } from 'express';
|
|
import { AuthenticatedUser, Public } from '~/common/decorators';
|
|
import { AccessTokenGuard } from '~/common/guards';
|
|
import { ApiDataResponse, ApiLangRequestHeader } from '~/core/decorators';
|
|
import { ResponseFactory } from '~/core/utils';
|
|
import {
|
|
ChangePasswordRequestDto,
|
|
CreateUnverifiedUserRequestDto,
|
|
ForgetPasswordRequestDto,
|
|
JuniorLoginRequestDto,
|
|
LoginRequestDto,
|
|
RefreshTokenRequestDto,
|
|
SendForgetPasswordOtpRequestDto,
|
|
setJuniorPasswordRequestDto,
|
|
VerifyForgetPasswordOtpRequestDto,
|
|
VerifyUserRequestDto,
|
|
} from '../dtos/request';
|
|
import { SendForgetPasswordOtpResponseDto, SendRegisterOtpResponseDto } from '../dtos/response';
|
|
import { LoginResponseDto } from '../dtos/response/login.response.dto';
|
|
import { VerifyForgetPasswordOtpResponseDto } from '../dtos/response/verify-forget-password-otp.response.dto';
|
|
import { IJwtPayload } from '../interfaces';
|
|
import { AuthService } from '../services';
|
|
|
|
@Controller('auth')
|
|
@ApiTags('Auth')
|
|
@ApiBearerAuth()
|
|
@ApiLangRequestHeader()
|
|
export class AuthController {
|
|
constructor(private readonly authService: AuthService) {}
|
|
@Post('register/otp')
|
|
async register(@Body() createUnverifiedUserDto: CreateUnverifiedUserRequestDto) {
|
|
const phoneNumber = await this.authService.sendRegisterOtp(createUnverifiedUserDto);
|
|
return ResponseFactory.data(new SendRegisterOtpResponseDto(phoneNumber));
|
|
}
|
|
|
|
@Post('register/verify')
|
|
async verifyUser(@Body() verifyUserDto: VerifyUserRequestDto) {
|
|
const [res, user] = await this.authService.verifyUser(verifyUserDto);
|
|
return ResponseFactory.data(new LoginResponseDto(res, user));
|
|
}
|
|
|
|
@Post('login')
|
|
async login(@Body() verifyUserDto: LoginRequestDto) {
|
|
const [res, user] = await this.authService.loginWithPassword(verifyUserDto);
|
|
return ResponseFactory.data(new LoginResponseDto(res, user));
|
|
}
|
|
|
|
@Post('forget-password/otp')
|
|
async forgetPassword(@Body() sendForgetPasswordOtpDto: SendForgetPasswordOtpRequestDto) {
|
|
const maskedNumber = await this.authService.sendForgetPasswordOtp(sendForgetPasswordOtpDto);
|
|
return ResponseFactory.data(new SendForgetPasswordOtpResponseDto(maskedNumber));
|
|
}
|
|
|
|
@Post('forget-password/verify')
|
|
@HttpCode(HttpStatus.OK)
|
|
@ApiDataResponse(VerifyForgetPasswordOtpResponseDto)
|
|
async verifyForgetPasswordOtp(@Body() forgetPasswordDto: VerifyForgetPasswordOtpRequestDto) {
|
|
const { token, user } = await this.authService.verifyForgetPasswordOtp(forgetPasswordDto);
|
|
|
|
return ResponseFactory.data(new VerifyForgetPasswordOtpResponseDto(token, user));
|
|
}
|
|
|
|
@Post('forget-password/reset')
|
|
@HttpCode(HttpStatus.NO_CONTENT)
|
|
resetPassword(@Body() forgetPasswordDto: ForgetPasswordRequestDto) {
|
|
return this.authService.resetPassword(forgetPasswordDto);
|
|
}
|
|
|
|
@Post('change-password')
|
|
@HttpCode(HttpStatus.NO_CONTENT)
|
|
@UseGuards(AccessTokenGuard)
|
|
changePassword(@AuthenticatedUser() { sub }: IJwtPayload, @Body() forgetPasswordDto: ChangePasswordRequestDto) {
|
|
return this.authService.changePassword(sub, forgetPasswordDto);
|
|
}
|
|
|
|
@Post('junior/set-password')
|
|
@HttpCode(HttpStatus.NO_CONTENT)
|
|
@Public()
|
|
setJuniorPasscode(@Body() setPassworddto: setJuniorPasswordRequestDto) {
|
|
return this.authService.setJuniorPassword(setPassworddto);
|
|
}
|
|
|
|
@Post('junior/login')
|
|
@HttpCode(HttpStatus.OK)
|
|
@ApiDataResponse(LoginResponseDto)
|
|
async juniorLogin(@Body() juniorLoginDto: JuniorLoginRequestDto) {
|
|
const [res, user] = await this.authService.juniorLogin(juniorLoginDto);
|
|
|
|
return ResponseFactory.data(new LoginResponseDto(res, user));
|
|
}
|
|
|
|
@Post('refresh-token')
|
|
@Public()
|
|
async refreshToken(@Body() { refreshToken }: RefreshTokenRequestDto) {
|
|
const [res, user] = await this.authService.refreshToken(refreshToken);
|
|
return ResponseFactory.data(new LoginResponseDto(res, user));
|
|
}
|
|
|
|
@Post('logout')
|
|
@HttpCode(HttpStatus.NO_CONTENT)
|
|
@UseGuards(AccessTokenGuard)
|
|
async logout(@Req() request: Request) {
|
|
await this.authService.logout(request);
|
|
}
|
|
}
|