import { DoorLockService } from '../services/door.lock.service'; import { Body, Controller, Post, Param, HttpStatus, Get, Delete, UseGuards, Put, } from '@nestjs/common'; import { ApiTags, ApiBearerAuth } from '@nestjs/swagger'; import { AddDoorLockOnlineDto } from '../dtos/add.online-temp.dto'; import { AddDoorLockOfflineTempMultipleTimeDto } from '../dtos/add.offline-temp.dto'; import { JwtAuthGuard } from '@app/common/guards/jwt.auth.guard'; import { UpdateDoorLockOfflineTempDto } from '../dtos/update.offline-temp.dto'; @ApiTags('Door Lock Module') @Controller({ version: '1', path: 'door-lock', }) export class DoorLockController { constructor(private readonly doorLockService: DoorLockService) {} @ApiBearerAuth() @UseGuards(JwtAuthGuard) @Post('temporary-password/online/:doorLockUuid') async addOnlineTemporaryPassword( @Body() addDoorLockDto: AddDoorLockOnlineDto, @Param('doorLockUuid') doorLockUuid: string, ) { const temporaryPassword = await this.doorLockService.addOnlineTemporaryPassword( addDoorLockDto, doorLockUuid, ); return { statusCode: HttpStatus.CREATED, success: true, message: 'online temporary password added successfully', data: { id: temporaryPassword.id, }, }; } @ApiBearerAuth() @UseGuards(JwtAuthGuard) @Post('temporary-password/offline/one-time/:doorLockUuid') async addOfflineOneTimeTemporaryPassword( @Param('doorLockUuid') doorLockUuid: string, ) { const temporaryPassword = await this.doorLockService.addOfflineOneTimeTemporaryPassword( doorLockUuid, ); return { statusCode: HttpStatus.CREATED, success: true, message: 'offline temporary password added successfully', data: temporaryPassword, }; } @ApiBearerAuth() @UseGuards(JwtAuthGuard) @Post('temporary-password/offline/multiple-time/:doorLockUuid') async addOfflineMultipleTimeTemporaryPassword( @Body() addDoorLockOfflineTempMultipleTimeDto: AddDoorLockOfflineTempMultipleTimeDto, @Param('doorLockUuid') doorLockUuid: string, ) { const temporaryPassword = await this.doorLockService.addOfflineMultipleTimeTemporaryPassword( addDoorLockOfflineTempMultipleTimeDto, doorLockUuid, ); return { statusCode: HttpStatus.CREATED, success: true, message: 'offline temporary password added successfully', data: temporaryPassword, }; } @ApiBearerAuth() @UseGuards(JwtAuthGuard) @Get('temporary-password/online/:doorLockUuid') async getOnlineTemporaryPasswords( @Param('doorLockUuid') doorLockUuid: string, ) { return await this.doorLockService.getOnlineTemporaryPasswordsMultiple( doorLockUuid, ); } @ApiBearerAuth() @UseGuards(JwtAuthGuard) @Delete('temporary-password/online/:doorLockUuid/:passwordId') async deleteDoorLockPassword( @Param('doorLockUuid') doorLockUuid: string, @Param('passwordId') passwordId: string, ) { await this.doorLockService.deleteDoorLockPassword(doorLockUuid, passwordId); return { statusCode: HttpStatus.OK, message: 'Temporary Password deleted Successfully', }; } @ApiBearerAuth() @UseGuards(JwtAuthGuard) @Get('temporary-password/offline/one-time/:doorLockUuid') async getOfflineOneTimeTemporaryPasswords( @Param('doorLockUuid') doorLockUuid: string, ) { return await this.doorLockService.getOfflineOneTimeTemporaryPasswords( doorLockUuid, ); } @ApiBearerAuth() @UseGuards(JwtAuthGuard) @Get('temporary-password/offline/multiple-time/:doorLockUuid') async getOfflineMultipleTimeTemporaryPasswords( @Param('doorLockUuid') doorLockUuid: string, ) { return await this.doorLockService.getOfflineMultipleTimeTemporaryPasswords( doorLockUuid, ); } @ApiBearerAuth() @UseGuards(JwtAuthGuard) @Put('temporary-password/:doorLockUuid/offline/:passwordId') async updateOfflineTemporaryPassword( @Body() updateDoorLockOfflineTempDto: UpdateDoorLockOfflineTempDto, @Param('doorLockUuid') doorLockUuid: string, @Param('passwordId') passwordId: string, ) { const temporaryPassword = await this.doorLockService.updateOfflineTemporaryPassword( updateDoorLockOfflineTempDto, doorLockUuid, passwordId, ); return { statusCode: HttpStatus.CREATED, success: true, message: 'offline temporary password updated successfully', data: temporaryPassword, }; } @ApiBearerAuth() @UseGuards(JwtAuthGuard) @Post('open/:doorLockUuid') async openDoorLock(@Param('doorLockUuid') doorLockUuid: string) { await this.doorLockService.openDoorLock(doorLockUuid); return { statusCode: HttpStatus.CREATED, success: true, message: 'door lock opened successfully', }; } }