Add InviteSpaceRepository and update invite handling logic

This commit is contained in:
faris Aljohari
2025-01-09 05:53:43 -06:00
parent ec467d124e
commit 45181704a7
3 changed files with 37 additions and 22 deletions

View File

@ -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],
})

View File

@ -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 },

View File

@ -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],
})