|
@@ -26,6 +26,47 @@ export class PromotionLinkService {
|
|
|
return link
|
|
return link
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 根据 memberId 查找推广链接
|
|
|
|
|
+ * @param memberId 团队成员ID
|
|
|
|
|
+ * @returns 推广链接或 null
|
|
|
|
|
+ */
|
|
|
|
|
+ async findByMemberId(memberId: number): Promise<PromotionLink | null> {
|
|
|
|
|
+ return this.promotionLinkRepository.findOne({ where: { memberId } })
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 创建或更新推广链接(根据 memberId)
|
|
|
|
|
+ * 如果已存在相同 memberId 的记录,则更新;否则创建新记录
|
|
|
|
|
+ * @param data 推广链接数据
|
|
|
|
|
+ * @returns 推广链接
|
|
|
|
|
+ */
|
|
|
|
|
+ async createOrUpdateByMemberId(data: CreatePromotionLinkBody): Promise<PromotionLink> {
|
|
|
|
|
+ if (!data.memberId) {
|
|
|
|
|
+ // 如果没有 memberId,直接创建新记录
|
|
|
|
|
+ return this.create(data)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 查找是否已存在相同 memberId 的记录
|
|
|
|
|
+ const existingLink = await this.findByMemberId(data.memberId)
|
|
|
|
|
+
|
|
|
|
|
+ if (existingLink) {
|
|
|
|
|
+ // 如果存在,更新记录(只更新提供的字段)
|
|
|
|
|
+ const updateData: any = {}
|
|
|
|
|
+ if (data.teamId !== undefined) updateData.teamId = data.teamId
|
|
|
|
|
+ if (data.name !== undefined) updateData.name = data.name
|
|
|
|
|
+ if (data.image !== undefined) updateData.image = data.image
|
|
|
|
|
+ if (data.link !== undefined) updateData.link = data.link
|
|
|
|
|
+ if (data.type !== undefined) updateData.type = data.type
|
|
|
|
|
+
|
|
|
|
|
+ await this.promotionLinkRepository.update(existingLink.id, updateData)
|
|
|
|
|
+ return this.findById(existingLink.id)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 如果不存在,创建新记录
|
|
|
|
|
+ return this.create(data)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 处理图片链接,如果是OSS链接则生成签名URL
|
|
* 处理图片链接,如果是OSS链接则生成签名URL
|
|
|
* @param imageUrl 原始图片URL
|
|
* @param imageUrl 原始图片URL
|
|
@@ -72,7 +113,7 @@ export class PromotionLinkService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
async findAll(query: ListPromotionLinkQuery): Promise<PaginationResponse<PromotionLink>> {
|
|
async findAll(query: ListPromotionLinkQuery): Promise<PaginationResponse<PromotionLink>> {
|
|
|
- const { page, size, name, type, teamId } = query
|
|
|
|
|
|
|
+ const { page, size, name, type, teamId, memberId } = query
|
|
|
|
|
|
|
|
const where: any = {}
|
|
const where: any = {}
|
|
|
|
|
|
|
@@ -88,6 +129,10 @@ export class PromotionLinkService {
|
|
|
where.teamId = teamId
|
|
where.teamId = teamId
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ if (memberId) {
|
|
|
|
|
+ where.memberId = memberId
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
const [links, total] = await this.promotionLinkRepository.findAndCount({
|
|
const [links, total] = await this.promotionLinkRepository.findAndCount({
|
|
|
where,
|
|
where,
|
|
|
skip: (Number(page) || 0) * (Number(size) || 20),
|
|
skip: (Number(page) || 0) * (Number(size) || 20),
|