fix diff
All checks were successful
Build and Deploy Backend / build-and-deploy (push) Successful in 2m37s

This commit is contained in:
repair-agent 2026-02-28 14:34:19 +08:00
parent 35e4ef2256
commit 4736f63040

View File

@ -73,7 +73,7 @@ class DeviceViewSet(viewsets.ViewSet):
UserDevice.objects.filter( UserDevice.objects.filter(
user=request.user, user=request.user,
is_active=True is_active=True
).select_related('device', 'device__device_type', 'spirit', 'role_memory') ).select_related('device', 'device__device_type', 'spirit', 'role_memory', 'role_memory__device_type')
.order_by('-bind_time')[:1] .order_by('-bind_time')[:1]
) )
if not devices: if not devices:
@ -132,7 +132,7 @@ class DeviceViewSet(viewsets.ViewSet):
if existing and existing.user != request.user: if existing and existing.user != request.user:
return error(code=ErrorCode.DEVICE_ALREADY_BOUND, message='设备已被其他用户绑定') return error(code=ErrorCode.DEVICE_ALREADY_BOUND, message='设备已被其他用户绑定')
# 创建角色记忆 # 创建角色记忆(始终创建新的)
role_memory = None role_memory = None
if device.device_type: if device.device_type:
role_memory = RoleMemory.objects.create( role_memory = RoleMemory.objects.create(
@ -175,7 +175,7 @@ class DeviceViewSet(viewsets.ViewSet):
user_devices = UserDevice.objects.filter( user_devices = UserDevice.objects.filter(
user=request.user, user=request.user,
is_active=True is_active=True
).select_related('device', 'device__device_type', 'spirit', 'role_memory') ).select_related('device', 'device__device_type', 'spirit', 'role_memory', 'role_memory__device_type')
serializer = UserDeviceSerializer(user_devices, many=True) serializer = UserDeviceSerializer(user_devices, many=True)
return success(data=serializer.data) return success(data=serializer.data)
@ -356,9 +356,9 @@ class DeviceViewSet(viewsets.ViewSet):
# ==================== 角色记忆相关端点 ==================== # ==================== 角色记忆相关端点 ====================
@action(detail=True, methods=['get'], url_path='role-memory') @action(detail=True, methods=['get'], url_path='role-memory')
def get_role_memory(self, request, pk=None): def role_memory_detail(self, request, pk=None):
""" """
获取设备的角色记忆 获取当前设备的角色记忆
GET /api/v1/devices/{user_device_id}/role-memory/ GET /api/v1/devices/{user_device_id}/role-memory/
""" """
try: try:
@ -369,12 +369,12 @@ class DeviceViewSet(viewsets.ViewSet):
return error(code=ErrorCode.DEVICE_NOT_FOUND, message='绑定记录不存在') return error(code=ErrorCode.DEVICE_NOT_FOUND, message='绑定记录不存在')
if not user_device.role_memory: if not user_device.role_memory:
return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='角色记忆不存在') return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='该设备暂无角色记忆')
return success(data=RoleMemorySerializer(user_device.role_memory).data) return success(data=RoleMemorySerializer(user_device.role_memory).data)
@action(detail=True, methods=['put'], url_path='role-memory/settings') @action(detail=True, methods=['put'], url_path='role-memory/settings')
def update_role_memory_settings(self, request, pk=None): def role_memory_settings(self, request, pk=None):
""" """
更新角色记忆-设备设置 更新角色记忆-设备设置
PUT /api/v1/devices/{user_device_id}/role-memory/settings/ PUT /api/v1/devices/{user_device_id}/role-memory/settings/
@ -387,7 +387,7 @@ class DeviceViewSet(viewsets.ViewSet):
return error(code=ErrorCode.DEVICE_NOT_FOUND, message='绑定记录不存在') return error(code=ErrorCode.DEVICE_NOT_FOUND, message='绑定记录不存在')
if not user_device.role_memory: if not user_device.role_memory:
return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='角色记忆不存在') return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='该设备暂无角色记忆')
serializer = RoleMemorySettingsUpdateSerializer(data=request.data) serializer = RoleMemorySettingsUpdateSerializer(data=request.data)
if not serializer.is_valid(): if not serializer.is_valid():
@ -401,9 +401,9 @@ class DeviceViewSet(viewsets.ViewSet):
return success(data=RoleMemorySerializer(rm).data, message='设置已保存') return success(data=RoleMemorySerializer(rm).data, message='设置已保存')
@action(detail=True, methods=['put'], url_path='role-memory/agent') @action(detail=True, methods=['put'], url_path='role-memory/agent')
def update_role_memory_agent(self, request, pk=None): def role_memory_agent(self, request, pk=None):
""" """
更新角色记忆-Agent信息提示词音色 更新角色记忆-Agent信息
PUT /api/v1/devices/{user_device_id}/role-memory/agent/ PUT /api/v1/devices/{user_device_id}/role-memory/agent/
""" """
try: try:
@ -414,7 +414,7 @@ class DeviceViewSet(viewsets.ViewSet):
return error(code=ErrorCode.DEVICE_NOT_FOUND, message='绑定记录不存在') return error(code=ErrorCode.DEVICE_NOT_FOUND, message='绑定记录不存在')
if not user_device.role_memory: if not user_device.role_memory:
return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='角色记忆不存在') return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='该设备暂无角色记忆')
serializer = RoleMemoryAgentUpdateSerializer(data=request.data) serializer = RoleMemoryAgentUpdateSerializer(data=request.data)
if not serializer.is_valid(): if not serializer.is_valid():
@ -428,7 +428,7 @@ class DeviceViewSet(viewsets.ViewSet):
return success(data=RoleMemorySerializer(rm).data, message='Agent信息已更新') return success(data=RoleMemorySerializer(rm).data, message='Agent信息已更新')
@action(detail=True, methods=['put'], url_path='role-memory/memory') @action(detail=True, methods=['put'], url_path='role-memory/memory')
def update_role_memory_summary(self, request, pk=None): def role_memory_summary(self, request, pk=None):
""" """
更新角色记忆-聊天记忆摘要 更新角色记忆-聊天记忆摘要
PUT /api/v1/devices/{user_device_id}/role-memory/memory/ PUT /api/v1/devices/{user_device_id}/role-memory/memory/
@ -441,17 +441,16 @@ class DeviceViewSet(viewsets.ViewSet):
return error(code=ErrorCode.DEVICE_NOT_FOUND, message='绑定记录不存在') return error(code=ErrorCode.DEVICE_NOT_FOUND, message='绑定记录不存在')
if not user_device.role_memory: if not user_device.role_memory:
return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='角色记忆不存在') return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='该设备暂无角色记忆')
serializer = RoleMemoryMemoryUpdateSerializer(data=request.data) serializer = RoleMemoryMemoryUpdateSerializer(data=request.data)
if not serializer.is_valid(): if not serializer.is_valid():
return error(message=str(serializer.errors)) return error(message=str(serializer.errors))
rm = user_device.role_memory user_device.role_memory.memory_summary = serializer.validated_data['memory_summary']
rm.memory_summary = serializer.validated_data['memory_summary'] user_device.role_memory.save(update_fields=['memory_summary', 'updated_at'])
rm.save(update_fields=['memory_summary', 'updated_at'])
return success(data=RoleMemorySerializer(rm).data, message='记忆摘要已更新') return success(message='聊天记忆已更新')
@action(detail=False, methods=['get'], url_path='role-memories') @action(detail=False, methods=['get'], url_path='role-memories')
def role_memory_list(self, request): def role_memory_list(self, request):
@ -459,18 +458,13 @@ class DeviceViewSet(viewsets.ViewSet):
获取角色记忆列表 获取角色记忆列表
GET /api/v1/devices/role-memories/?device_type_id=1&is_bound=false GET /api/v1/devices/role-memories/?device_type_id=1&is_bound=false
""" """
qs = RoleMemory.objects.filter( qs = RoleMemory.objects.filter(user=request.user).select_related('device_type')
user=request.user
).select_related('device_type').order_by('-created_at')
device_type_id = request.query_params.get('device_type_id') device_type_id = request.query_params.get('device_type_id')
if device_type_id: if device_type_id:
qs = qs.filter(device_type_id=device_type_id) qs = qs.filter(device_type_id=device_type_id)
is_bound = request.query_params.get('is_bound') is_bound = request.query_params.get('is_bound')
if is_bound is not None: if is_bound is not None:
qs = qs.filter(is_bound=is_bound.lower() == 'true') qs = qs.filter(is_bound=is_bound.lower() == 'true')
return success(data=RoleMemorySerializer(qs, many=True).data) return success(data=RoleMemorySerializer(qs, many=True).data)
@action(detail=True, methods=['put'], url_path='switch-role-memory') @action(detail=True, methods=['put'], url_path='switch-role-memory')
@ -489,12 +483,12 @@ class DeviceViewSet(viewsets.ViewSet):
role_memory_id = request.data.get('role_memory_id') role_memory_id = request.data.get('role_memory_id')
if not role_memory_id: if not role_memory_id:
return error(message='请指定角色记忆ID') return error(message='role_memory_id 不能为空')
try: try:
new_rm = RoleMemory.objects.get(id=role_memory_id, user=request.user) new_rm = RoleMemory.objects.get(id=role_memory_id, user=request.user)
except RoleMemory.DoesNotExist: except RoleMemory.DoesNotExist:
return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='角色记忆不存在') return error(code=ErrorCode.ROLE_MEMORY_NOT_FOUND, message='该设备暂无角色记忆')
# 校验: 目标记忆必须是同一设备类型 # 校验: 目标记忆必须是同一设备类型
if user_device.device.device_type_id and new_rm.device_type_id != user_device.device.device_type_id: if user_device.device.device_type_id and new_rm.device_type_id != user_device.device.device_type_id:
@ -504,17 +498,15 @@ class DeviceViewSet(viewsets.ViewSet):
if new_rm.is_bound: if new_rm.is_bound:
return error(code=ErrorCode.ROLE_MEMORY_ALREADY_BOUND, message='该角色记忆正在被其他设备使用') return error(code=ErrorCode.ROLE_MEMORY_ALREADY_BOUND, message='该角色记忆正在被其他设备使用')
# 旧记忆标记闲置 # 执行切换:旧记忆标记闲置,新记忆标记绑定
old_rm = user_device.role_memory old_rm = user_device.role_memory
if old_rm: if old_rm:
old_rm.is_bound = False old_rm.is_bound = False
old_rm.save(update_fields=['is_bound', 'updated_at']) old_rm.save(update_fields=['is_bound', 'updated_at'])
# 新记忆标记绑定
new_rm.is_bound = True new_rm.is_bound = True
new_rm.save(update_fields=['is_bound', 'updated_at']) new_rm.save(update_fields=['is_bound', 'updated_at'])
# 更新绑定关系
user_device.role_memory = new_rm user_device.role_memory = new_rm
user_device.save(update_fields=['role_memory']) user_device.save(update_fields=['role_memory'])