98 lines
3.4 KiB
Python
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})
|