38292-vm/core/views.py
2026-02-08 23:06:38 +00:00

71 lines
2.6 KiB
Python

from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth.decorators import login_required
from django.db.models import Q
from django.contrib import messages
from .models import AIChatHistory, AIConfiguration, SyncHistoryLog
from .ai_service import sync_ai_history
def index(request):
if request.user.is_authenticated:
return redirect('dashboard')
return render(request, 'core/index.html')
@login_required
def dashboard(request):
profile = request.user.profile
company = profile.company
query = request.GET.get('q', '')
histories = AIChatHistory.objects.filter(company=company)
if query:
histories = histories.filter(
Q(chat_title__icontains=query) |
Q(chat_content__icontains=query)
)
# Ordering is now handled by Model Meta
histories = histories.order_by('-chat_last_date')
# AI Configurations for the company
ai_configs = AIConfiguration.objects.filter(company=company)
last_sync_log = SyncHistoryLog.objects.filter(company=company).order_by('-timestamp').first()
context = {
'histories': histories,
'query': query,
'ai_configs': ai_configs,
'last_sync_log': last_sync_log,
}
return render(request, 'core/dashboard.html', context)
@login_required
def chat_detail(request, pk):
profile = request.user.profile
chat = get_object_or_404(AIChatHistory, pk=pk, company=profile.company)
return render(request, 'core/chat_detail.html', {'chat': chat})
@login_required
def sync_history(request):
if request.method == 'POST':
profile = request.user.profile
configs = AIConfiguration.objects.filter(company=profile.company, is_active=True)
if not configs.exists():
messages.warning(request, "No active AI configurations found. Please contact your administrator to add an API key.")
else:
total_synced = 0
for config in configs:
sync_ai_history(config)
# Re-fetch the log we just created
latest_log = SyncHistoryLog.objects.filter(configuration=config).order_by('-timestamp').first()
if latest_log and latest_log.status == 'success':
total_synced += latest_log.records_synced
if total_synced > 0:
messages.success(request, f"Successfully synced {total_synced} new chat records.")
else:
messages.info(request, "Sync completed. No new records found.")
return redirect('dashboard')