diff --git a/src/merchants/merchant-data.service.ts b/src/merchants/merchant-data.service.ts index efbb956..088a356 100644 --- a/src/merchants/merchant-data.service.ts +++ b/src/merchants/merchant-data.service.ts @@ -1,7 +1,8 @@ import { Injectable } from '@nestjs/common'; -import { DataSource, Repository } from 'typeorm'; +import { DataSource, ILike, Repository } from 'typeorm'; import { Merchant } from './entities/merchant.entity'; import { UpdateMerchantDto } from './dto/update-merchant.dto'; +import { GetMerchantFilters } from './merchants.controller'; @Injectable() export class MerchantDataService { @@ -11,8 +12,14 @@ export class MerchantDataService { this.merchants = this.dataSource.getRepository(Merchant); } - public async getAll(): Promise { - return await this.merchants.find(); + public async get(filters: GetMerchantFilters): Promise { + const idFilters = filters.ids?.map(id => { return { id }}) ?? []; + const nameFilters = filters.merchants?.map(tag => { return { name: ILike('%' + tag + '%') }}) ?? []; + + return await this.merchants.find({ + where: [...idFilters, ...nameFilters], + order: { name: filters.sort === 'desc' ? 'desc' : 'asc' }, + }); } public async getById(id: string): Promise { diff --git a/src/merchants/merchants.controller.ts b/src/merchants/merchants.controller.ts index 97a7ac3..2cff37d 100644 --- a/src/merchants/merchants.controller.ts +++ b/src/merchants/merchants.controller.ts @@ -6,6 +6,7 @@ import { Delete, Body, Param, + Query, HttpCode, HttpStatus, NotFoundException, @@ -23,8 +24,12 @@ export class MerchantsController { @Get() @HttpCode(HttpStatus.OK) - public async findAll(): Promise { - return await this.merchantsService.findAll(); + public async find(@Query() filters: GetMerchantFilters): Promise { + const ids = Array.isArray(filters.ids) ? filters.ids : filters.ids ? [filters.ids] : []; + const merchants = Array.isArray(filters.merchants) ? filters.merchants : filters.merchants ? [filters.merchants] : []; + const sort = filters.sort?.toLowerCase() === 'desc' ? 'desc' : 'asc'; + + return await this.merchantsService.find({ ids, merchants, sort }); } @Get(':id') @@ -73,3 +78,9 @@ export class MerchantsController { return await this.merchantsService.remove(id); } } + +export interface GetMerchantFilters { + ids?: string[]; + merchants?: string[]; + sort?: 'asc' | 'desc'; +} diff --git a/src/merchants/merchants.service.ts b/src/merchants/merchants.service.ts index ef98690..56a5d84 100644 --- a/src/merchants/merchants.service.ts +++ b/src/merchants/merchants.service.ts @@ -3,13 +3,14 @@ import { CreateMerchantDto } from './dto/create-merchant.dto'; import { UpdateMerchantDto } from './dto/update-merchant.dto'; import { MerchantDataService } from './merchant-data.service'; import { Merchant } from './entities/merchant.entity'; +import { GetMerchantFilters } from './merchants.controller'; @Injectable() export class MerchantsService { public constructor(private merchantDataService: MerchantDataService) { } - public async findAll(): Promise { - return await this.merchantDataService.getAll(); + public async find(filters: GetMerchantFilters): Promise { + return await this.merchantDataService.get(filters); } public async findById(id: string): Promise { diff --git a/src/tags/tag-data.service.ts b/src/tags/tag-data.service.ts index df417c5..ee9400f 100644 --- a/src/tags/tag-data.service.ts +++ b/src/tags/tag-data.service.ts @@ -1,7 +1,8 @@ import { Injectable } from '@nestjs/common'; -import { DataSource, Repository } from 'typeorm'; +import { DataSource, ILike, Repository } from 'typeorm'; import { Tag } from './entities/tag.entity'; import { UpdateTagDto } from './dto/update-tag.dto'; +import { GetTagFilters } from './tags.controller'; @Injectable() export class TagDataService { @@ -11,8 +12,14 @@ export class TagDataService { this.tags = this.dataSource.getRepository(Tag); } - public async getAll(): Promise { - return await this.tags.find(); + public async get(filters: GetTagFilters): Promise { + const idFilters = filters.ids?.map(id => { return { id }}) ?? []; + const nameFilters = filters.tags?.map(tag => { return { name: ILike('%' + tag + '%') }}) ?? []; + + return await this.tags.find({ + where: [...idFilters, ...nameFilters], + order: { name: filters.sort === 'desc' ? 'desc' : 'asc' }, + }); } public async getById(id: string): Promise { diff --git a/src/tags/tags.controller.ts b/src/tags/tags.controller.ts index d627f8e..b27e5fa 100644 --- a/src/tags/tags.controller.ts +++ b/src/tags/tags.controller.ts @@ -6,6 +6,7 @@ import { Delete, Body, Param, + Query, HttpCode, HttpStatus, BadRequestException, @@ -23,8 +24,12 @@ export class TagsController { @Get() @HttpCode(HttpStatus.OK) - public async findAll(): Promise { - return await this.tagsService.findAll(); + public async find(@Query() filters: GetTagFilters): Promise { + const ids = Array.isArray(filters.ids) ? filters.ids : filters.ids ? [filters.ids] : []; + const tags = Array.isArray(filters.tags) ? filters.tags : filters.tags ? [filters.tags] : []; + const sort = filters.sort?.toLowerCase() === 'desc' ? 'desc' : 'asc'; + + return await this.tagsService.find({ ids, tags, sort }); } @Get(':id') @@ -73,3 +78,9 @@ export class TagsController { return await this.tagsService.remove(id); } } + +export interface GetTagFilters { + ids?: string[]; + tags?: string[]; + sort?: 'asc' | 'desc'; +} diff --git a/src/tags/tags.service.ts b/src/tags/tags.service.ts index ab5ff92..954dbb2 100644 --- a/src/tags/tags.service.ts +++ b/src/tags/tags.service.ts @@ -3,13 +3,14 @@ import { CreateTagDto } from './dto/create-tag.dto'; import { UpdateTagDto } from './dto/update-tag.dto'; import { TagDataService } from './tag-data.service'; import { Tag } from './entities/tag.entity'; +import { GetTagFilters } from './tags.controller'; @Injectable() export class TagsService { public constructor(private tagDataService: TagDataService) { } - public async findAll(): Promise { - return await this.tagDataService.getAll(); + public async find(filters: GetTagFilters): Promise { + return await this.tagDataService.get(filters); } public async findById(id: string): Promise {