mirror of
https://github.com/SyncrowIOT/backend.git
synced 2026-10-24 19:27:55 +00:00
feat: Add unit invitation code functionality and user verification using code
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { GetUnitChildDto } from '../dtos/get.unit.dto';
|
||||
import { nanoid } from 'nanoid';
|
||||
import { SpaceTypeRepository } from '../../../libs/common/src/modules/space-type/repositories/space.type.repository';
|
||||
import {
|
||||
Injectable,
|
||||
@@ -7,7 +8,7 @@ import {
|
||||
BadRequestException,
|
||||
} from '@nestjs/common';
|
||||
import { SpaceRepository } from '@app/common/modules/space/repositories';
|
||||
import { AddUnitDto, AddUserUnitDto } from '../dtos';
|
||||
import { AddUnitDto, AddUserUnitDto, AddUserUnitUsingCodeDto } from '../dtos';
|
||||
import {
|
||||
UnitChildInterface,
|
||||
UnitParentInterface,
|
||||
@@ -227,7 +228,7 @@ export class UnitService {
|
||||
|
||||
async addUserUnit(addUserUnitDto: AddUserUnitDto) {
|
||||
try {
|
||||
await this.userSpaceRepository.save({
|
||||
return await this.userSpaceRepository.save({
|
||||
user: { uuid: addUserUnitDto.userUuid },
|
||||
space: { uuid: addUserUnitDto.unitUuid },
|
||||
});
|
||||
@@ -282,4 +283,61 @@ export class UnitService {
|
||||
}
|
||||
}
|
||||
}
|
||||
async getUnitInvitationCode(unitUuid: string): Promise<any> {
|
||||
try {
|
||||
// Generate a 6-character random invitation code
|
||||
const invitationCode = nanoid(6);
|
||||
|
||||
// Update the unit with the new invitation code
|
||||
await this.spaceRepository.update({ uuid: unitUuid }, { invitationCode });
|
||||
|
||||
// Fetch the updated unit
|
||||
const updatedUnit = await this.spaceRepository.findOneOrFail({
|
||||
where: { uuid: unitUuid },
|
||||
relations: ['spaceType'],
|
||||
});
|
||||
|
||||
return {
|
||||
uuid: updatedUnit.uuid,
|
||||
invitationCode: updatedUnit.invitationCode,
|
||||
type: updatedUnit.spaceType.type,
|
||||
};
|
||||
} catch (err) {
|
||||
if (err instanceof BadRequestException) {
|
||||
throw err;
|
||||
} else {
|
||||
throw new HttpException('Unit not found', HttpStatus.NOT_FOUND);
|
||||
}
|
||||
}
|
||||
}
|
||||
async verifyCodeAndAddUserUnit(
|
||||
addUserUnitUsingCodeDto: AddUserUnitUsingCodeDto,
|
||||
) {
|
||||
try {
|
||||
const unit = await this.spaceRepository.findOneOrFail({
|
||||
where: {
|
||||
invitationCode: addUserUnitUsingCodeDto.inviteCode,
|
||||
spaceType: { type: 'unit' },
|
||||
},
|
||||
relations: ['spaceType'],
|
||||
});
|
||||
if (unit.invitationCode) {
|
||||
const user = await this.addUserUnit({
|
||||
userUuid: addUserUnitUsingCodeDto.userUuid,
|
||||
unitUuid: unit.uuid,
|
||||
});
|
||||
if (user.uuid) {
|
||||
await this.spaceRepository.update(
|
||||
{ uuid: unit.uuid },
|
||||
{ invitationCode: null },
|
||||
);
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
throw new HttpException(
|
||||
'Invalid invitation code',
|
||||
HttpStatus.BAD_REQUEST,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user