From 0832308acdc98f7d0af911adf5fd4c62a22235ed Mon Sep 17 00:00:00 2001 From: caturbgs Date: Tue, 21 Dec 2021 21:28:25 +0700 Subject: [PATCH] feat: add endpoint get product history price --- .../history-price/history-price.service.ts | 46 ++++++++++++++++++- src/product/product.controller.ts | 31 ++++++++++--- 2 files changed, 70 insertions(+), 7 deletions(-) diff --git a/src/product/history-price/history-price.service.ts b/src/product/history-price/history-price.service.ts index 77e71bb..a259ec2 100644 --- a/src/product/history-price/history-price.service.ts +++ b/src/product/history-price/history-price.service.ts @@ -1,7 +1,6 @@ import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; import { EntityNotFoundError, IsNull, Repository } from 'typeorm'; import { InjectRepository } from '@nestjs/typeorm'; -import { ProductCategories } from '../entities/product-category.entity'; import { ProductHistoryPrice } from '../entities/product-history-price.entity'; @Injectable() @@ -34,4 +33,49 @@ export class ProductHistoryPriceService { } } } + + async findOneByProductId( + page: number, + productId: string, + supplierId: string, + ) { + try { + const query = this.productHistoryPriceService + .createQueryBuilder('product_history_price') + .leftJoin('product_history_price.product', 'product') + .where({ product: productId }) + .andWhere('product_history_price.endDate IS NULL'); + + if (supplierId !== 'null' && supplierId) { + query.andWhere('product.supplier = :supplierId', { + supplierId: supplierId, + }); + } + + const data = await query + .orderBy('product_history_price.createdAt', 'DESC') + .skip(page * 10) + .take(10) + .getMany(); + + const totalData = await query.getCount(); + + return { + data, + count: totalData, + }; + } catch (e) { + if (e instanceof EntityNotFoundError) { + throw new HttpException( + { + statusCode: HttpStatus.NOT_FOUND, + error: 'Product History Price not found', + }, + HttpStatus.NOT_FOUND, + ); + } else { + throw e; + } + } + } } diff --git a/src/product/product.controller.ts b/src/product/product.controller.ts index 08f09ce..1dcc540 100644 --- a/src/product/product.controller.ts +++ b/src/product/product.controller.ts @@ -1,13 +1,13 @@ import { - Controller, - Get, - Post, Body, - Put, - Param, + Controller, Delete, - ParseUUIDPipe, + Get, HttpStatus, + Param, + ParseUUIDPipe, + Post, + Put, Query, Request, } from '@nestjs/common'; @@ -179,6 +179,25 @@ export class ProductController { }; } + @Get('price-history/:id') + async findPriceHistoryByProductId( + @Param('id', ParseUUIDPipe) id: string, + @Query('page') page: number, + @Query('supplier') supplier: string, + ) { + const data = await this.productHistoryPriceService.findOneByProductId( + page, + id, + supplier, + ); + + return { + ...data, + statusCode: HttpStatus.OK, + message: 'success', + }; + } + @Put(':id') async update( @Param('id', ParseUUIDPipe) id: string,