This commit is contained in:
jlj 2025-06-06 10:46:29 +08:00
parent d244fa1058
commit 265702fb97

View File

@ -2723,25 +2723,53 @@ def add_creator_to_private_pool(request):
if creator_id and not creator_ids: if creator_id and not creator_ids:
creator_ids = [creator_id] creator_ids = [creator_id]
if not pool_id or not creator_ids: if not creator_ids:
return JsonResponse({ return JsonResponse({
'code': 400, 'code': 400,
'message': '缺少必要参数: pool_id 或 creator_id/creator_ids', 'message': '缺少必要参数: creator_id/creator_ids',
'data': None 'data': None
}, json_dumps_params={'ensure_ascii': False}) }, json_dumps_params={'ensure_ascii': False})
# 查询私有库信息并验证所有权 # 查询私有库信息并验证所有权
try: private_pool = None
private_pool = PrivateCreatorPool.objects.get( is_auto_created = False
id=pool_id,
user_id=current_user.id # 确保只能操作当前用户的私有库 if pool_id:
) # 如果提供了pool_id查询指定的私有库
except PrivateCreatorPool.DoesNotExist: try:
return JsonResponse({ private_pool = PrivateCreatorPool.objects.get(
'code': 404, id=pool_id,
'message': f'找不到ID为 {pool_id} 的私有库或无权限访问', user_id=current_user.id # 确保只能操作当前用户的私有库
'data': None )
}, json_dumps_params={'ensure_ascii': False}) except PrivateCreatorPool.DoesNotExist:
return JsonResponse({
'code': 404,
'message': f'找不到ID为 {pool_id} 的私有库或无权限访问',
'data': None
}, json_dumps_params={'ensure_ascii': False})
else:
# 如果没有提供pool_id查询用户的默认私有库
try:
private_pool = PrivateCreatorPool.objects.get(
user_id=current_user.id,
is_default=True
)
except PrivateCreatorPool.DoesNotExist:
# 如果没有默认私有库,尝试获取用户的任意一个私有库
private_pool = PrivateCreatorPool.objects.filter(
user_id=current_user.id
).first()
if not private_pool:
# 如果用户没有任何私有库,自动创建一个默认私有库
private_pool = PrivateCreatorPool.objects.create(
user_id=current_user.id,
name="默认私有达人库",
description="系统自动创建的默认私有达人库",
is_default=True
)
is_auto_created = True
logger.info(f"为用户 {current_user.id} 自动创建默认私有达人库ID: {private_pool.id}")
# 添加达人到私有库 # 添加达人到私有库
added_creators = [] added_creators = []
@ -2807,7 +2835,9 @@ def add_creator_to_private_pool(request):
'already_exists_count': already_exists_count, 'already_exists_count': already_exists_count,
'pool': { 'pool': {
'id': private_pool.id, 'id': private_pool.id,
'name': private_pool.name 'name': private_pool.name,
'is_default': private_pool.is_default,
'auto_created': is_auto_created
} }
} }
}, json_dumps_params={'ensure_ascii': False}) }, json_dumps_params={'ensure_ascii': False})
@ -3217,14 +3247,8 @@ def filter_private_pool_creators(request):
# 解析POST请求体 # 解析POST请求体
data = json.loads(request.body) data = json.loads(request.body)
# 获取私有库ID # 获取私有库ID(现在是可选的)
pool_id = data.get('pool_id') pool_id = data.get('pool_id')
if not pool_id:
return JsonResponse({
'code': 400,
'message': '缺少必要参数: pool_id',
'data': None
}, json_dumps_params={'ensure_ascii': False})
# 获取过滤条件 # 获取过滤条件
filter_data = data.get('filter', {}) filter_data = data.get('filter', {})
@ -3236,29 +3260,46 @@ def filter_private_pool_creators(request):
# 获取状态过滤参数,如果提供了才使用 # 获取状态过滤参数,如果提供了才使用
status = filter_data.get('status') status = filter_data.get('status')
# 查询私有库信息 # 初始化查询逻辑
try: creator_relations = PrivateCreatorRelation.objects.filter(
private_pool = PrivateCreatorPool.objects.get(id=pool_id) private_pool__user_id=request.user.id # 确保只查询当前用户的私有库
).select_related('creator')
# 检查私有库是否属于当前登录用户
if private_pool.user_id != request.user.id: # 私有库信息
pool_info = None
# 如果提供了pool_id则筛选特定私有库
if pool_id:
try:
private_pool = PrivateCreatorPool.objects.get(id=pool_id)
# 检查私有库是否属于当前登录用户
if private_pool.user_id != request.user.id:
return JsonResponse({
'code': 403,
'message': '没有权限访问此私有达人库',
'data': None
}, json_dumps_params={'ensure_ascii': False})
# 进一步筛选指定私有库中的达人
creator_relations = creator_relations.filter(private_pool=private_pool)
# 构造私有库信息
pool_info = {
"id": private_pool.id,
"name": private_pool.name,
"description": private_pool.description,
"is_default": private_pool.is_default,
"user_id": private_pool.user_id,
"created_at": private_pool.created_at.strftime('%Y-%m-%d')
}
except PrivateCreatorPool.DoesNotExist:
return JsonResponse({ return JsonResponse({
'code': 403, 'code': 404,
'message': '没有权限访问此私有达人库', 'message': f'找不到ID为 {pool_id} 的私有',
'data': None 'data': None
}, json_dumps_params={'ensure_ascii': False}) }, json_dumps_params={'ensure_ascii': False})
except PrivateCreatorPool.DoesNotExist:
return JsonResponse({
'code': 404,
'message': f'找不到ID为 {pool_id} 的私有库',
'data': None
}, json_dumps_params={'ensure_ascii': False})
# 查询私有库中的达人关联
creator_relations = PrivateCreatorRelation.objects.filter(
private_pool=private_pool
).select_related('creator')
# 应用状态过滤条件仅当提供了status参数时 # 应用状态过滤条件仅当提供了status参数时
if status: if status:
@ -3357,6 +3398,7 @@ def filter_private_pool_creators(request):
creator_list = [] creator_list = []
for relation in paged_relations: for relation in paged_relations:
creator = relation.creator creator = relation.creator
private_pool = relation.private_pool # 获取关联的私有库
# 格式化电商等级 # 格式化电商等级
e_commerce_level_formatted = f"L{creator.e_commerce_level}" if creator.e_commerce_level else None e_commerce_level_formatted = f"L{creator.e_commerce_level}" if creator.e_commerce_level else None
@ -3378,6 +3420,8 @@ def filter_private_pool_creators(request):
formatted_creator = { formatted_creator = {
"relation_id": relation.id, "relation_id": relation.id,
"creator_id": creator.id, "creator_id": creator.id,
"pool_id": private_pool.id, # 添加池ID
"pool_name": private_pool.name, # 添加池名称
"name": creator.name, "name": creator.name,
"avatar": creator.avatar_url, "avatar": creator.avatar_url,
"category": creator.category, "category": creator.category,
@ -3410,16 +3454,6 @@ def filter_private_pool_creators(request):
"has_prev": page > 1 "has_prev": page > 1
} }
# 构造私有库信息
pool_info = {
"id": private_pool.id,
"name": private_pool.name,
"description": private_pool.description,
"is_default": private_pool.is_default,
"user_id": private_pool.user_id,
"created_at": private_pool.created_at.strftime('%Y-%m-%d')
}
return JsonResponse({ return JsonResponse({
'code': 200, 'code': 200,
'message': '获取成功', 'message': '获取成功',
@ -3748,29 +3782,13 @@ def search_private_creators(request):
# 获取搜索参数 # 获取搜索参数
search_query = request.GET.get('q', '').strip() # 搜索关键词 search_query = request.GET.get('q', '').strip() # 搜索关键词
search_mode = request.GET.get('mode', 'and').lower() # 搜索模式and 或 or默认为 and search_mode = request.GET.get('mode', 'and').lower() # 搜索模式and 或 or默认为 and
pool_id = request.GET.get('pool_id') # 私有达人库ID如果提供则只搜索特定私有库
page = int(request.GET.get('page', 1)) page = int(request.GET.get('page', 1))
page_size = int(request.GET.get('page_size', 10)) page_size = int(request.GET.get('page_size', 10))
# 基础查询 - 查询用户的私有达人库中的达人 # 直接搜索用户所有私有库中的达人
if pool_id: query = PrivateCreatorRelation.objects.filter(
# 如果提供了特定池ID只搜索该池 private_pool__user=user
try: ).select_related('creator', 'private_pool')
pool = PrivateCreatorPool.objects.get(id=pool_id, user=user)
query = PrivateCreatorRelation.objects.filter(
private_pool=pool
).select_related('creator', 'private_pool')
except PrivateCreatorPool.DoesNotExist:
return JsonResponse({
'code': 404,
'message': '私有达人库不存在',
'data': None
}, json_dumps_params={'ensure_ascii': False})
else:
# 否则搜索用户所有私有库
query = PrivateCreatorRelation.objects.filter(
private_pool__user=user
).select_related('creator', 'private_pool')
# 如果有搜索关键词,进行模糊搜索 # 如果有搜索关键词,进行模糊搜索
if search_query: if search_query:
@ -3910,7 +3928,8 @@ def search_private_creators(request):
"added_from_public": relation.added_from_public, "added_from_public": relation.added_from_public,
"added_at": relation.created_at.strftime('%Y-%m-%d'), "added_at": relation.created_at.strftime('%Y-%m-%d'),
"is_public_removed": relation.status == 'public_removed', "is_public_removed": relation.status == 'public_removed',
"status_note": "该达人已从公有库中移除" if relation.status == 'public_removed' else None "status_note": "该达人已从公有库中移除" if relation.status == 'public_removed' else None,
"pool_name": relation.private_pool.name # 添加所属达人库名称
} }
creator_list.append(formatted_creator) creator_list.append(formatted_creator)
@ -3934,29 +3953,15 @@ def search_private_creators(request):
"results_count": total_count, "results_count": total_count,
"search_applied": bool(search_query), "search_applied": bool(search_query),
"supports_single_char": True, # 标识支持单字符搜索 "supports_single_char": True, # 标识支持单字符搜索
"search_scope": "private_only", # 标识只搜索私有达人库 "search_scope": "private_only" # 标识只搜索私有达人库
"pool_id": pool_id # 返回当前搜索的池ID如果有的话
} }
# 构造私有库信息如果有特定池ID
pool_info = None
if pool_id and 'pool' in locals():
pool_info = {
"id": pool.id,
"name": pool.name,
"description": pool.description,
"is_default": pool.is_default,
"user_id": pool.user_id,
"created_at": pool.created_at.strftime('%Y-%m-%d')
}
return JsonResponse({ return JsonResponse({
'code': 200, 'code': 200,
'message': '搜索成功', 'message': '搜索成功',
'data': creator_list, 'data': creator_list,
'pagination': pagination, 'pagination': pagination,
'search_info': search_info, 'search_info': search_info
'pool_info': pool_info
}, json_dumps_params={'ensure_ascii': False}) }, json_dumps_params={'ensure_ascii': False})
except Exception as e: except Exception as e: