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
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -245,17 +245,17 @@ export type RoleOrderByWithRelationInput = {
export type RoleWhereUniqueInput = Prisma.AtLeast<{
id?: number
name?: string
AND?: Prisma.RoleWhereInput | Prisma.RoleWhereInput[]
OR?: Prisma.RoleWhereInput[]
NOT?: Prisma.RoleWhereInput | Prisma.RoleWhereInput[]
name?: Prisma.StringFilter<"Role"> | string
description?: Prisma.StringNullableFilter<"Role"> | string | null
permissions?: Prisma.JsonNullableFilter<"Role">
createdAt?: Prisma.DateTimeFilter<"Role"> | Date | string
updatedAt?: Prisma.DateTimeFilter<"Role"> | Date | string
deletedAt?: Prisma.DateTimeNullableFilter<"Role"> | Date | string | null
users?: Prisma.UserListRelationFilter
}, "id">
}, "id" | "name">
export type RoleOrderByWithAggregationInput = {
id?: Prisma.SortOrder
+151
View File
@@ -253,6 +253,7 @@ export type UserWhereInput = {
deletedAt?: Prisma.DateTimeNullableFilter<"User"> | Date | string | null
updatedAt?: Prisma.DateTimeFilter<"User"> | Date | string
role?: Prisma.XOR<Prisma.RoleScalarRelationFilter, Prisma.RoleWhereInput>
refreshTokens?: Prisma.RefreshTokenListRelationFilter
}
export type UserOrderByWithRelationInput = {
@@ -266,6 +267,7 @@ export type UserOrderByWithRelationInput = {
deletedAt?: Prisma.SortOrderInput | Prisma.SortOrder
updatedAt?: Prisma.SortOrder
role?: Prisma.RoleOrderByWithRelationInput
refreshTokens?: Prisma.RefreshTokenOrderByRelationAggregateInput
_relevance?: Prisma.UserOrderByRelevanceInput
}
@@ -283,6 +285,7 @@ export type UserWhereUniqueInput = Prisma.AtLeast<{
deletedAt?: Prisma.DateTimeNullableFilter<"User"> | Date | string | null
updatedAt?: Prisma.DateTimeFilter<"User"> | Date | string
role?: Prisma.XOR<Prisma.RoleScalarRelationFilter, Prisma.RoleWhereInput>
refreshTokens?: Prisma.RefreshTokenListRelationFilter
}, "id" | "mobileNumber">
export type UserOrderByWithAggregationInput = {
@@ -326,6 +329,7 @@ export type UserCreateInput = {
deletedAt?: Date | string | null
updatedAt?: Date | string
role: Prisma.RoleCreateNestedOneWithoutUsersInput
refreshTokens?: Prisma.RefreshTokenCreateNestedManyWithoutUserInput
}
export type UserUncheckedCreateInput = {
@@ -338,6 +342,7 @@ export type UserUncheckedCreateInput = {
createdAt?: Date | string
deletedAt?: Date | string | null
updatedAt?: Date | string
refreshTokens?: Prisma.RefreshTokenUncheckedCreateNestedManyWithoutUserInput
}
export type UserUpdateInput = {
@@ -349,6 +354,7 @@ export type UserUpdateInput = {
deletedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
role?: Prisma.RoleUpdateOneRequiredWithoutUsersNestedInput
refreshTokens?: Prisma.RefreshTokenUpdateManyWithoutUserNestedInput
}
export type UserUncheckedUpdateInput = {
@@ -361,6 +367,7 @@ export type UserUncheckedUpdateInput = {
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
deletedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
refreshTokens?: Prisma.RefreshTokenUncheckedUpdateManyWithoutUserNestedInput
}
export type UserCreateManyInput = {
@@ -459,6 +466,11 @@ export type UserOrderByRelationAggregateInput = {
_count?: Prisma.SortOrder
}
export type UserScalarRelationFilter = {
is?: Prisma.UserWhereInput
isNot?: Prisma.UserWhereInput
}
export type StringFieldUpdateOperationsInput = {
set?: string
}
@@ -521,6 +533,20 @@ export type UserUncheckedUpdateManyWithoutRoleNestedInput = {
deleteMany?: Prisma.UserScalarWhereInput | Prisma.UserScalarWhereInput[]
}
export type UserCreateNestedOneWithoutRefreshTokensInput = {
create?: Prisma.XOR<Prisma.UserCreateWithoutRefreshTokensInput, Prisma.UserUncheckedCreateWithoutRefreshTokensInput>
connectOrCreate?: Prisma.UserCreateOrConnectWithoutRefreshTokensInput
connect?: Prisma.UserWhereUniqueInput
}
export type UserUpdateOneRequiredWithoutRefreshTokensNestedInput = {
create?: Prisma.XOR<Prisma.UserCreateWithoutRefreshTokensInput, Prisma.UserUncheckedCreateWithoutRefreshTokensInput>
connectOrCreate?: Prisma.UserCreateOrConnectWithoutRefreshTokensInput
upsert?: Prisma.UserUpsertWithoutRefreshTokensInput
connect?: Prisma.UserWhereUniqueInput
update?: Prisma.XOR<Prisma.XOR<Prisma.UserUpdateToOneWithWhereWithoutRefreshTokensInput, Prisma.UserUpdateWithoutRefreshTokensInput>, Prisma.UserUncheckedUpdateWithoutRefreshTokensInput>
}
export type UserCreateWithoutRoleInput = {
mobileNumber: string
password: string
@@ -529,6 +555,7 @@ export type UserCreateWithoutRoleInput = {
createdAt?: Date | string
deletedAt?: Date | string | null
updatedAt?: Date | string
refreshTokens?: Prisma.RefreshTokenCreateNestedManyWithoutUserInput
}
export type UserUncheckedCreateWithoutRoleInput = {
@@ -540,6 +567,7 @@ export type UserUncheckedCreateWithoutRoleInput = {
createdAt?: Date | string
deletedAt?: Date | string | null
updatedAt?: Date | string
refreshTokens?: Prisma.RefreshTokenUncheckedCreateNestedManyWithoutUserInput
}
export type UserCreateOrConnectWithoutRoleInput = {
@@ -583,6 +611,68 @@ export type UserScalarWhereInput = {
updatedAt?: Prisma.DateTimeFilter<"User"> | Date | string
}
export type UserCreateWithoutRefreshTokensInput = {
mobileNumber: string
password: string
firstName: string
lastName: string
createdAt?: Date | string
deletedAt?: Date | string | null
updatedAt?: Date | string
role: Prisma.RoleCreateNestedOneWithoutUsersInput
}
export type UserUncheckedCreateWithoutRefreshTokensInput = {
id?: number
mobileNumber: string
password: string
firstName: string
lastName: string
roleId: number
createdAt?: Date | string
deletedAt?: Date | string | null
updatedAt?: Date | string
}
export type UserCreateOrConnectWithoutRefreshTokensInput = {
where: Prisma.UserWhereUniqueInput
create: Prisma.XOR<Prisma.UserCreateWithoutRefreshTokensInput, Prisma.UserUncheckedCreateWithoutRefreshTokensInput>
}
export type UserUpsertWithoutRefreshTokensInput = {
update: Prisma.XOR<Prisma.UserUpdateWithoutRefreshTokensInput, Prisma.UserUncheckedUpdateWithoutRefreshTokensInput>
create: Prisma.XOR<Prisma.UserCreateWithoutRefreshTokensInput, Prisma.UserUncheckedCreateWithoutRefreshTokensInput>
where?: Prisma.UserWhereInput
}
export type UserUpdateToOneWithWhereWithoutRefreshTokensInput = {
where?: Prisma.UserWhereInput
data: Prisma.XOR<Prisma.UserUpdateWithoutRefreshTokensInput, Prisma.UserUncheckedUpdateWithoutRefreshTokensInput>
}
export type UserUpdateWithoutRefreshTokensInput = {
mobileNumber?: Prisma.StringFieldUpdateOperationsInput | string
password?: Prisma.StringFieldUpdateOperationsInput | string
firstName?: Prisma.StringFieldUpdateOperationsInput | string
lastName?: Prisma.StringFieldUpdateOperationsInput | string
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
deletedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
role?: Prisma.RoleUpdateOneRequiredWithoutUsersNestedInput
}
export type UserUncheckedUpdateWithoutRefreshTokensInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
mobileNumber?: Prisma.StringFieldUpdateOperationsInput | string
password?: Prisma.StringFieldUpdateOperationsInput | string
firstName?: Prisma.StringFieldUpdateOperationsInput | string
lastName?: Prisma.StringFieldUpdateOperationsInput | string
roleId?: Prisma.IntFieldUpdateOperationsInput | number
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
deletedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
}
export type UserCreateManyRoleInput = {
id?: number
mobileNumber: string
@@ -602,6 +692,7 @@ export type UserUpdateWithoutRoleInput = {
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
deletedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
refreshTokens?: Prisma.RefreshTokenUpdateManyWithoutUserNestedInput
}
export type UserUncheckedUpdateWithoutRoleInput = {
@@ -613,6 +704,7 @@ export type UserUncheckedUpdateWithoutRoleInput = {
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
deletedAt?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
refreshTokens?: Prisma.RefreshTokenUncheckedUpdateManyWithoutUserNestedInput
}
export type UserUncheckedUpdateManyWithoutRoleInput = {
@@ -627,6 +719,35 @@ export type UserUncheckedUpdateManyWithoutRoleInput = {
}
/**
* Count Type UserCountOutputType
*/
export type UserCountOutputType = {
refreshTokens: number
}
export type UserCountOutputTypeSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
refreshTokens?: boolean | UserCountOutputTypeCountRefreshTokensArgs
}
/**
* UserCountOutputType without action
*/
export type UserCountOutputTypeDefaultArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the UserCountOutputType
*/
select?: Prisma.UserCountOutputTypeSelect<ExtArgs> | null
}
/**
* UserCountOutputType without action
*/
export type UserCountOutputTypeCountRefreshTokensArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
where?: Prisma.RefreshTokenWhereInput
}
export type UserSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
@@ -639,6 +760,8 @@ export type UserSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = r
deletedAt?: boolean
updatedAt?: boolean
role?: boolean | Prisma.RoleDefaultArgs<ExtArgs>
refreshTokens?: boolean | Prisma.User$refreshTokensArgs<ExtArgs>
_count?: boolean | Prisma.UserCountOutputTypeDefaultArgs<ExtArgs>
}, ExtArgs["result"]["user"]>
@@ -658,12 +781,15 @@ export type UserSelectScalar = {
export type UserOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "mobileNumber" | "password" | "firstName" | "lastName" | "roleId" | "createdAt" | "deletedAt" | "updatedAt", ExtArgs["result"]["user"]>
export type UserInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
role?: boolean | Prisma.RoleDefaultArgs<ExtArgs>
refreshTokens?: boolean | Prisma.User$refreshTokensArgs<ExtArgs>
_count?: boolean | Prisma.UserCountOutputTypeDefaultArgs<ExtArgs>
}
export type $UserPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
name: "User"
objects: {
role: Prisma.$RolePayload<ExtArgs>
refreshTokens: Prisma.$RefreshTokenPayload<ExtArgs>[]
}
scalars: runtime.Types.Extensions.GetPayloadResult<{
id: number
@@ -1016,6 +1142,7 @@ readonly fields: UserFieldRefs;
export interface Prisma__UserClient<T, Null = never, ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
readonly [Symbol.toStringTag]: "PrismaPromise"
role<T extends Prisma.RoleDefaultArgs<ExtArgs> = {}>(args?: Prisma.Subset<T, Prisma.RoleDefaultArgs<ExtArgs>>): Prisma.Prisma__RoleClient<runtime.Types.Result.GetResult<Prisma.$RolePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
refreshTokens<T extends Prisma.User$refreshTokensArgs<ExtArgs> = {}>(args?: Prisma.Subset<T, Prisma.User$refreshTokensArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$RefreshTokenPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
/**
* Attaches callbacks for the resolution and/or rejection of the Promise.
* @param onfulfilled The callback to execute when the Promise is resolved.
@@ -1396,6 +1523,30 @@ export type UserDeleteManyArgs<ExtArgs extends runtime.Types.Extensions.Internal
limit?: number
}
/**
* User.refreshTokens
*/
export type User$refreshTokensArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the RefreshToken
*/
select?: Prisma.RefreshTokenSelect<ExtArgs> | null
/**
* Omit specific fields from the RefreshToken
*/
omit?: Prisma.RefreshTokenOmit<ExtArgs> | null
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.RefreshTokenInclude<ExtArgs> | null
where?: Prisma.RefreshTokenWhereInput
orderBy?: Prisma.RefreshTokenOrderByWithRelationInput | Prisma.RefreshTokenOrderByWithRelationInput[]
cursor?: Prisma.RefreshTokenWhereUniqueInput
take?: number
skip?: number
distinct?: Prisma.RefreshTokenScalarFieldEnum | Prisma.RefreshTokenScalarFieldEnum[]
}
/**
* User without action
*/