feat(pos): add favorite functionality for goods

- Implemented PosGoodFavoriteController to handle attaching and detaching favorites for goods.
- Created PosGoodFavoriteService to manage the business logic for favorites, including database operations and cache invalidation.
- Added PosGoodFavoriteModule to encapsulate the controller and service.
This commit is contained in:
2026-05-20 11:42:59 +03:30
parent 98099e97e7
commit fc27b9d616
19 changed files with 1989 additions and 62 deletions
@@ -414,6 +414,7 @@ export const ModelName = {
BusinessActivity: 'BusinessActivity',
Complex: 'Complex',
Pos: 'Pos',
ConsumerAccountGoodFavorite: 'ConsumerAccountGoodFavorite',
Good: 'Good',
GoodCategory: 'GoodCategory',
Guild: 'Guild',
@@ -445,7 +446,7 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
omit: GlobalOmitOptions
}
meta: {
modelProps: "adminAccount" | "admin" | "account" | "deviceBrand" | "device" | "licenseChargeTransaction" | "license" | "licenseActivation" | "licenseRenewChargeTransaction" | "licenseRenew" | "partnerAccountQuotaChargeTransaction" | "partnerAccountQuotaCredit" | "licenseAccountAllocation" | "partnerAccount" | "partner" | "permissionConsumer" | "permissionPos" | "permissionComplex" | "permissionBusiness" | "providerAccount" | "provider" | "consumerAccountDevice" | "applicationReleasedInfo" | "consumerAccount" | "consumer" | "consumerIndividual" | "consumerLegal" | "businessActivity" | "complex" | "pos" | "good" | "goodCategory" | "guild" | "measureUnits" | "stockKeepingUnits" | "triggerLog" | "customer" | "customerIndividual" | "customerLegal" | "salesInvoice" | "salesInvoiceItem" | "saleInvoiceTspAttempts" | "salesInvoicePayment" | "salesInvoicePaymentTerminalInfo" | "service" | "serviceCategory"
modelProps: "adminAccount" | "admin" | "account" | "deviceBrand" | "device" | "licenseChargeTransaction" | "license" | "licenseActivation" | "licenseRenewChargeTransaction" | "licenseRenew" | "partnerAccountQuotaChargeTransaction" | "partnerAccountQuotaCredit" | "licenseAccountAllocation" | "partnerAccount" | "partner" | "permissionConsumer" | "permissionPos" | "permissionComplex" | "permissionBusiness" | "providerAccount" | "provider" | "consumerAccountDevice" | "applicationReleasedInfo" | "consumerAccount" | "consumer" | "consumerIndividual" | "consumerLegal" | "businessActivity" | "complex" | "pos" | "consumerAccountGoodFavorite" | "good" | "goodCategory" | "guild" | "measureUnits" | "stockKeepingUnits" | "triggerLog" | "customer" | "customerIndividual" | "customerLegal" | "salesInvoice" | "salesInvoiceItem" | "saleInvoiceTspAttempts" | "salesInvoicePayment" | "salesInvoicePaymentTerminalInfo" | "service" | "serviceCategory"
txIsolationLevel: TransactionIsolationLevel
}
model: {
@@ -2429,6 +2430,72 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
}
}
}
ConsumerAccountGoodFavorite: {
payload: Prisma.$ConsumerAccountGoodFavoritePayload<ExtArgs>
fields: Prisma.ConsumerAccountGoodFavoriteFieldRefs
operations: {
findUnique: {
args: Prisma.ConsumerAccountGoodFavoriteFindUniqueArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ConsumerAccountGoodFavoritePayload> | null
}
findUniqueOrThrow: {
args: Prisma.ConsumerAccountGoodFavoriteFindUniqueOrThrowArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ConsumerAccountGoodFavoritePayload>
}
findFirst: {
args: Prisma.ConsumerAccountGoodFavoriteFindFirstArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ConsumerAccountGoodFavoritePayload> | null
}
findFirstOrThrow: {
args: Prisma.ConsumerAccountGoodFavoriteFindFirstOrThrowArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ConsumerAccountGoodFavoritePayload>
}
findMany: {
args: Prisma.ConsumerAccountGoodFavoriteFindManyArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ConsumerAccountGoodFavoritePayload>[]
}
create: {
args: Prisma.ConsumerAccountGoodFavoriteCreateArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ConsumerAccountGoodFavoritePayload>
}
createMany: {
args: Prisma.ConsumerAccountGoodFavoriteCreateManyArgs<ExtArgs>
result: BatchPayload
}
delete: {
args: Prisma.ConsumerAccountGoodFavoriteDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ConsumerAccountGoodFavoritePayload>
}
update: {
args: Prisma.ConsumerAccountGoodFavoriteUpdateArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ConsumerAccountGoodFavoritePayload>
}
deleteMany: {
args: Prisma.ConsumerAccountGoodFavoriteDeleteManyArgs<ExtArgs>
result: BatchPayload
}
updateMany: {
args: Prisma.ConsumerAccountGoodFavoriteUpdateManyArgs<ExtArgs>
result: BatchPayload
}
upsert: {
args: Prisma.ConsumerAccountGoodFavoriteUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ConsumerAccountGoodFavoritePayload>
}
aggregate: {
args: Prisma.ConsumerAccountGoodFavoriteAggregateArgs<ExtArgs>
result: runtime.Types.Utils.Optional<Prisma.AggregateConsumerAccountGoodFavorite>
}
groupBy: {
args: Prisma.ConsumerAccountGoodFavoriteGroupByArgs<ExtArgs>
result: runtime.Types.Utils.Optional<Prisma.ConsumerAccountGoodFavoriteGroupByOutputType>[]
}
count: {
args: Prisma.ConsumerAccountGoodFavoriteCountArgs<ExtArgs>
result: runtime.Types.Utils.Optional<Prisma.ConsumerAccountGoodFavoriteCountAggregateOutputType> | number
}
}
}
Good: {
payload: Prisma.$GoodPayload<ExtArgs>
fields: Prisma.GoodFieldRefs
@@ -3890,6 +3957,15 @@ export const PosScalarFieldEnum = {
export type PosScalarFieldEnum = (typeof PosScalarFieldEnum)[keyof typeof PosScalarFieldEnum]
export const ConsumerAccountGoodFavoriteScalarFieldEnum = {
created_at: 'created_at',
consumer_account_id: 'consumer_account_id',
good_id: 'good_id'
} as const
export type ConsumerAccountGoodFavoriteScalarFieldEnum = (typeof ConsumerAccountGoodFavoriteScalarFieldEnum)[keyof typeof ConsumerAccountGoodFavoriteScalarFieldEnum]
export const GoodScalarFieldEnum = {
id: 'id',
name: 'name',
@@ -4469,6 +4545,14 @@ export const PosOrderByRelevanceFieldEnum = {
export type PosOrderByRelevanceFieldEnum = (typeof PosOrderByRelevanceFieldEnum)[keyof typeof PosOrderByRelevanceFieldEnum]
export const ConsumerAccountGoodFavoriteOrderByRelevanceFieldEnum = {
consumer_account_id: 'consumer_account_id',
good_id: 'good_id'
} as const
export type ConsumerAccountGoodFavoriteOrderByRelevanceFieldEnum = (typeof ConsumerAccountGoodFavoriteOrderByRelevanceFieldEnum)[keyof typeof ConsumerAccountGoodFavoriteOrderByRelevanceFieldEnum]
export const GoodOrderByRelevanceFieldEnum = {
id: 'id',
name: 'name',
@@ -4992,6 +5076,7 @@ export type GlobalOmitConfig = {
businessActivity?: Prisma.BusinessActivityOmit
complex?: Prisma.ComplexOmit
pos?: Prisma.PosOmit
consumerAccountGoodFavorite?: Prisma.ConsumerAccountGoodFavoriteOmit
good?: Prisma.GoodOmit
goodCategory?: Prisma.GoodCategoryOmit
guild?: Prisma.GuildOmit