mirror of
https://github.com/SyncrowIOT/backend.git
synced 2025-07-15 18:27:05 +00:00
Added subspace entity
This commit is contained in:
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -1 +1,2 @@
|
||||
export * from './space.dto';
|
||||
export * from './subspace.dto';
|
||||
|
29
libs/common/src/modules/space/dtos/subspace.dto.ts
Normal file
29
libs/common/src/modules/space/dtos/subspace.dto.ts
Normal 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[];
|
||||
}
|
@ -1 +1,2 @@
|
||||
export * from './space.entity';
|
||||
export * from './subspace.entity';
|
||||
|
@ -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,
|
||||
|
37
libs/common/src/modules/space/entities/subspace.entity.ts
Normal file
37
libs/common/src/modules/space/entities/subspace.entity.ts
Normal 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);
|
||||
}
|
||||
}
|
@ -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 {}
|
||||
|
@ -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`,
|
||||
|
Reference in New Issue
Block a user