refactor: changed functions to use pagination logic correctly

This commit is contained in:
2026-07-05 19:20:08 +03:30
parent a14bd490be
commit 9f61152d94
5 changed files with 63 additions and 69 deletions
@@ -6,8 +6,6 @@ import { TMProject } from "../entities/project.entity";
import { CreateProjectDto } from "../dto/project/create-project.dto";
import { UpdateProjectDto } from "../dto/project/update-project.dto";
import { PaginationDto } from "../../../common/DTO/pagination.dto";
import { PaginatedResult } from "../../../common/interfaces/paginated-result.interface";
import { buildPageFormat } from "../../../common/helpers/pagination.helper";
import { User } from "../../users/entities/user.entity";
import { ProjectMessage, WorkSpaceMessage } from "../../../common/enums/message.enum";
import { WorkspaceService } from "./workspace.service";
@@ -21,37 +19,53 @@ export class ProjectService {
private readonly userRepository: Repository<User>,
) {}
async findAll(pagination: PaginationDto, baseUrl: string): Promise<PaginatedResult<TMProject>> {
async findAll(pagination: PaginationDto): Promise<{ projects: TMProject[]; count: number; paginate: true }> {
const page = pagination.page ?? 1;
const limit = pagination.limit ?? 10;
const skip = (page - 1) * limit;
const [data, totalItems] = await this.projectRepository.findAndCount({ skip, take: limit });
const [projects, count] = await this.projectRepository.findAndCount({
skip: skip,
take: limit,
relations: {
users: true,
},
select: {
users: {
id: true,
firstName: true,
lastName: true,
},
},
});
return {
data,
meta: buildPageFormat(page, limit, totalItems, baseUrl),
};
return { projects, count, paginate: true };
}
async findByWorkspace(workspaceId: string, pagination: PaginationDto, baseUrl: string): Promise<PaginatedResult<TMProject>> {
async findByWorkspace(workspaceId: string, pagination: PaginationDto): Promise<{ projects: TMProject[]; count: number; paginate: true }> {
await this.workspaceService.findOneOrFail(workspaceId);
const page = pagination.page ?? 1;
const limit = pagination.limit ?? 10;
const skip = (page - 1) * limit;
const [data, totalItems] = await this.projectRepository.findAndCount({
const [projects, count] = await this.projectRepository.findAndCount({
where: { workspaceId },
relations: ["taskPhases", "users"],
relations: {
users: true,
},
select: {
users: {
id: true,
firstName: true,
lastName: true,
},
},
skip,
take: limit,
});
return {
data,
meta: buildPageFormat(page, limit, totalItems, baseUrl),
};
return { projects, count, paginate: true };
}
async findOneOrFail(id: string): Promise<TMProject> {
@@ -112,7 +126,26 @@ export class ProjectService {
}
async remove(id: string): Promise<TMProject> {
const project = await this.findOneOrFail(id);
const project = await this.projectRepository.findOne({
where: {
id,
},
relations: {
taskPhases: true,
},
select: {
taskPhases: {
id: true,
},
},
});
if(!project) throw new NotFoundException(ProjectMessage.PROJECT_NOT_FOUND);
const taskPhases = project.taskPhases;
if (taskPhases !== undefined && taskPhases.length) {
throw new BadRequestException(ProjectMessage.PROJECT_CONTAINS_TASK_PHASES);
}
await this.projectRepository.delete(id);
return project;
}