Added subspace entity

This commit is contained in:
hannathkadher
2024-10-25 13:59:25 +04:00
parent 58a060e076
commit 6d6560b3e0
9 changed files with 89 additions and 7 deletions

View File

@ -8,7 +8,7 @@ import { UserOtpEntity } from '../modules/user/entities';
import { ProductEntity } from '../modules/product/entities';
import { DeviceEntity } from '../modules/device/entities';
import { PermissionTypeEntity } from '../modules/permission/entities';
import { SpaceEntity } from '../modules/space/entities';
import { SpaceEntity, SubspaceEntity } from '../modules/space/entities';
import { SpaceTypeEntity } from '../modules/space/entities';
import { UserSpaceEntity } from '../modules/user/entities';
import { DeviceUserPermissionEntity } from '../modules/device/entities';
@ -44,6 +44,7 @@ import { CommunityEntity } from '../modules/community/entities';
PermissionTypeEntity,
CommunityEntity,
SpaceEntity,
SubspaceEntity,
SpaceTypeEntity,
UserSpaceEntity,
DeviceUserPermissionEntity,

View File

@ -1,7 +1,7 @@
import { Column, Entity, ManyToOne, OneToMany, Unique, Index } from 'typeorm';
import { Column, Entity, ManyToOne, OneToMany, Unique, Index, JoinColumn } from 'typeorm';
import { AbstractEntity } from '../../abstract/entities/abstract.entity';
import { DeviceDto, DeviceUserPermissionDto } from '../dtos/device.dto';
import { SpaceEntity } from '../../space/entities';
import { SpaceEntity, SubspaceEntity } from '../../space/entities';
import { ProductEntity } from '../../product/entities';
import { UserEntity } from '../../user/entities';
import { DeviceNotificationDto } from '../dtos';
@ -52,6 +52,12 @@ export class DeviceEntity extends AbstractEntity<DeviceDto> {
})
productDevice: ProductEntity;
@ManyToOne(() => SubspaceEntity, (subspace) => subspace.devices, {
nullable: true,
})
@JoinColumn({ name: 'subspace_id' })
subspace: SubspaceEntity;
@Index()
@Column({ nullable: false })
uuid: string;

View File

@ -1 +1,2 @@
export * from './space.dto';
export * from './subspace.dto';

View File

@ -0,0 +1,29 @@
import { ApiProperty } from '@nestjs/swagger';
import { SpaceDto } from './space.dto';
import { DeviceDto } from '../../device/dtos';
export class SubspaceDto {
@ApiProperty({
example: 'd7a44e8a-32d5-4f39-ae2e-013f1245aead',
description: 'UUID of the subspace',
})
uuid: string;
@ApiProperty({
example: 'Meeting Room 1',
description: 'Name of the subspace',
})
subspaceName: string;
@ApiProperty({
type: () => SpaceDto,
description: 'The space to which this subspace belongs',
})
space: SpaceDto;
@ApiProperty({
example: [],
description: 'List of devices assigned to this subspace, if any',
})
devices: DeviceDto[];
}

View File

@ -1 +1,2 @@
export * from './space.entity';
export * from './subspace.entity';

View File

@ -11,6 +11,7 @@ import { AbstractEntity } from '../../abstract/entities/abstract.entity';
import { UserSpaceEntity } from '../../user/entities';
import { DeviceEntity } from '../../device/entities';
import { CommunityEntity } from '../../community/entities';
import { SubspaceEntity } from './subspace.entity';
@Entity({ name: 'space-type' })
export class SpaceTypeEntity extends AbstractEntity<SpaceTypeDto> {
@ -71,6 +72,11 @@ export class SpaceEntity extends AbstractEntity<SpaceDto> {
@OneToMany(() => UserSpaceEntity, (userSpace) => userSpace.space)
userSpaces: UserSpaceEntity[];
@OneToMany(() => SubspaceEntity, (subspace) => subspace.space, {
nullable: true,
})
subspaces?: SubspaceEntity[];
@OneToMany(
() => DeviceEntity,
(devicesSpaceEntity) => devicesSpaceEntity.spaceDevice,

View File

@ -0,0 +1,37 @@
import { Column, Entity, JoinColumn, ManyToOne, OneToMany } from 'typeorm';
import { AbstractEntity } from '../../abstract/entities/abstract.entity';
import { DeviceEntity } from '../../device/entities';
import { SpaceEntity } from './space.entity';
import { SubspaceDto } from '../dtos';
@Entity({ name: 'subspace' })
export class SubspaceEntity extends AbstractEntity<SubspaceDto> {
@Column({
type: 'uuid',
default: () => 'gen_random_uuid()',
nullable: false,
})
public uuid: string;
@Column({
nullable: false,
})
public subspaceName: string;
@ManyToOne(() => SpaceEntity, (space) => space.subspaces, {
nullable: false,
onDelete: 'CASCADE',
})
@JoinColumn({ name: 'space_id' })
space: SpaceEntity;
@OneToMany(() => DeviceEntity, (device) => device.subspace, {
nullable: true,
})
devices: DeviceEntity[];
constructor(partial: Partial<SubspaceEntity>) {
super();
Object.assign(this, partial);
}
}

View File

@ -1,11 +1,13 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { SpaceEntity, SpaceTypeEntity } from './entities';
import { SpaceEntity, SpaceTypeEntity, SubspaceEntity } from './entities';
@Module({
providers: [],
exports: [],
controllers: [],
imports: [TypeOrmModule.forFeature([SpaceEntity, SpaceTypeEntity])],
imports: [
TypeOrmModule.forFeature([SpaceEntity, SpaceTypeEntity, SubspaceEntity]),
],
})
export class SpaceRepositoryModule {}

View File

@ -10,7 +10,7 @@ export class UserSpaceService {
async getSpacesForUser(userUuid: string): Promise<BaseResponseDto> {
const userSpaces = await this.userSpaceRepository.find({
where: { user: { uuid: userUuid } },
relations: ['space'],
relations: ['space', 'space.community'],
});
if (!userSpaces || userSpaces.length === 0) {
@ -20,7 +20,6 @@ export class UserSpaceService {
);
}
return new SuccessResponseDto({
data: userSpaces,
message: `Spaces for user ${userUuid} retrieved successfully`,