chore: get discount data with all relation
This commit is contained in:
@@ -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;
|
||||
}
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user