update: add since to the query of invoice for admin

This commit is contained in:
mahyargdz
2025-02-28 13:45:39 +03:30
parent 76feef7645
commit 207e0e46ea
4 changed files with 63 additions and 37 deletions
@@ -2,6 +2,8 @@ import { Injectable } from "@nestjs/common";
import { InjectRepository } from "@nestjs/typeorm";
import { Repository } from "typeorm";
import { PaginationUtils } from "../../utils/providers/pagination.utils";
import { InvoicesSearchQueryDto } from "../DTO/invoices-search-query.dto";
import { Invoice } from "../entities/invoice.entity";
@Injectable()
@@ -9,4 +11,47 @@ export class InvoicesRepository extends Repository<Invoice> {
constructor(@InjectRepository(Invoice) invoicesRepository: Repository<Invoice>) {
super(invoicesRepository.target, invoicesRepository.manager, invoicesRepository.queryRunner);
}
async getInvoicesForAdmin(queryDto: InvoicesSearchQueryDto) {
const { limit, skip } = PaginationUtils(queryDto);
const queryBuilder = this.createQueryBuilder("invoice");
queryBuilder
.leftJoinAndSelect("invoice.user", "user")
.leftJoinAndSelect("invoice.items", "items")
.leftJoinAndSelect("items.subscriptionPlan", "subscriptionPlan", "subscriptionPlan.id IS NOT NULL")
.leftJoinAndSelect("subscriptionPlan.service", "service", "subscriptionPlan.id IS NOT NULL");
if (queryDto.q) {
queryBuilder
.orWhere("user.firstName ILIKE :search", { search: `%${queryDto.q}%` })
.orWhere("user.lastName ILIKE :search", { search: `%${queryDto.q}%` })
.orWhere("user.email ILIKE :search", { search: `%${queryDto.q}%` });
}
if (queryDto.status) {
queryBuilder.andWhere("invoice.status = :status", { status: queryDto.status });
}
if (queryDto.userId) {
queryBuilder.andWhere("invoice.user.id = :userId", { userId: queryDto.userId });
}
if (queryDto.serviceId) {
queryBuilder.andWhere("subscriptionPlan.serviceId = :serviceId", { serviceId: queryDto.serviceId });
}
if (queryDto.since) {
queryBuilder.andWhere("(invoice.createdAt >= :since OR invoice.dueDate >= :since OR invoice.paidAt >= :since)", {
since: new Date(queryDto.since),
});
}
queryBuilder.orderBy("invoice.createdAt", "DESC");
queryBuilder.skip(skip);
queryBuilder.take(limit);
return await queryBuilder.getManyAndCount();
}
}