39145-vm/core/views.py
2026-03-13 12:26:02 +00:00

98 lines
3.4 KiB
Python

from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login
from .models import Project, MindMapNode, MindMapConnection
from .ai_helpers import generate_initial_mindmap
def signup(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user)
return redirect('project_list')
else:
form = UserCreationForm()
return render(request, 'registration/signup.html', {'form': form})
def home(request):
return render(request, 'core/index.html')
@login_required
def project_list(request):
projects = Project.objects.filter(user=request.user).order_by('-created_at')
return render(request, 'core/project_list.html', {'projects': projects})
@login_required
def project_detail(request, pk):
project = get_object_or_404(Project, pk=pk, user=request.user)
nodes = project.nodes.all()
connections = project.connections.all()
return render(request, 'core/project_detail.html', {
'project': project,
'nodes': nodes,
'connections': connections
})
@login_required
def create_project(request):
if request.method == 'POST':
title = request.POST.get('title')
industry = request.POST.get('industry')
goal = request.POST.get('goal')
project = Project.objects.create(user=request.user, title=title, industry=industry, goal=goal)
# Automatically generate the first mind map based on the input
generate_initial_mindmap(project)
return redirect('project_detail', pk=project.pk)
return render(request, 'core/create_project.html')
@login_required
def regenerate_mindmap(request, pk):
project = get_object_or_404(Project, pk=pk, user=request.user)
if request.method == 'POST':
project.nodes.all().delete()
project.connections.all().delete()
generate_initial_mindmap(project)
return redirect('project_detail', pk=project.pk)
import json
from django.http import JsonResponse
from django.views.decorators.http import require_POST
@login_required
@require_POST
def edit_node(request, pk, node_id):
project = get_object_or_404(Project, pk=pk, user=request.user)
try:
node = project.nodes.get(pk=node_id)
data = json.loads(request.body)
title = data.get('title', '').strip()
summary = data.get('summary', '').strip()
category = data.get('category', '').strip()
if title:
node.title = title
if summary:
node.summary = summary
if category:
node.category = category
node.save()
return JsonResponse({'status': 'success', 'node': {
'id': node.pk,
'title': node.title,
'summary': node.summary,
'category': node.category
}})
except Exception as e:
return JsonResponse({'status': 'error', 'message': str(e)}, status=400)
@login_required
def delete_project(request, pk):
project = get_object_or_404(Project, pk=pk, user=request.user)
if request.method == 'POST':
project.delete()
return redirect('project_list')
return render(request, 'core/delete_project_confirm.html', {'project': project})