Fase 3 (isla): recuperar personaje (restore_character) en React/TSX

restore_character_view pasa de redirect+messages a JSON en POST: guid -> SOAP
.char del restore -> {success, message, redirect}. RestoreCharacterForm.tsx
(select de personajes borrados + botón) hace fetch y en éxito redirige a my-account.
La vista pasa character_data por json_script; se conserva la rama sin personajes.

Verificado: check OK, ambas ramas renderizan, redirige a login sin sesión.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-12 21:57:49 +00:00
parent ff458379b0
commit 08c36619f0
5 changed files with 116 additions and 21 deletions
+14 -12
View File
@@ -121,25 +121,23 @@ def restore_character_view(request):
guid = request.POST.get('guid')
if not guid:
messages.error(request, "No se seleccionó un personaje para restaurar.")
return redirect('restore-character')
return JsonResponse({'success': False, 'message': '<span class="red-form-response">No se seleccionó un personaje para restaurar.</span>'})
# Aquí es donde usamos SOAP en lugar de la actualización directa
# Restaurar vía SOAP y responder en JSON (isla React)
try:
command = f".char del restore {guid}" # Comando SOAP para restaurar el personaje
response = execute_soap_command(command) # Ejecuta el comando SOAP
# Si la respuesta es exitosa, informamos al usuario
if response == "success":
messages.success(request, "Personaje restaurado exitosamente.")
return redirect('my-account') # Redirigir a la cuenta del usuario
return JsonResponse({
'success': True,
'message': '<span class="ok-form-response">Personaje restaurado exitosamente.</span>',
'redirect': reverse('my-account'),
})
else:
messages.error(request, "Hubo un error al restaurar el personaje.")
return redirect('restore-character')
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Hubo un error al restaurar el personaje.</span>'})
except Exception as e:
messages.error(request, f"Hubo un error al intentar restaurar el personaje: {str(e)}")
return redirect('restore-character')
return JsonResponse({'success': False, 'message': f'<span class="red-form-response">Hubo un error al intentar restaurar el personaje: {str(e)}</span>'})
# Realizar la consulta para obtener los personajes eliminados de la cuenta
with connections['acore_characters'].cursor() as cursor:
@@ -172,7 +170,11 @@ def restore_character_view(request):
# Renderiza la plantilla con los personajes eliminados
return render(request, 'account/restore_character.html', {
'character_list': character_list
'character_list': character_list,
'character_data': [
{'guid': c['guid'], 'name': c['name'], 'level': c['level']}
for c in character_list
],
})
def restore_items_view(request):
username = request.session.get('username')