refactor(goods): streamline goods service and controller, remove favorites module

- Removed the PosGoodFavorite module, controller, and service to simplify the codebase.
- Updated goods service to handle cache invalidation directly.
- Refactored goods controller to remove commented-out code and improve clarity.
- Introduced OwnedGoods module for better organization of owned goods functionality.
- Updated DTOs to extend from existing structures for consistency.
- Enhanced cache invalidation logic in goods service and owned goods service.
This commit is contained in:
2026-05-20 20:22:00 +03:30
parent fc27b9d616
commit 1d47fb1a1d
31 changed files with 1166 additions and 345 deletions
@@ -12,6 +12,6 @@ export class AdminGuildCacheInvalidationService {
async invalidateGoodsList(guildId: string): Promise<void> {
await this.redisService.delete(RedisKeyMaker.guildGoodsList(guildId))
await this.posCacheInvalidationService.invalidateGoodsListByGuild(guildId)
await this.posCacheInvalidationService.invalidatePosGoodsByGuildPattern(guildId)
}
}
@@ -39,8 +39,12 @@ export class GoodsController {
},
},
})
create(@Body() data: CreateGuildGoodDto, @UploadedFile() file: Express.Multer.File) {
return this.goodsService.create(data, file)
create(
@Param('guildId') guildId: string,
@Body() data: CreateGuildGoodDto,
@UploadedFile() file: Express.Multer.File,
) {
return this.goodsService.create(guildId, data, file)
}
@Patch(':id')
@@ -55,10 +59,11 @@ export class GoodsController {
},
})
update(
@Param('guildId') guildId: string,
@Param('id') id: string,
@Body() data: UpdateGuildGoodDto,
@UploadedFile() file: Express.Multer.File,
) {
return this.goodsService.update(id, data, file)
return this.goodsService.update(guildId, id, data, file)
}
}
+10 -31
View File
@@ -91,12 +91,8 @@ export class GoodsService {
return ResponseMapper.single(good)
}
async create(data: CreateGuildGoodDto, file: Express.Multer.File) {
async create(guildId: string, data: CreateGuildGoodDto, file: Express.Multer.File) {
const { category_id, measure_unit_id, sku_id, ...rest } = data
const category = await this.prisma.goodCategory.findUnique({
where: { id: category_id },
select: { guild_id: true },
})
const good = await this.prisma.$transaction(async tx => {
let image_url = ''
@@ -133,28 +129,21 @@ export class GoodsService {
})
})
if (category?.guild_id) {
await this.cacheInvalidationService.invalidateGoodsList(category.guild_id)
}
await this.cacheInvalidationService.invalidateGoodsList(guildId)
return ResponseMapper.create(good)
}
async update(id: string, data: UpdateGuildGoodDto, file: Express.Multer.File) {
async update(
guildId: string,
id: string,
data: UpdateGuildGoodDto,
file: Express.Multer.File,
) {
const { category_id, measure_unit_id, sku_id, ...rest } = data
const prevGood = await this.prisma.good.findUnique({
where: { id },
select: { category: { select: { guild_id: true } } },
})
const nextCategory = category_id
? await this.prisma.goodCategory.findUnique({
where: { id: category_id },
select: { guild_id: true },
})
: null
const good = await this.prisma.$transaction(async tx => {
let image_url = ''
let image_url = undefined as string | undefined
if (file) {
const uploadedUrl = await this.uploaderService.uploadFile(
file,
@@ -198,17 +187,7 @@ export class GoodsService {
})
})
const cacheGuildIds = new Set<string>()
if (prevGood?.category?.guild_id) {
cacheGuildIds.add(prevGood.category.guild_id)
}
if (nextCategory?.guild_id) {
cacheGuildIds.add(nextCategory.guild_id)
}
for (const guildId of cacheGuildIds) {
await this.cacheInvalidationService.invalidateGoodsList(guildId)
}
await this.cacheInvalidationService.invalidateGoodsList(guildId)
return ResponseMapper.create(good)
}