Refactor error handling in controllers and services

This commit is contained in:
faris Aljohari
2024-04-14 11:28:52 +03:00
parent 53628236a6
commit d92ae03eac
10 changed files with 287 additions and 308 deletions

View File

@ -53,8 +53,8 @@ export class UnitService {
},
relations: ['spaceType'],
});
if (!unit) {
throw new HttpException('Unit not found', HttpStatus.NOT_FOUND);
if (!unit || !unit.spaceType || unit.spaceType.type !== 'unit') {
throw new BadRequestException('Invalid unit UUID');
}
return {
uuid: unit.uuid,
@ -64,45 +64,54 @@ export class UnitService {
type: unit.spaceType.type,
};
} catch (err) {
throw new HttpException(
err.message,
err.status || HttpStatus.INTERNAL_SERVER_ERROR,
);
if (err instanceof BadRequestException) {
throw err; // Re-throw BadRequestException
} else {
throw new HttpException('Unit not found', HttpStatus.NOT_FOUND);
}
}
}
async getUnitChildByUuid(
unitUuid: string,
getUnitChildDto: GetUnitChildDto,
): Promise<UnitChildInterface> {
const { includeSubSpaces, page, pageSize } = getUnitChildDto;
try {
const { includeSubSpaces, page, pageSize } = getUnitChildDto;
const space = await this.spaceRepository.findOneOrFail({
where: { uuid: unitUuid },
relations: ['children', 'spaceType'],
});
const space = await this.spaceRepository.findOneOrFail({
where: { uuid: unitUuid },
relations: ['children', 'spaceType'],
});
if (space.spaceType.type !== 'unit') {
throw new HttpException('Unit not found', HttpStatus.NOT_FOUND);
if (!space || !space.spaceType || space.spaceType.type !== 'unit') {
throw new BadRequestException('Invalid unit UUID');
}
const totalCount = await this.spaceRepository.count({
where: { parent: { uuid: space.uuid } },
});
const children = await this.buildHierarchy(
space,
includeSubSpaces,
page,
pageSize,
);
return {
uuid: space.uuid,
name: space.spaceName,
type: space.spaceType.type,
totalCount,
children,
};
} catch (err) {
if (err instanceof BadRequestException) {
throw err; // Re-throw BadRequestException
} else {
throw new HttpException('Unit not found', HttpStatus.NOT_FOUND);
}
}
const totalCount = await this.spaceRepository.count({
where: { parent: { uuid: space.uuid } },
});
const children = await this.buildHierarchy(
space,
includeSubSpaces,
page,
pageSize,
);
return {
uuid: space.uuid,
name: space.spaceName,
type: space.spaceType.type,
totalCount,
children,
};
}
private async buildHierarchy(
@ -165,10 +174,9 @@ export class UnitService {
},
relations: ['spaceType', 'parent', 'parent.spaceType'],
});
if (!unit) {
throw new HttpException('Unit not found', HttpStatus.NOT_FOUND);
if (!unit || !unit.spaceType || unit.spaceType.type !== 'unit') {
throw new BadRequestException('Invalid unit UUID');
}
return {
uuid: unit.uuid,
name: unit.spaceName,
@ -180,10 +188,11 @@ export class UnitService {
},
};
} catch (err) {
throw new HttpException(
err.message,
err.status || HttpStatus.INTERNAL_SERVER_ERROR,
);
if (err instanceof BadRequestException) {
throw err; // Re-throw BadRequestException
} else {
throw new HttpException('Unit not found', HttpStatus.NOT_FOUND);
}
}
}