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

View File

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

View File

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