reduced code duplication

This commit is contained in:
hannathkadher
2024-12-12 09:21:56 +04:00
parent 8af29cddfd
commit ba002ae474
6 changed files with 244 additions and 110 deletions
+73 -16
View File
@@ -9,25 +9,83 @@ import {
} from '@app/common/models/typeOrmCustom.model';
import { PageResponse } from '@app/common/dto/pagination.response.dto';
import { SubspaceDto } from '@app/common/modules/space/dtos';
import { SpaceService } from '../space.service';
import { QueryRunner } from 'typeorm';
import {
SpaceEntity,
SubspaceEntity,
} from '@app/common/modules/space/entities';
import { SpaceModelEntity } from '@app/common/modules/space-model';
import { ValidationService } from '../space-validation.service';
@Injectable()
export class SubSpaceService {
constructor(
private readonly subspaceRepository: SubspaceRepository,
private readonly spaceService: SpaceService,
private readonly validationService: ValidationService,
) {}
async createSubspaces(
subspaceData: Array<{ subspaceName: string; space: SpaceEntity }>,
queryRunner: QueryRunner,
): Promise<SubspaceEntity[]> {
try {
const subspaces = subspaceData.map((data) =>
queryRunner.manager.create(this.subspaceRepository.target, data),
);
return await queryRunner.manager.save(subspaces);
} catch (error) {
throw new HttpException(
'An unexpected error occurred while creating subspaces.',
HttpStatus.INTERNAL_SERVER_ERROR,
);
}
}
async createSubSpaceFromModel(
spaceModel: SpaceModelEntity,
space: SpaceEntity,
queryRunner: QueryRunner,
): Promise<void> {
const subSpaces = spaceModel.subspaceModels;
if (!subSpaces || subSpaces.length === 0) {
return;
}
const subspaceData = subSpaces.map((subSpaceModel) => ({
subspaceName: subSpaceModel.subspaceName,
space,
subSpaceModel,
}));
await this.createSubspaces(subspaceData, queryRunner);
}
async createSubspacesFromNames(
addSubspaceDtos: AddSubspaceDto[],
space: SpaceEntity,
queryRunner: QueryRunner,
): Promise<SubspaceEntity[]> {
const subspaceData = addSubspaceDtos.map((dto) => ({
subspaceName: dto.subspaceName,
space,
}));
return await this.createSubspaces(subspaceData, queryRunner);
}
async createSubspace(
addSubspaceDto: AddSubspaceDto,
params: GetSpaceParam,
): Promise<BaseResponseDto> {
const { communityUuid, spaceUuid, projectUuid } = params;
const space = await this.spaceService.validateCommunityAndSpace(
communityUuid,
spaceUuid,
projectUuid,
);
const space =
await this.validationService.validateSpaceWithinCommunityAndProject(
communityUuid,
projectUuid,
spaceUuid,
);
try {
const newSubspace = this.subspaceRepository.create({
@@ -52,10 +110,10 @@ export class SubSpaceService {
pageable: Partial<TypeORMCustomModelFindAllQuery>,
): Promise<BaseResponseDto> {
const { communityUuid, spaceUuid, projectUuid } = params;
await this.spaceService.validateCommunityAndSpace(
await this.validationService.validateSpaceWithinCommunityAndProject(
communityUuid,
spaceUuid,
projectUuid,
spaceUuid,
);
try {
@@ -76,10 +134,10 @@ export class SubSpaceService {
async findOne(params: GetSubSpaceParam): Promise<BaseResponseDto> {
const { communityUuid, subSpaceUuid, spaceUuid, projectUuid } = params;
await this.spaceService.validateCommunityAndSpace(
await this.validationService.validateSpaceWithinCommunityAndProject(
communityUuid,
spaceUuid,
projectUuid,
spaceUuid,
);
try {
const subSpace = await this.subspaceRepository.findOne({
@@ -116,12 +174,11 @@ export class SubSpaceService {
updateSubSpaceDto: AddSubspaceDto,
): Promise<BaseResponseDto> {
const { spaceUuid, communityUuid, subSpaceUuid, projectUuid } = params;
await this.spaceService.validateCommunityAndSpace(
await this.validationService.validateSpaceWithinCommunityAndProject(
communityUuid,
spaceUuid,
projectUuid,
spaceUuid,
);
const subSpace = await this.subspaceRepository.findOne({
where: { uuid: subSpaceUuid },
});
@@ -156,10 +213,10 @@ export class SubSpaceService {
async delete(params: GetSubSpaceParam): Promise<BaseResponseDto> {
const { spaceUuid, communityUuid, subSpaceUuid, projectUuid } = params;
await this.spaceService.validateCommunityAndSpace(
await this.validationService.validateSpaceWithinCommunityAndProject(
communityUuid,
spaceUuid,
projectUuid,
spaceUuid,
);
const subspace = await this.subspaceRepository.findOne({