diff --git a/bruno/Common Cents/Categories/LOC GET Categories.bru b/bruno/Common Cents/Categories/LOC GET Categories.bru index 8d46826..54aee7f 100644 --- a/bruno/Common Cents/Categories/LOC GET Categories.bru +++ b/bruno/Common Cents/Categories/LOC GET Categories.bru @@ -5,7 +5,11 @@ meta { } get { - url: {{localBaseUrl}}/{{resourcePath}} + url: {{localBaseUrl}}/{{resourcePath}}?sort=desc body: none auth: inherit } + +params:query { + sort: desc +} diff --git a/bruno/Common Cents/Merchants/LOC GET Merchants.bru b/bruno/Common Cents/Merchants/LOC GET Merchants.bru index 5ba79b7..bd061db 100644 --- a/bruno/Common Cents/Merchants/LOC GET Merchants.bru +++ b/bruno/Common Cents/Merchants/LOC GET Merchants.bru @@ -5,7 +5,11 @@ meta { } get { - url: {{localBaseUrl}}/{{resourcePath}} + url: {{localBaseUrl}}/{{resourcePath}}?sort=desc body: none auth: inherit } + +params:query { + sort: desc +} diff --git a/bruno/Common Cents/Tags/LOC GET Tags.bru b/bruno/Common Cents/Tags/LOC GET Tags.bru index dc19694..65caa02 100644 --- a/bruno/Common Cents/Tags/LOC GET Tags.bru +++ b/bruno/Common Cents/Tags/LOC GET Tags.bru @@ -9,3 +9,7 @@ get { body: none auth: inherit } + +params:query { + ~tags: Tundra +} diff --git a/src/categories/categories.controller.ts b/src/categories/categories.controller.ts index 878f76c..d8a8775 100644 --- a/src/categories/categories.controller.ts +++ b/src/categories/categories.controller.ts @@ -6,6 +6,7 @@ import { Delete, Body, Param, + Query, HttpCode, HttpStatus, BadRequestException, @@ -23,8 +24,12 @@ export class CategoriesController { @Get() @HttpCode(HttpStatus.OK) - public async findAll(): Promise { - return await this.categoriesService.findAll(); + public async find(@Query() filters: GetCategoryFilters): Promise { + const ids = Array.isArray(filters.ids) ? filters.ids : filters.ids ? [filters.ids] : []; + const categories = Array.isArray(filters.categories) ? filters.categories : filters.categories ? [filters.categories] : []; + const sort = filters.sort?.toLowerCase() === 'desc' ? 'desc' : 'asc'; + + return await this.categoriesService.find({ ids, categories, sort}); } @Get(':id') @@ -73,3 +78,9 @@ export class CategoriesController { return await this.categoriesService.remove(id); } } + +export interface GetCategoryFilters { + ids?: string[]; + categories?: string[]; + sort?: 'asc' | 'desc'; +} diff --git a/src/categories/categories.service.ts b/src/categories/categories.service.ts index 8753b43..ee93b0a 100644 --- a/src/categories/categories.service.ts +++ b/src/categories/categories.service.ts @@ -3,13 +3,14 @@ import { CreateCategoryDto } from './dto/create-category.dto'; import { UpdateCategoryDto } from './dto/update-category.dto'; import { CategoryDataService } from './category-data.service'; import { Category } from './entities/category.entity'; +import { GetCategoryFilters } from './categories.controller'; @Injectable() export class CategoriesService { public constructor(private categoryDataService: CategoryDataService) { } - public async findAll(): Promise { - return await this.categoryDataService.getAll(); + public async find(filters: GetCategoryFilters): Promise { + return await this.categoryDataService.get(filters); } public async findById(id: string): Promise { diff --git a/src/categories/category-data.service.ts b/src/categories/category-data.service.ts index 455bac4..7277274 100644 --- a/src/categories/category-data.service.ts +++ b/src/categories/category-data.service.ts @@ -1,7 +1,8 @@ import { Injectable } from '@nestjs/common'; -import { DataSource, Repository } from 'typeorm'; +import { DataSource, ILike, Repository } from 'typeorm'; import { Category } from './entities/category.entity'; import { UpdateCategoryDto } from './dto/update-category.dto'; +import { GetCategoryFilters } from './categories.controller'; @Injectable() export class CategoryDataService { @@ -11,8 +12,14 @@ export class CategoryDataService { this.categories = this.dataSource.getRepository(Category); } - public async getAll(): Promise { - return await this.categories.find(); + public async get(filters: GetCategoryFilters): Promise { + const idFilters = filters.ids?.map(id => { return { id }}) ?? []; + const nameFilters = filters.categories?.map(tag => { return { name: ILike('%' + tag + '%') }}) ?? []; + + return await this.categories.find({ + where: [...idFilters, ...nameFilters], + order: { name: filters.sort === 'desc' ? 'desc' : 'asc' } + }); } public async getById(id: string): Promise { diff --git a/src/merchants/merchant-data.service.ts b/src/merchants/merchant-data.service.ts index 088a356..23f8ee8 100644 --- a/src/merchants/merchant-data.service.ts +++ b/src/merchants/merchant-data.service.ts @@ -18,7 +18,7 @@ export class MerchantDataService { return await this.merchants.find({ where: [...idFilters, ...nameFilters], - order: { name: filters.sort === 'desc' ? 'desc' : 'asc' }, + order: { name: filters.sort === 'desc' ? 'desc' : 'asc' } }); } diff --git a/src/tags/tag-data.service.ts b/src/tags/tag-data.service.ts index ee9400f..c9b0137 100644 --- a/src/tags/tag-data.service.ts +++ b/src/tags/tag-data.service.ts @@ -18,7 +18,7 @@ export class TagDataService { return await this.tags.find({ where: [...idFilters, ...nameFilters], - order: { name: filters.sort === 'desc' ? 'desc' : 'asc' }, + order: { name: filters.sort === 'desc' ? 'desc' : 'asc' } }); }