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
@@ -402,6 +402,8 @@ export const ModelName = {
SalesInvoiceItem: 'SalesInvoiceItem',
StockMovement: 'StockMovement',
StockBalance: 'StockBalance',
OtpCode: 'OtpCode',
RefreshToken: 'RefreshToken',
InventoryTransfer: 'InventoryTransfer',
InventoryTransferItem: 'InventoryTransferItem',
StockAdjustment: 'StockAdjustment',
@@ -424,7 +426,7 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
omit: GlobalOmitOptions
}
meta: {
modelProps: "user" | "role" | "productVariant" | "product" | "productBrand" | "productCategory" | "supplier" | "customer" | "inventory" | "store" | "productCharge" | "order" | "purchaseReceipt" | "purchaseReceiptItem" | "salesInvoice" | "salesInvoiceItem" | "stockMovement" | "stockBalance" | "inventoryTransfer" | "inventoryTransferItem" | "stockAdjustment" | "triggerLog" | "inventory_overview" | "stock_cardex" | "stock_view"
modelProps: "user" | "role" | "productVariant" | "product" | "productBrand" | "productCategory" | "supplier" | "customer" | "inventory" | "store" | "productCharge" | "order" | "purchaseReceipt" | "purchaseReceiptItem" | "salesInvoice" | "salesInvoiceItem" | "stockMovement" | "stockBalance" | "otpCode" | "refreshToken" | "inventoryTransfer" | "inventoryTransferItem" | "stockAdjustment" | "triggerLog" | "inventory_overview" | "stock_cardex" | "stock_view"
txIsolationLevel: TransactionIsolationLevel
}
model: {
@@ -1616,6 +1618,138 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
}
}
}
OtpCode: {
payload: Prisma.$OtpCodePayload<ExtArgs>
fields: Prisma.OtpCodeFieldRefs
operations: {
findUnique: {
args: Prisma.OtpCodeFindUniqueArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$OtpCodePayload> | null
}
findUniqueOrThrow: {
args: Prisma.OtpCodeFindUniqueOrThrowArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$OtpCodePayload>
}
findFirst: {
args: Prisma.OtpCodeFindFirstArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$OtpCodePayload> | null
}
findFirstOrThrow: {
args: Prisma.OtpCodeFindFirstOrThrowArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$OtpCodePayload>
}
findMany: {
args: Prisma.OtpCodeFindManyArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$OtpCodePayload>[]
}
create: {
args: Prisma.OtpCodeCreateArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$OtpCodePayload>
}
createMany: {
args: Prisma.OtpCodeCreateManyArgs<ExtArgs>
result: BatchPayload
}
delete: {
args: Prisma.OtpCodeDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$OtpCodePayload>
}
update: {
args: Prisma.OtpCodeUpdateArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$OtpCodePayload>
}
deleteMany: {
args: Prisma.OtpCodeDeleteManyArgs<ExtArgs>
result: BatchPayload
}
updateMany: {
args: Prisma.OtpCodeUpdateManyArgs<ExtArgs>
result: BatchPayload
}
upsert: {
args: Prisma.OtpCodeUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$OtpCodePayload>
}
aggregate: {
args: Prisma.OtpCodeAggregateArgs<ExtArgs>
result: runtime.Types.Utils.Optional<Prisma.AggregateOtpCode>
}
groupBy: {
args: Prisma.OtpCodeGroupByArgs<ExtArgs>
result: runtime.Types.Utils.Optional<Prisma.OtpCodeGroupByOutputType>[]
}
count: {
args: Prisma.OtpCodeCountArgs<ExtArgs>
result: runtime.Types.Utils.Optional<Prisma.OtpCodeCountAggregateOutputType> | number
}
}
}
RefreshToken: {
payload: Prisma.$RefreshTokenPayload<ExtArgs>
fields: Prisma.RefreshTokenFieldRefs
operations: {
findUnique: {
args: Prisma.RefreshTokenFindUniqueArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$RefreshTokenPayload> | null
}
findUniqueOrThrow: {
args: Prisma.RefreshTokenFindUniqueOrThrowArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$RefreshTokenPayload>
}
findFirst: {
args: Prisma.RefreshTokenFindFirstArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$RefreshTokenPayload> | null
}
findFirstOrThrow: {
args: Prisma.RefreshTokenFindFirstOrThrowArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$RefreshTokenPayload>
}
findMany: {
args: Prisma.RefreshTokenFindManyArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$RefreshTokenPayload>[]
}
create: {
args: Prisma.RefreshTokenCreateArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$RefreshTokenPayload>
}
createMany: {
args: Prisma.RefreshTokenCreateManyArgs<ExtArgs>
result: BatchPayload
}
delete: {
args: Prisma.RefreshTokenDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$RefreshTokenPayload>
}
update: {
args: Prisma.RefreshTokenUpdateArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$RefreshTokenPayload>
}
deleteMany: {
args: Prisma.RefreshTokenDeleteManyArgs<ExtArgs>
result: BatchPayload
}
updateMany: {
args: Prisma.RefreshTokenUpdateManyArgs<ExtArgs>
result: BatchPayload
}
upsert: {
args: Prisma.RefreshTokenUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$RefreshTokenPayload>
}
aggregate: {
args: Prisma.RefreshTokenAggregateArgs<ExtArgs>
result: runtime.Types.Utils.Optional<Prisma.AggregateRefreshToken>
}
groupBy: {
args: Prisma.RefreshTokenGroupByArgs<ExtArgs>
result: runtime.Types.Utils.Optional<Prisma.RefreshTokenGroupByOutputType>[]
}
count: {
args: Prisma.RefreshTokenCountArgs<ExtArgs>
result: runtime.Types.Utils.Optional<Prisma.RefreshTokenCountAggregateOutputType> | number
}
}
}
InventoryTransfer: {
payload: Prisma.$InventoryTransferPayload<ExtArgs>
fields: Prisma.InventoryTransferFieldRefs
@@ -2289,6 +2423,30 @@ export const StockBalanceScalarFieldEnum = {
export type StockBalanceScalarFieldEnum = (typeof StockBalanceScalarFieldEnum)[keyof typeof StockBalanceScalarFieldEnum]
export const OtpCodeScalarFieldEnum = {
id: 'id',
mobileNumber: 'mobileNumber',
code: 'code',
used: 'used',
expiresAt: 'expiresAt',
createdAt: 'createdAt'
} as const
export type OtpCodeScalarFieldEnum = (typeof OtpCodeScalarFieldEnum)[keyof typeof OtpCodeScalarFieldEnum]
export const RefreshTokenScalarFieldEnum = {
id: 'id',
tokenHash: 'tokenHash',
userId: 'userId',
revoked: 'revoked',
expiresAt: 'expiresAt',
createdAt: 'createdAt'
} as const
export type RefreshTokenScalarFieldEnum = (typeof RefreshTokenScalarFieldEnum)[keyof typeof RefreshTokenScalarFieldEnum]
export const InventoryTransferScalarFieldEnum = {
id: 'id',
code: 'code',
@@ -2553,6 +2711,21 @@ export const StockMovementOrderByRelevanceFieldEnum = {
export type StockMovementOrderByRelevanceFieldEnum = (typeof StockMovementOrderByRelevanceFieldEnum)[keyof typeof StockMovementOrderByRelevanceFieldEnum]
export const OtpCodeOrderByRelevanceFieldEnum = {
mobileNumber: 'mobileNumber',
code: 'code'
} as const
export type OtpCodeOrderByRelevanceFieldEnum = (typeof OtpCodeOrderByRelevanceFieldEnum)[keyof typeof OtpCodeOrderByRelevanceFieldEnum]
export const RefreshTokenOrderByRelevanceFieldEnum = {
tokenHash: 'tokenHash'
} as const
export type RefreshTokenOrderByRelevanceFieldEnum = (typeof RefreshTokenOrderByRelevanceFieldEnum)[keyof typeof RefreshTokenOrderByRelevanceFieldEnum]
export const InventoryTransferOrderByRelevanceFieldEnum = {
code: 'code',
description: 'description'
@@ -2778,6 +2951,8 @@ export type GlobalOmitConfig = {
salesInvoiceItem?: Prisma.SalesInvoiceItemOmit
stockMovement?: Prisma.StockMovementOmit
stockBalance?: Prisma.StockBalanceOmit
otpCode?: Prisma.OtpCodeOmit
refreshToken?: Prisma.RefreshTokenOmit
inventoryTransfer?: Prisma.InventoryTransferOmit
inventoryTransferItem?: Prisma.InventoryTransferItemOmit
stockAdjustment?: Prisma.StockAdjustmentOmit