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(
user=request.user,
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]
)
if not devices:
@ -132,7 +132,7 @@ class DeviceViewSet(viewsets.ViewSet):
if existing and existing.user != request.user:
return error(code=ErrorCode.DEVICE_ALREADY_BOUND, message='设备已被其他用户绑定')
# 创建角色记忆
# 创建角色记忆(始终创建新的)
role_memory = None
if device.device_type:
role_memory = RoleMemory.objects.create(
@ -175,7 +175,7 @@ class DeviceViewSet(viewsets.ViewSet):
user_devices = UserDevice.objects.filter(
user=request.user,
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)
return success(data=serializer.data)
@ -356,9 +356,9 @@ class DeviceViewSet(viewsets.ViewSet):
# ==================== 角色记忆相关端点 ====================
@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/
"""
try:
@ -369,12 +369,12 @@ class DeviceViewSet(viewsets.ViewSet):
return error(code=ErrorCode.DEVICE_NOT_FOUND, message='绑定记录不存在')
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)
@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/
@ -387,7 +387,7 @@ class DeviceViewSet(viewsets.ViewSet):
return error(code=ErrorCode.DEVICE_NOT_FOUND, message='绑定记录不存在')
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)
if not serializer.is_valid():
@ -401,9 +401,9 @@ class DeviceViewSet(viewsets.ViewSet):
return success(data=RoleMemorySerializer(rm).data, message='设置已保存')
@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/
"""
try:
@ -414,7 +414,7 @@ class DeviceViewSet(viewsets.ViewSet):
return error(code=ErrorCode.DEVICE_NOT_FOUND, message='绑定记录不存在')
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)
if not serializer.is_valid():
@ -428,7 +428,7 @@ class DeviceViewSet(viewsets.ViewSet):
return success(data=RoleMemorySerializer(rm).data, message='Agent信息已更新')
@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/
@ -441,17 +441,16 @@ class DeviceViewSet(viewsets.ViewSet):
return error(code=ErrorCode.DEVICE_NOT_FOUND, message='绑定记录不存在')
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)
if not serializer.is_valid():
return error(message=str(serializer.errors))
rm = user_device.role_memory
rm.memory_summary = serializer.validated_data['memory_summary']
rm.save(update_fields=['memory_summary', 'updated_at'])
user_device.role_memory.memory_summary = serializer.validated_data['memory_summary']
user_device.role_memory.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')
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
"""
qs = RoleMemory.objects.filter(
user=request.user
).select_related('device_type').order_by('-created_at')
qs = RoleMemory.objects.filter(user=request.user).select_related('device_type')
device_type_id = request.query_params.get('device_type_id')
if device_type_id:
qs = qs.filter(device_type_id=device_type_id)
is_bound = request.query_params.get('is_bound')
if is_bound is not None:
qs = qs.filter(is_bound=is_bound.lower() == 'true')
return success(data=RoleMemorySerializer(qs, many=True).data)
@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')
if not role_memory_id:
return error(message='请指定角色记忆ID')
return error(message='role_memory_id 不能为空')
try:
new_rm = RoleMemory.objects.get(id=role_memory_id, user=request.user)
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:
@ -504,17 +498,15 @@ class DeviceViewSet(viewsets.ViewSet):
if new_rm.is_bound:
return error(code=ErrorCode.ROLE_MEMORY_ALREADY_BOUND, message='该角色记忆正在被其他设备使用')
# 旧记忆标记闲置
# 执行切换:旧记忆标记闲置,新记忆标记绑定
old_rm = user_device.role_memory
if old_rm:
old_rm.is_bound = False
old_rm.save(update_fields=['is_bound', 'updated_at'])
# 新记忆标记绑定
new_rm.is_bound = True
new_rm.save(update_fields=['is_bound', 'updated_at'])
# 更新绑定关系
user_device.role_memory = new_rm
user_device.save(update_fields=['role_memory'])