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:
2025-12-21 19:09:41 +03:30
parent d514267f58
commit c6a86719dd
42 changed files with 3769 additions and 119 deletions
+75
View File
@@ -0,0 +1,75 @@
import { Body, Controller, Get, Post } from '@nestjs/common'
import { CreateOrderDto } from './dto/create-pos.dto'
import { PosService } from './pos.service'
@Controller('pos')
export class PosController {
constructor(private readonly posService: PosService) {}
@Get()
getInfo() {
return this.posService.getInfo()
}
@Get('/stock')
async getStock() {
const inventoryId = await this.posService.getDefaultInventoryId()
return this.posService.getStock(inventoryId!)
}
@Get('/product-categories')
async getProductCategories() {
const inventoryId = await this.posService.getDefaultInventoryId()
return this.posService.getProductCategories(inventoryId!)
}
@Post('/orders/create')
async createOrder(@Body() dto: CreateOrderDto) {
const inventoryId = await this.posService.getDefaultInventoryId()
return this.posService.createOrder(dto, inventoryId!)
}
// @Post()
// create(@Body() dto: CreateInventoryDto) {
// return this.inventoriesService.create(dto)
// }
// @Get()
// @ApiQuery({ name: 'isPointOfSale', required: false, type: Boolean })
// findAll(@Query('isPointOfSale') isPointOfSale?: boolean) {
// return this.inventoriesService.findAll(isPointOfSale)
// }
// @Get(':id')
// findOne(@Param('id') id: string) {
// return this.inventoriesService.findOne(Number(id))
// }
// @Patch(':id')
// update(@Param('id') id: string, @Body() dto: UpdateInventoryDto) {
// return this.inventoriesService.update(Number(id), dto)
// }
// @Delete(':id')
// remove(@Param('id') id: string) {
// return this.inventoriesService.remove(Number(id))
// }
// @Get(':id/movements')
// @ApiQuery({ name: 'type', required: false, enum: MovementType })
// findInventoryMovements(@Param('id') id: string, @Query('type') type?: MovementType) {
// return this.inventoriesService.findInventoryMovements(Number(id), type ?? undefined)
// }
// @Get(':id/stock')
// @ApiQuery({ name: 'isAvailable', required: false, type: Boolean })
// getStock(@Param('id') id: string, @Query('isAvailable') isAvailable?: boolean) {
// return this.inventoriesService.getStock(Number(id), isAvailable ?? undefined)
// }
// @Get(':id/products/:productId/cardex')
// getProductCardex(@Param('id') id: string, @Param('productId') productId: string) {
// return this.inventoriesService.getProductCardex(Number(id), Number(productId))
// }
}