feat: implement Redis caching for business activities and consumers

- Added Redis caching to BusinessActivitiesService for findAll and findOne methods.
- Integrated Redis caching in BusinessActivityComplexesService for findAll and findOne methods.
- Enhanced ConsumersService with Redis caching for findAll and findOne methods.
- Introduced cache invalidation for partner consumers and business activities.
- Created RedisKeyMaker utility for generating cache keys for consumers, partners, and POS.
- Implemented cache invalidation services for partners and POS.
- Added Redis service methods for JSON handling and key deletion by patterns.
- Updated goods service to include caching and invalidation for goods list.
- Introduced DTO for updating goods.
This commit is contained in:
2026-05-19 15:40:45 +03:30
parent c5c522f69c
commit 62b659246f
32 changed files with 1146 additions and 42 deletions
+3 -2
View File
@@ -1,6 +1,7 @@
export * from './jwt-user.util'
export * from './enum-translator.util'
export * from './http-client.util'
export * from './jwt-user.util'
export * from './mappers/consumer_mappers.util'
export * from './password.util'
export * from './redisKeyMaker'
export * from './tracking-code-generator.util'
export * from './http-client.util'
@@ -0,0 +1,16 @@
export class ConsumerKeyMaker {
static consumerInfo(consumerId: string): string {
return `consumers:${consumerId}:info`
}
static consumerBusinessActivitiesList(consumerId: string): string {
return `consumers:${consumerId}:business-activities:list`
}
static consumerBusinessActivityInfo(
consumerId: string,
businessActivityId: string,
): string {
return `consumers:${consumerId}:business-activities:${businessActivityId}:info`
}
}
+9
View File
@@ -0,0 +1,9 @@
export class EnumKeyMaker {
static enumsAll(buildVersion: string): string {
return `enums:${buildVersion}:all`
}
static enumsValues(buildVersion: string, enumName: string): string {
return `enums:${buildVersion}:values:${enumName}`
}
}
+9
View File
@@ -0,0 +1,9 @@
export class GuildKeyMaker {
static guildStockKeepingUnitsList(guildId: string): string {
return `guilds:${guildId}:stock-keeping-units:list`
}
static guildGoodsList(guildId: string): string {
return `guilds:${guildId}:goods:list`
}
}
+30
View File
@@ -0,0 +1,30 @@
import { ConsumerKeyMaker } from './consumer'
import { EnumKeyMaker } from './enum'
import { GuildKeyMaker } from './guild'
import { PartnerKeyMaker } from './partner'
import { PosKeyMaker } from './pos'
// Keep backward-compatible static methods while separating key builders by domain.
export class RedisKeyMaker extends PartnerKeyMaker {
static consumer = ConsumerKeyMaker
static enums = EnumKeyMaker
static guild = GuildKeyMaker
static partner = PartnerKeyMaker
static pos = PosKeyMaker
static consumerInfo = ConsumerKeyMaker.consumerInfo
static consumerBusinessActivitiesList = ConsumerKeyMaker.consumerBusinessActivitiesList
static consumerBusinessActivityInfo = ConsumerKeyMaker.consumerBusinessActivityInfo
static guildStockKeepingUnitsList = GuildKeyMaker.guildStockKeepingUnitsList
static guildGoodsList = GuildKeyMaker.guildGoodsList
static posInfo = PosKeyMaker.posInfo
static posMe = PosKeyMaker.posMe
static posGoodsList = PosKeyMaker.posGoodsList
static enumsAll = EnumKeyMaker.enumsAll
static enumsValues = EnumKeyMaker.enumsValues
}
export { ConsumerKeyMaker, EnumKeyMaker, GuildKeyMaker, PartnerKeyMaker, PosKeyMaker }
+135
View File
@@ -0,0 +1,135 @@
export class PartnerKeyMaker {
static partnersList(): string {
return 'partners:list'
}
static partnerDetail(partnerId: string): string {
return `partners:${partnerId}:detail`
}
static partnerActivatedLicensesList(
partnerId: string,
page: number,
perPage: number,
): string {
return `partners:${partnerId}:activated-licenses:list:${page}:${perPage}`
}
static partnerActivatedLicensesListPattern(partnerId: string): string {
return `partners:${partnerId}:activated-licenses:list:*`
}
static partnerLicenseChargeTransactionsList(
partnerId: string,
page: number,
perPage: number,
): string {
return `partners:${partnerId}:license-charge-transactions:list:${page}:${perPage}`
}
static partnerLicenseChargeTransactionsListPattern(partnerId: string): string {
return `partners:${partnerId}:license-charge-transactions:list:*`
}
static partnerLicenseChargeTransactionDetail(
partnerId: string,
transactionId: string,
): string {
return `partners:${partnerId}:license-charge-transactions:${transactionId}:detail`
}
static partnerLicenseChargeTransactionDetailPattern(partnerId: string): string {
return `partners:${partnerId}:license-charge-transactions:*:detail`
}
//////////////////// consumers ////////////////////
static partnerConsumersPattern(partnerId: string): string {
return `partners:${partnerId}:consumers:*`
}
static partnerConsumerPattern(partnerId: string): string {
return this.partnerConsumersPattern(partnerId)
}
static partnerConsumersListPattern(partnerId: string): string {
return `partners:${partnerId}:consumers:list:*`
}
static partnerConsumersList(partnerId: string, page: number, perPage: number): string {
return `partners:${partnerId}:consumers:list:${page}:${perPage}`
}
static partnerConsumerInfo(partnerId: string, consumerId: string): string {
return `partners:${partnerId}:consumers:${consumerId}:info`
}
static partnerConsumerBusinessActivitiesList(
partnerId: string,
consumerId: string,
page: number,
perPage: number,
): string {
return `partners:${partnerId}:consumers:${consumerId}:business-activities:list:${page}:${perPage}`
}
static partnerConsumerBusinessActivitiesPattern(
partnerId: string,
consumerId: string,
): string {
return `partners:${partnerId}:consumers:${consumerId}:business-activities:*`
}
static partnerConsumerBusinessActivityInfo(
partnerId: string,
consumerId: string,
businessActivityId: string,
): string {
return `partners:${partnerId}:consumers:${consumerId}:business-activities:${businessActivityId}:info`
}
static partnerConsumerBusinessActivityComplexesList(
partnerId: string,
consumerId: string,
businessActivityId: string,
page: number,
perPage: number,
): string {
return `partners:${partnerId}:consumers:${consumerId}:business-activities:${businessActivityId}:complexes:list:${page}:${perPage}`
}
static partnerConsumerBusinessActivityComplexesPattern(
partnerId: string,
consumerId: string,
businessActivityId: string,
): string {
return `partners:${partnerId}:consumers:${consumerId}:business-activities:${businessActivityId}:complexes:*`
}
static partnerConsumerBusinessActivityComplexInfo(
partnerId: string,
consumerId: string,
businessActivityId: string,
complexId: string,
): string {
return `partners:${partnerId}:consumers:${consumerId}:business-activities:${businessActivityId}:complexes:${complexId}`
}
static partnerConsumerBusinessActivityComplexPosesPattern(
partnerId: string,
consumerId: string,
businessActivityId: string,
complexId: string,
): string {
return `partners:${partnerId}:consumers:${consumerId}:business-activities:${businessActivityId}:complexes:${complexId}:poses:*`
}
static partnerConsumerBusinessActivityComplexPosInfo(
partnerId: string,
consumerId: string,
businessActivityId: string,
complexId: string,
posId: string,
): string {
return `partners:${partnerId}:consumers:${consumerId}:business-activities:${businessActivityId}:complexes:${complexId}:poses:${posId}`
}
}
+13
View File
@@ -0,0 +1,13 @@
export class PosKeyMaker {
static posInfo(posId: string): string {
return `pos:${posId}:info`
}
static posMe(accountId: string, posId: string): string {
return `pos:${posId}:me:${accountId}`
}
static posGoodsList(businessActivityId: string, guildId: string): string {
return `pos:ba:${businessActivityId}:guild:${guildId}:goods:list`
}
}