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:
@@ -1,8 +1,10 @@
|
||||
import { QUERY_CONSTANTS } from '@/common/queryConstants'
|
||||
import { ResponseMapper } from '@/common/response/response-mapper'
|
||||
import { PasswordUtil } from '@/common/utils'
|
||||
import { RedisKeyMaker } from '@/common/utils/redisKeyMaker'
|
||||
import { ConsumerUpdateInput } from '@/generated/prisma/models'
|
||||
import { PrismaService } from '@/prisma/prisma.service'
|
||||
import { RedisService } from '@/redis/redis.service'
|
||||
import { Injectable } from '@nestjs/common'
|
||||
import consumer_mappersUtil from '../../common/utils/mappers/consumer_mappers.util'
|
||||
import { UpdateConsumerInfoDto } from './dto/update-info-request.dto'
|
||||
@@ -10,9 +12,20 @@ import { UpdateConsumerPasswordDto } from './dto/update-password-request.dto'
|
||||
|
||||
@Injectable()
|
||||
export class ConsumerService {
|
||||
constructor(private readonly prisma: PrismaService) {}
|
||||
constructor(
|
||||
private readonly prisma: PrismaService,
|
||||
private readonly redisService: RedisService,
|
||||
) {}
|
||||
|
||||
private readonly infoCacheTtlSeconds = 300
|
||||
|
||||
async getInfo(consumer_id: string) {
|
||||
const cacheKey = RedisKeyMaker.consumerInfo(consumer_id)
|
||||
const cached = await this.redisService.getJson<unknown>(cacheKey)
|
||||
if (cached) {
|
||||
return ResponseMapper.single(cached)
|
||||
}
|
||||
|
||||
const consumer = await this.prisma.consumer.findUniqueOrThrow({
|
||||
where: {
|
||||
id: consumer_id,
|
||||
@@ -24,7 +37,9 @@ export class ConsumerService {
|
||||
},
|
||||
})
|
||||
|
||||
return ResponseMapper.single(consumer_mappersUtil(consumer))
|
||||
const mappedConsumer = consumer_mappersUtil(consumer)
|
||||
await this.redisService.setJson(cacheKey, mappedConsumer, this.infoCacheTtlSeconds)
|
||||
return ResponseMapper.single(mappedConsumer)
|
||||
}
|
||||
|
||||
async updateInfo(consumer_id: string, data: UpdateConsumerInfoDto) {
|
||||
@@ -69,6 +84,22 @@ export class ConsumerService {
|
||||
},
|
||||
})
|
||||
|
||||
await this.redisService.delete(RedisKeyMaker.consumerInfo(consumer_id))
|
||||
const partnerOwner = await this.prisma.consumer.findUnique({
|
||||
where: { id: consumer_id },
|
||||
select: {
|
||||
legal: { select: { partner_id: true } },
|
||||
individual: { select: { partner_id: true } },
|
||||
},
|
||||
})
|
||||
const partnerId =
|
||||
partnerOwner?.legal?.partner_id || partnerOwner?.individual?.partner_id || null
|
||||
if (partnerId) {
|
||||
await this.redisService.delete(
|
||||
RedisKeyMaker.partnerConsumerInfo(partnerId, consumer_id),
|
||||
)
|
||||
}
|
||||
|
||||
return ResponseMapper.update(consumer)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user