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})