chore: get discount data with all relation

This commit is contained in:
Matin
2025-02-17 11:27:40 +03:30
parent 7f09e92abb
commit 9cdd7ef28e
8 changed files with 168 additions and 18 deletions
@@ -0,0 +1,12 @@
import { ApiPropertyOptional } from "@nestjs/swagger";
import { IsOptional, IsString } from "class-validator";
import { PaginationDto } from "../../../common/DTO/pagination.dto";
import { CityMessage } from "../../../common/enums/message.enum";
export class SearchCitiesDto extends PaginationDto {
@IsOptional()
@IsString({ message: CityMessage.SEARCH_QUERY_MUST_BE_A_STRING })
@ApiPropertyOptional({ description: "search query", example: "search query" })
q: string;
}
@@ -0,0 +1,12 @@
import { ApiPropertyOptional } from "@nestjs/swagger";
import { IsOptional, IsString } from "class-validator";
import { PaginationDto } from "../../../common/DTO/pagination.dto";
import { ProvinceMessage } from "../../../common/enums/message.enum";
export class SearchProvincesDto extends PaginationDto {
@IsOptional()
@IsString({ message: ProvinceMessage.SEARCH_QUERY_MUST_BE_A_STRING })
@ApiPropertyOptional({ description: "search query", example: "search query" })
q: string;
}
+19 -2
View File
@@ -1,6 +1,23 @@
import { Controller } from "@nestjs/common";
import { Controller, Get, Query } from "@nestjs/common";
import { ApiOperation } from "@nestjs/swagger";
import { SearchCitiesDto } from "./DTO/cities-search-query.dto";
import { SearchProvincesDto } from "./DTO/provinces-search-query.dto";
import { AddressService } from "./providers/address.service";
@Controller("address")
export class AddressController {
constructor() {}
constructor(private readonly addressService: AddressService) {}
@ApiOperation({ summary: "Get all cities" })
@Get("cities/list")
getCitiesList(@Query() queryDto: SearchCitiesDto) {
return this.addressService.getAllCities(queryDto);
}
@ApiOperation({ summary: "Get all provinces" })
@Get("provinces/list")
getProvincesList(@Query() queryDto: SearchProvincesDto) {
return this.addressService.getAllProvinces(queryDto);
}
}
@@ -1,6 +1,54 @@
import { Injectable } from "@nestjs/common";
import { PaginationUtils } from "../../utils/providers/pagination.utils";
import { SearchCitiesDto } from "../DTO/cities-search-query.dto";
import { CityRepository } from "../repositories/city.repository";
import { ProvinceRepository } from "../repositories/province.repository";
@Injectable()
export class AddressService {
constructor() {}
constructor(
private readonly cityRepository: CityRepository,
private readonly provinceRepository: ProvinceRepository,
) {}
async getAllCities(queryDto: SearchCitiesDto) {
const { limit, skip } = PaginationUtils(queryDto);
const queryBuilder = this.cityRepository.createQueryBuilder("city");
if (queryDto.q) {
queryBuilder.andWhere("city.name ILIKE :q", { q: `%${queryDto.q}%` });
}
queryBuilder.skip(skip).take(limit);
const [cities, count] = await queryBuilder.getManyAndCount();
return {
cities,
count,
paginate: true,
};
}
async getAllProvinces(queryDto: SearchCitiesDto) {
const { limit, skip } = PaginationUtils(queryDto);
const queryBuilder = this.provinceRepository.createQueryBuilder("province");
if (queryDto.q) {
queryBuilder.andWhere("province.name ILIKE :q", { q: `%${queryDto.q}%` });
}
queryBuilder.skip(skip).take(limit);
const [provinces, count] = await queryBuilder.getManyAndCount();
return {
provinces,
count,
paginate: true,
};
}
}