finished return the spaces in get community

This commit is contained in:
faris Aljohari
2025-03-18 01:52:01 +03:00
parent 990bcffc2f
commit 9902b02700
5 changed files with 151 additions and 4 deletions

View File

@ -3,13 +3,49 @@ import { CommunityService } from './services/community.service';
import { CommunityController } from './controllers/community.controller'; import { CommunityController } from './controllers/community.controller';
import { ConfigModule } from '@nestjs/config'; import { ConfigModule } from '@nestjs/config';
import { SpaceRepositoryModule } from '@app/common/modules/space/space.repository.module'; import { SpaceRepositoryModule } from '@app/common/modules/space/space.repository.module';
import { SpaceRepository } from '@app/common/modules/space/repositories'; import {
InviteSpaceRepository,
SpaceLinkRepository,
SpaceProductAllocationRepository,
SpaceRepository,
TagRepository,
} from '@app/common/modules/space/repositories';
import { UserSpaceRepository } from '@app/common/modules/user/repositories'; import { UserSpaceRepository } from '@app/common/modules/user/repositories';
import { UserRepositoryModule } from '@app/common/modules/user/user.repository.module'; import { UserRepositoryModule } from '@app/common/modules/user/user.repository.module';
import { SpacePermissionService } from '@app/common/helper/services'; import { SpacePermissionService } from '@app/common/helper/services';
import { CommunityRepository } from '@app/common/modules/community/repositories'; import { CommunityRepository } from '@app/common/modules/community/repositories';
import { TuyaService } from '@app/common/integrations/tuya/services/tuya.service'; import { TuyaService } from '@app/common/integrations/tuya/services/tuya.service';
import { ProjectRepository } from '@app/common/modules/project/repositiories'; import { ProjectRepository } from '@app/common/modules/project/repositiories';
import {
SpaceLinkService,
SpaceService,
SubspaceDeviceService,
SubSpaceService,
ValidationService,
} from 'src/space/services';
import { TagService as NewTagService } from 'src/tags/services';
import { TagService } from 'src/space/services/tag';
import {
SpaceModelService,
SubSpaceModelService,
} from 'src/space-model/services';
import { SpaceProductAllocationService } from 'src/space/services/space-product-allocation.service';
import {
SubspaceProductAllocationRepository,
SubspaceRepository,
} from '@app/common/modules/space/repositories/subspace.repository';
import { SubspaceProductAllocationService } from 'src/space/services/subspace/subspace-product-allocation.service';
import {
SpaceModelProductAllocationRepoitory,
SpaceModelRepository,
SubspaceModelProductAllocationRepoitory,
SubspaceModelRepository,
} from '@app/common/modules/space-model';
import { DeviceRepository } from '@app/common/modules/device/repositories';
import { NewTagRepository } from '@app/common/modules/tag/repositories/tag-repository';
import { ProductRepository } from '@app/common/modules/product/repositories';
import { SpaceModelProductAllocationService } from 'src/space-model/services/space-model-product-allocation.service';
import { SubspaceModelProductAllocationService } from 'src/space-model/services/subspace/subspace-model-product-allocation.service';
@Module({ @Module({
imports: [ConfigModule, SpaceRepositoryModule, UserRepositoryModule], imports: [ConfigModule, SpaceRepositoryModule, UserRepositoryModule],
@ -22,6 +58,32 @@ import { ProjectRepository } from '@app/common/modules/project/repositiories';
CommunityRepository, CommunityRepository,
SpacePermissionService, SpacePermissionService,
ProjectRepository, ProjectRepository,
SpaceService,
InviteSpaceRepository,
SpaceLinkService,
SubSpaceService,
ValidationService,
NewTagService,
SpaceModelService,
SpaceProductAllocationService,
SpaceLinkRepository,
SubspaceRepository,
TagService,
SubspaceDeviceService,
SubspaceProductAllocationService,
SpaceModelRepository,
DeviceRepository,
NewTagRepository,
ProductRepository,
SubSpaceModelService,
SpaceModelProductAllocationService,
SpaceProductAllocationRepository,
SubspaceProductAllocationRepository,
TagRepository,
SubspaceModelRepository,
SubspaceModelProductAllocationService,
SpaceModelProductAllocationRepoitory,
SubspaceModelProductAllocationRepoitory,
], ],
exports: [CommunityService, SpacePermissionService], exports: [CommunityService, SpacePermissionService],
}) })

View File

@ -14,12 +14,14 @@ import { TuyaService } from '@app/common/integrations/tuya/services/tuya.service
import { ProjectRepository } from '@app/common/modules/project/repositiories'; import { ProjectRepository } from '@app/common/modules/project/repositiories';
import { ORPHAN_COMMUNITY_NAME } from '@app/common/constants/orphan-constant'; import { ORPHAN_COMMUNITY_NAME } from '@app/common/constants/orphan-constant';
import { Not } from 'typeorm'; import { Not } from 'typeorm';
import { SpaceService } from 'src/space/services';
@Injectable() @Injectable()
export class CommunityService { export class CommunityService {
constructor( constructor(
private readonly communityRepository: CommunityRepository, private readonly communityRepository: CommunityRepository,
private readonly projectRepository: ProjectRepository, private readonly projectRepository: ProjectRepository,
private readonly spaceService: SpaceService,
private readonly tuyaService: TuyaService, private readonly tuyaService: TuyaService,
) {} ) {}
@ -98,6 +100,27 @@ export class CommunityService {
const { baseResponseDto, paginationResponseDto } = const { baseResponseDto, paginationResponseDto } =
await customModel.findAll(pageable); await customModel.findAll(pageable);
const communitiesWithSpaces = await Promise.all(
baseResponseDto.data.map(async (community: CommunityDto) => {
const spaces = await this.spaceService.getSpacesHierarchyForCommunity(
{
communityUuid: community.uuid,
projectUuid: param.projectUuid,
},
{
onlyWithDevices: false,
},
);
return {
...community,
spaces: spaces.data,
};
}),
);
baseResponseDto.data = communitiesWithSpaces;
return new PageResponse<CommunityDto>( return new PageResponse<CommunityDto>(
baseResponseDto, baseResponseDto,
paginationResponseDto, paginationResponseDto,

View File

@ -13,11 +13,21 @@ import {
InviteUserSpaceRepository, InviteUserSpaceRepository,
} from '@app/common/modules/Invite-user/repositiories'; } from '@app/common/modules/Invite-user/repositiories';
import { EmailService } from '@app/common/util/email.service'; import { EmailService } from '@app/common/util/email.service';
import { SpaceUserService, ValidationService } from 'src/space/services'; import {
SpaceLinkService,
SpaceService,
SpaceUserService,
SubspaceDeviceService,
SubSpaceService,
ValidationService,
} from 'src/space/services';
import { CommunityService } from 'src/community/services'; import { CommunityService } from 'src/community/services';
import { import {
InviteSpaceRepository, InviteSpaceRepository,
SpaceLinkRepository,
SpaceProductAllocationRepository,
SpaceRepository, SpaceRepository,
TagRepository,
} from '@app/common/modules/space'; } 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';
@ -34,9 +44,31 @@ import { ProjectUserService } from 'src/project/services/project-user.service';
import { RoleTypeRepository } from '@app/common/modules/role-type/repositories'; import { RoleTypeRepository } from '@app/common/modules/role-type/repositories';
import { RegionRepository } from '@app/common/modules/region/repositories'; import { RegionRepository } from '@app/common/modules/region/repositories';
import { TimeZoneRepository } from '@app/common/modules/timezone/repositories'; import { TimeZoneRepository } from '@app/common/modules/timezone/repositories';
import { CommunityModule } from 'src/community/community.module';
import { TagService as NewTagService } from 'src/tags/services';
import { TagService } from 'src/space/services/tag';
import {
SpaceModelService,
SubSpaceModelService,
} from 'src/space-model/services';
import { SpaceProductAllocationService } from 'src/space/services/space-product-allocation.service';
import {
SubspaceProductAllocationRepository,
SubspaceRepository,
} from '@app/common/modules/space/repositories/subspace.repository';
import { SubspaceProductAllocationService } from 'src/space/services/subspace/subspace-product-allocation.service';
import {
SpaceModelProductAllocationRepoitory,
SubspaceModelProductAllocationRepoitory,
SubspaceModelRepository,
} from '@app/common/modules/space-model';
import { NewTagRepository } from '@app/common/modules/tag/repositories/tag-repository';
import { ProductRepository } from '@app/common/modules/product/repositories';
import { SpaceModelProductAllocationService } from 'src/space-model/services/space-model-product-allocation.service';
import { SubspaceModelProductAllocationService } from 'src/space-model/services/subspace/subspace-model-product-allocation.service';
@Module({ @Module({
imports: [ConfigModule, InviteUserRepositoryModule], imports: [ConfigModule, InviteUserRepositoryModule, CommunityModule],
controllers: [InviteUserController], controllers: [InviteUserController],
providers: [ providers: [
InviteUserService, InviteUserService,
@ -64,6 +96,32 @@ import { TimeZoneRepository } from '@app/common/modules/timezone/repositories';
UserService, UserService,
RegionRepository, RegionRepository,
TimeZoneRepository, TimeZoneRepository,
SpaceService,
InviteSpaceRepository,
SpaceLinkService,
SubSpaceService,
ValidationService,
NewTagService,
SpaceModelService,
SpaceProductAllocationService,
SpaceLinkRepository,
SubspaceRepository,
TagService,
SubspaceDeviceService,
SubspaceProductAllocationService,
SpaceModelRepository,
DeviceRepository,
NewTagRepository,
ProductRepository,
SubSpaceModelService,
SpaceModelProductAllocationService,
SpaceProductAllocationRepository,
SubspaceProductAllocationRepository,
TagRepository,
SubspaceModelRepository,
SubspaceModelProductAllocationService,
SpaceModelProductAllocationRepoitory,
SubspaceModelProductAllocationRepoitory,
], ],
exports: [InviteUserService], exports: [InviteUserService],
}) })

View File

@ -57,6 +57,7 @@ import {
SceneRepository, SceneRepository,
} from '@app/common/modules/scene/repositories'; } from '@app/common/modules/scene/repositories';
import { AutomationRepository } from '@app/common/modules/automation/repositories'; import { AutomationRepository } from '@app/common/modules/automation/repositories';
import { CommunityModule } from 'src/community/community.module';
const CommandHandlers = [ const CommandHandlers = [
PropogateUpdateSpaceModelHandler, PropogateUpdateSpaceModelHandler,
@ -65,7 +66,7 @@ const CommandHandlers = [
]; ];
@Module({ @Module({
imports: [ConfigModule, SpaceRepositoryModule, CqrsModule], imports: [ConfigModule, SpaceRepositoryModule, CqrsModule, CommunityModule],
controllers: [SpaceModelController], controllers: [SpaceModelController],
providers: [ providers: [
...CommandHandlers, ...CommandHandlers,

View File

@ -1,8 +1,10 @@
import { SpaceRepository } from '@app/common/modules/space/repositories'; import { SpaceRepository } from '@app/common/modules/space/repositories';
import { import {
BadRequestException, BadRequestException,
forwardRef,
HttpException, HttpException,
HttpStatus, HttpStatus,
Inject,
Injectable, Injectable,
} from '@nestjs/common'; } from '@nestjs/common';
import { CommunityService } from '../../community/services'; import { CommunityService } from '../../community/services';
@ -29,6 +31,7 @@ import { ProjectEntity } from '@app/common/modules/project/entities';
export class ValidationService { export class ValidationService {
constructor( constructor(
private readonly projectService: ProjectService, private readonly projectService: ProjectService,
@Inject(forwardRef(() => CommunityService))
private readonly communityService: CommunityService, private readonly communityService: CommunityService,
private readonly spaceRepository: SpaceRepository, private readonly spaceRepository: SpaceRepository,
private readonly projectRepository: ProjectRepository, private readonly projectRepository: ProjectRepository,