mirror of
https://github.com/SyncrowIOT/backend.git
synced 2025-07-16 02:36:19 +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 { SpaceUserService, ValidationService } from 'src/space/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 { CommunityRepository } from '@app/common/modules/community/repositories';
|
||||
import { ProjectRepository } from '@app/common/modules/project/repositiories';
|
||||
@ -51,6 +54,7 @@ import { RoleTypeRepository } from '@app/common/modules/role-type/repositories';
|
||||
PermissionTypeRepository,
|
||||
ProjectUserService,
|
||||
RoleTypeRepository,
|
||||
InviteSpaceRepository,
|
||||
],
|
||||
exports: [InviteUserService],
|
||||
})
|
||||
|
@ -3,17 +3,21 @@ import { UserSpaceRepository } from '@app/common/modules/user/repositories';
|
||||
import { SuccessResponseDto } from '@app/common/dto/success.response.dto';
|
||||
import { BaseResponseDto } from '@app/common/dto/base.response.dto';
|
||||
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 { UserDevicePermissionService } from 'src/user-device-permission/services';
|
||||
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()
|
||||
export class UserSpaceService {
|
||||
constructor(
|
||||
private readonly userSpaceRepository: UserSpaceRepository,
|
||||
private readonly spaceRepository: SpaceRepository,
|
||||
private readonly inviteSpaceRepository: InviteSpaceRepository,
|
||||
private readonly userDevicePermissionService: UserDevicePermissionService,
|
||||
) {}
|
||||
|
||||
@ -38,15 +42,17 @@ export class UserSpaceService {
|
||||
userUuid: string,
|
||||
) {
|
||||
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(space.uuid);
|
||||
const deviceUUIDs = await this.getDeviceUUIDsForSpace(inviteSpace.uuid);
|
||||
|
||||
await this.addUserPermissionsToDevices(userUuid, deviceUUIDs);
|
||||
|
||||
await this.clearSpaceInvitationCode(inviteSpace.uuid);
|
||||
} catch (err) {
|
||||
if (err instanceof HttpException) {
|
||||
throw err;
|
||||
@ -59,23 +65,31 @@ export class UserSpaceService {
|
||||
}
|
||||
}
|
||||
|
||||
private async findSpaceByInviteCode(
|
||||
private async findInviteSpaceByInviteCode(
|
||||
inviteCode: string,
|
||||
): Promise<SpaceEntity> {
|
||||
): Promise<InviteSpaceEntity> {
|
||||
try {
|
||||
const space = await this.spaceRepository.findOneOrFail({
|
||||
const inviteSpace = await this.inviteSpaceRepository.findOneOrFail({
|
||||
where: {
|
||||
invitationCode: inviteCode,
|
||||
isActive: true,
|
||||
},
|
||||
relations: ['space'],
|
||||
});
|
||||
return space;
|
||||
return inviteSpace;
|
||||
} catch (error) {
|
||||
throw new HttpException(
|
||||
'Space with the provided invite code not found',
|
||||
HttpStatus.NOT_FOUND,
|
||||
'Invalid invitation code',
|
||||
HttpStatus.BAD_REQUEST,
|
||||
);
|
||||
}
|
||||
}
|
||||
private async clearSpaceInvitationCode(inviteSpaceUuid: string) {
|
||||
await this.inviteSpaceRepository.update(
|
||||
{ uuid: inviteSpaceUuid },
|
||||
{ isActive: false },
|
||||
);
|
||||
}
|
||||
|
||||
private async addUserToSpace(userUuid: string, spaceUuid: string) {
|
||||
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 }[]> {
|
||||
const devices = await this.spaceRepository.find({
|
||||
where: { uuid: unitUuid },
|
||||
|
@ -12,7 +12,10 @@ import { UserSpaceController } from './controllers';
|
||||
import { CommunityModule } from 'src/community/community.module';
|
||||
import { UserSpaceService } from './services';
|
||||
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 { DeviceUserPermissionRepository } from '@app/common/modules/device/repositories';
|
||||
import { PermissionTypeRepository } from '@app/common/modules/permission/repositories';
|
||||
@ -32,6 +35,7 @@ import { PermissionTypeRepository } from '@app/common/modules/permission/reposit
|
||||
DeviceUserPermissionRepository,
|
||||
PermissionTypeRepository,
|
||||
UserSpaceService,
|
||||
InviteSpaceRepository,
|
||||
],
|
||||
exports: [UserService],
|
||||
})
|
||||
|
Reference in New Issue
Block a user