feat(cardex): implement cardex controller, service, and DTO for stock movements
feat(pos): add POS controller and service for order creation and stock retrieval refactor(pos): enhance stock and product category retrieval with pagination and mapping
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { Body, Controller, Delete, Get, Param, Patch, Post } from '@nestjs/common'
|
||||
import { Body, Controller, Delete, Get, Param, Patch, Post, Query } from '@nestjs/common'
|
||||
import { ApiQuery } from '@nestjs/swagger'
|
||||
import { CreateProductDto } from './dto/create-product.dto'
|
||||
import { UpdateProductDto } from './dto/update-product.dto'
|
||||
import { ProductsService } from './products.service'
|
||||
@@ -13,8 +14,10 @@ export class ProductsController {
|
||||
}
|
||||
|
||||
@Get()
|
||||
findAll() {
|
||||
return this.productsService.findAll()
|
||||
@ApiQuery({ name: 'page', required: false, type: Number, default: 1 })
|
||||
@ApiQuery({ name: 'pageSize', required: false, type: Number, default: 30 })
|
||||
findAll(@Query('page') page: number = 1, @Query('pageSize') pageSize: number = 30) {
|
||||
return this.productsService.findAll(page, pageSize)
|
||||
}
|
||||
|
||||
@Get(':id')
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { Injectable } from '@nestjs/common'
|
||||
import { ShortEntity } from '../common/interfaces/response-models'
|
||||
import { ResponseMapper } from '../common/response/response-mapper'
|
||||
import { Prisma } from '../generated/prisma/client'
|
||||
import { PrismaService } from '../prisma/prisma.service'
|
||||
import { CreateProductDto } from './dto/create-product.dto'
|
||||
|
||||
@@ -28,10 +29,17 @@ export class ProductsService {
|
||||
return ResponseMapper.create(item)
|
||||
}
|
||||
|
||||
async findAll() {
|
||||
const items = await this.prisma.product.findMany({
|
||||
include: { brand: true, category: true, stockBalances: true },
|
||||
})
|
||||
async findAll(page = 1, pageSize = 20) {
|
||||
const query: Prisma.ProductFindManyArgs = {}
|
||||
|
||||
const [items, count] = await this.prisma.$transaction([
|
||||
this.prisma.product.findMany({
|
||||
include: { brand: true, category: true, stockBalances: true },
|
||||
skip: (page - 1) * pageSize,
|
||||
take: pageSize,
|
||||
}),
|
||||
this.prisma.product.count(),
|
||||
])
|
||||
|
||||
const mapped = items.map(p => {
|
||||
const { brandId, categoryId, ...rest } = p as any
|
||||
@@ -48,7 +56,7 @@ export class ProductsService {
|
||||
|
||||
return { ...rest, brand, category, stock }
|
||||
})
|
||||
return ResponseMapper.list(mapped)
|
||||
return ResponseMapper.paginate(mapped, count, page, pageSize)
|
||||
}
|
||||
|
||||
async findOne(id: number) {
|
||||
|
||||
Reference in New Issue
Block a user