mirror of
https://github.com/SyncrowIOT/backend.git
synced 2025-07-16 18:56:22 +00:00
Add InviteSpaceRepository and update invite handling logic
This commit is contained in:
@ -15,7 +15,10 @@ import {
|
|||||||
import { EmailService } from '@app/common/util/email.service';
|
import { EmailService } from '@app/common/util/email.service';
|
||||||
import { SpaceUserService, ValidationService } from 'src/space/services';
|
import { SpaceUserService, ValidationService } from 'src/space/services';
|
||||||
import { CommunityService } from 'src/community/services';
|
import { CommunityService } from 'src/community/services';
|
||||||
import { SpaceRepository } from '@app/common/modules/space';
|
import {
|
||||||
|
InviteSpaceRepository,
|
||||||
|
SpaceRepository,
|
||||||
|
} from '@app/common/modules/space';
|
||||||
import { SpaceModelRepository } from '@app/common/modules/space-model';
|
import { SpaceModelRepository } from '@app/common/modules/space-model';
|
||||||
import { CommunityRepository } from '@app/common/modules/community/repositories';
|
import { CommunityRepository } from '@app/common/modules/community/repositories';
|
||||||
import { ProjectRepository } from '@app/common/modules/project/repositiories';
|
import { ProjectRepository } from '@app/common/modules/project/repositiories';
|
||||||
@ -51,6 +54,7 @@ import { RoleTypeRepository } from '@app/common/modules/role-type/repositories';
|
|||||||
PermissionTypeRepository,
|
PermissionTypeRepository,
|
||||||
ProjectUserService,
|
ProjectUserService,
|
||||||
RoleTypeRepository,
|
RoleTypeRepository,
|
||||||
|
InviteSpaceRepository,
|
||||||
],
|
],
|
||||||
exports: [InviteUserService],
|
exports: [InviteUserService],
|
||||||
})
|
})
|
||||||
|
@ -3,17 +3,21 @@ import { UserSpaceRepository } from '@app/common/modules/user/repositories';
|
|||||||
import { SuccessResponseDto } from '@app/common/dto/success.response.dto';
|
import { SuccessResponseDto } from '@app/common/dto/success.response.dto';
|
||||||
import { BaseResponseDto } from '@app/common/dto/base.response.dto';
|
import { BaseResponseDto } from '@app/common/dto/base.response.dto';
|
||||||
import { AddUserSpaceDto, AddUserSpaceUsingCodeDto } from '../dtos';
|
import { AddUserSpaceDto, AddUserSpaceUsingCodeDto } from '../dtos';
|
||||||
import { SpaceRepository } from '@app/common/modules/space/repositories';
|
import {
|
||||||
|
InviteSpaceRepository,
|
||||||
|
SpaceRepository,
|
||||||
|
} from '@app/common/modules/space/repositories';
|
||||||
import { CommonErrorCodes } from '@app/common/constants/error-codes.enum';
|
import { CommonErrorCodes } from '@app/common/constants/error-codes.enum';
|
||||||
import { UserDevicePermissionService } from 'src/user-device-permission/services';
|
import { UserDevicePermissionService } from 'src/user-device-permission/services';
|
||||||
import { PermissionType } from '@app/common/constants/permission-type.enum';
|
import { PermissionType } from '@app/common/constants/permission-type.enum';
|
||||||
import { SpaceEntity } from '@app/common/modules/space/entities';
|
import { InviteSpaceEntity } from '@app/common/modules/space/entities/invite-space.entity';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class UserSpaceService {
|
export class UserSpaceService {
|
||||||
constructor(
|
constructor(
|
||||||
private readonly userSpaceRepository: UserSpaceRepository,
|
private readonly userSpaceRepository: UserSpaceRepository,
|
||||||
private readonly spaceRepository: SpaceRepository,
|
private readonly spaceRepository: SpaceRepository,
|
||||||
|
private readonly inviteSpaceRepository: InviteSpaceRepository,
|
||||||
private readonly userDevicePermissionService: UserDevicePermissionService,
|
private readonly userDevicePermissionService: UserDevicePermissionService,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
@ -38,15 +42,17 @@ export class UserSpaceService {
|
|||||||
userUuid: string,
|
userUuid: string,
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
const space = await this.findSpaceByInviteCode(params.inviteCode);
|
const inviteSpace = await this.findInviteSpaceByInviteCode(
|
||||||
|
params.inviteCode,
|
||||||
|
);
|
||||||
|
|
||||||
await this.addUserToSpace(userUuid, space.uuid);
|
await this.addUserToSpace(userUuid, inviteSpace.space.uuid);
|
||||||
|
|
||||||
await this.clearUnitInvitationCode(space.uuid);
|
const deviceUUIDs = await this.getDeviceUUIDsForSpace(inviteSpace.uuid);
|
||||||
|
|
||||||
const deviceUUIDs = await this.getDeviceUUIDsForSpace(space.uuid);
|
|
||||||
|
|
||||||
await this.addUserPermissionsToDevices(userUuid, deviceUUIDs);
|
await this.addUserPermissionsToDevices(userUuid, deviceUUIDs);
|
||||||
|
|
||||||
|
await this.clearSpaceInvitationCode(inviteSpace.uuid);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err instanceof HttpException) {
|
if (err instanceof HttpException) {
|
||||||
throw err;
|
throw err;
|
||||||
@ -59,23 +65,31 @@ export class UserSpaceService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async findSpaceByInviteCode(
|
private async findInviteSpaceByInviteCode(
|
||||||
inviteCode: string,
|
inviteCode: string,
|
||||||
): Promise<SpaceEntity> {
|
): Promise<InviteSpaceEntity> {
|
||||||
try {
|
try {
|
||||||
const space = await this.spaceRepository.findOneOrFail({
|
const inviteSpace = await this.inviteSpaceRepository.findOneOrFail({
|
||||||
where: {
|
where: {
|
||||||
invitationCode: inviteCode,
|
invitationCode: inviteCode,
|
||||||
|
isActive: true,
|
||||||
},
|
},
|
||||||
|
relations: ['space'],
|
||||||
});
|
});
|
||||||
return space;
|
return inviteSpace;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
throw new HttpException(
|
throw new HttpException(
|
||||||
'Space with the provided invite code not found',
|
'Invalid invitation code',
|
||||||
HttpStatus.NOT_FOUND,
|
HttpStatus.BAD_REQUEST,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private async clearSpaceInvitationCode(inviteSpaceUuid: string) {
|
||||||
|
await this.inviteSpaceRepository.update(
|
||||||
|
{ uuid: inviteSpaceUuid },
|
||||||
|
{ isActive: false },
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
private async addUserToSpace(userUuid: string, spaceUuid: string) {
|
private async addUserToSpace(userUuid: string, spaceUuid: string) {
|
||||||
try {
|
try {
|
||||||
@ -110,13 +124,6 @@ export class UserSpaceService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async clearUnitInvitationCode(spaceUuid: string) {
|
|
||||||
await this.spaceRepository.update(
|
|
||||||
{ uuid: spaceUuid },
|
|
||||||
{ invitationCode: null },
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
async getDeviceUUIDsForSpace(unitUuid: string): Promise<{ uuid: string }[]> {
|
async getDeviceUUIDsForSpace(unitUuid: string): Promise<{ uuid: string }[]> {
|
||||||
const devices = await this.spaceRepository.find({
|
const devices = await this.spaceRepository.find({
|
||||||
where: { uuid: unitUuid },
|
where: { uuid: unitUuid },
|
||||||
|
@ -12,7 +12,10 @@ import { UserSpaceController } from './controllers';
|
|||||||
import { CommunityModule } from 'src/community/community.module';
|
import { CommunityModule } from 'src/community/community.module';
|
||||||
import { UserSpaceService } from './services';
|
import { UserSpaceService } from './services';
|
||||||
import { CommunityRepository } from '@app/common/modules/community/repositories';
|
import { CommunityRepository } from '@app/common/modules/community/repositories';
|
||||||
import { SpaceRepository } from '@app/common/modules/space/repositories';
|
import {
|
||||||
|
InviteSpaceRepository,
|
||||||
|
SpaceRepository,
|
||||||
|
} from '@app/common/modules/space/repositories';
|
||||||
import { UserDevicePermissionService } from 'src/user-device-permission/services';
|
import { UserDevicePermissionService } from 'src/user-device-permission/services';
|
||||||
import { DeviceUserPermissionRepository } from '@app/common/modules/device/repositories';
|
import { DeviceUserPermissionRepository } from '@app/common/modules/device/repositories';
|
||||||
import { PermissionTypeRepository } from '@app/common/modules/permission/repositories';
|
import { PermissionTypeRepository } from '@app/common/modules/permission/repositories';
|
||||||
@ -32,6 +35,7 @@ import { PermissionTypeRepository } from '@app/common/modules/permission/reposit
|
|||||||
DeviceUserPermissionRepository,
|
DeviceUserPermissionRepository,
|
||||||
PermissionTypeRepository,
|
PermissionTypeRepository,
|
||||||
UserSpaceService,
|
UserSpaceService,
|
||||||
|
InviteSpaceRepository,
|
||||||
],
|
],
|
||||||
exports: [UserService],
|
exports: [UserService],
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user