优化
This commit is contained in:
parent
d244fa1058
commit
265702fb97
@ -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:
|
||||||
|
Loading…
Reference in New Issue
Block a user