randusertry commited on
Commit
5e6b2a8
·
verified ·
1 Parent(s): 6720e81

Upload 19 files

Browse files
web/__pycache__/models.cpython-310.pyc CHANGED
Binary files a/web/__pycache__/models.cpython-310.pyc and b/web/__pycache__/models.cpython-310.pyc differ
 
web/__pycache__/urls.cpython-310.pyc CHANGED
Binary files a/web/__pycache__/urls.cpython-310.pyc and b/web/__pycache__/urls.cpython-310.pyc differ
 
web/__pycache__/views.cpython-310.pyc CHANGED
Binary files a/web/__pycache__/views.cpython-310.pyc and b/web/__pycache__/views.cpython-310.pyc differ
 
web/migrations/0001_initial.py CHANGED
@@ -1,7 +1,8 @@
1
- # Generated by Django 5.2.12 on 2026-04-02 23:17
2
 
3
  import django.contrib.postgres.fields
4
  import django.db.models.deletion
 
5
  from django.db import migrations, models
6
 
7
 
@@ -10,6 +11,7 @@ class Migration(migrations.Migration):
10
  initial = True
11
 
12
  dependencies = [
 
13
  ]
14
 
15
  operations = [
@@ -17,15 +19,14 @@ class Migration(migrations.Migration):
17
  name='ChatSession',
18
  fields=[
19
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
20
- ('user_id', models.BigIntegerField()),
21
  ('chat_name', models.CharField(default='Nuova Chat', max_length=255)),
22
  ('language', models.CharField(default='English', max_length=100)),
23
  ('character_bio', models.TextField(default='A friendly tutor')),
24
  ('summary', models.TextField(blank=True, null=True)),
25
  ('mcp_tools', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=200), blank=True, default=list, size=None)),
26
  ('telegram_thread_id', models.BigIntegerField(blank=True, null=True)),
27
- ('image', models.ImageField(blank=True, null=True, upload_to='chat_avatars/')),
28
  ('created_at', models.DateTimeField(auto_now_add=True)),
 
29
  ],
30
  options={
31
  'db_table': 'chat_sessions',
@@ -44,4 +45,14 @@ class Migration(migrations.Migration):
44
  'db_table': 'pending_messages',
45
  },
46
  ),
 
 
 
 
 
 
 
 
 
 
47
  ]
 
1
+ # Generated by Django 5.2.12 on 2026-04-03 00:08
2
 
3
  import django.contrib.postgres.fields
4
  import django.db.models.deletion
5
+ from django.conf import settings
6
  from django.db import migrations, models
7
 
8
 
 
11
  initial = True
12
 
13
  dependencies = [
14
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
15
  ]
16
 
17
  operations = [
 
19
  name='ChatSession',
20
  fields=[
21
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 
22
  ('chat_name', models.CharField(default='Nuova Chat', max_length=255)),
23
  ('language', models.CharField(default='English', max_length=100)),
24
  ('character_bio', models.TextField(default='A friendly tutor')),
25
  ('summary', models.TextField(blank=True, null=True)),
26
  ('mcp_tools', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=200), blank=True, default=list, size=None)),
27
  ('telegram_thread_id', models.BigIntegerField(blank=True, null=True)),
 
28
  ('created_at', models.DateTimeField(auto_now_add=True)),
29
+ ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='chats', to=settings.AUTH_USER_MODEL)),
30
  ],
31
  options={
32
  'db_table': 'chat_sessions',
 
45
  'db_table': 'pending_messages',
46
  },
47
  ),
48
+ migrations.CreateModel(
49
+ name='UserProfile',
50
+ fields=[
51
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
52
+ ('global_bio', models.TextField(default='A friendly tutor')),
53
+ ('global_language', models.CharField(default='English', max_length=100)),
54
+ ('global_mcp_tools', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=200), blank=True, default=list, size=None)),
55
+ ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='profile', to=settings.AUTH_USER_MODEL)),
56
+ ],
57
+ ),
58
  ]
web/migrations/__pycache__/0001_initial.cpython-310.pyc CHANGED
Binary files a/web/migrations/__pycache__/0001_initial.cpython-310.pyc and b/web/migrations/__pycache__/0001_initial.cpython-310.pyc differ
 
web/migrations/__pycache__/__init__.cpython-310.pyc CHANGED
Binary files a/web/migrations/__pycache__/__init__.cpython-310.pyc and b/web/migrations/__pycache__/__init__.cpython-310.pyc differ
 
web/views.py CHANGED
@@ -7,7 +7,7 @@ from django.shortcuts import render, get_object_or_404, redirect
7
  from django.http import JsonResponse, HttpResponse
8
  from django.views.decorators.csrf import csrf_exempt
9
  from django.conf import settings
10
- from .models import ChatSession, PendingMessage
11
  from huggingface_hub import InferenceClient
12
  from urllib.parse import parse_qs
13
 
@@ -37,16 +37,22 @@ from django.contrib.auth import login, authenticate
37
  from django.contrib.auth.models import User
38
  from django.contrib.auth.decorators import login_required
39
 
 
 
40
  def get_or_create_tg_user(user_data):
41
  """
42
  Sincronizza l'utente Telegram con il DB Django.
43
  """
44
  username = f"tg_{user_data['id']}"
45
- user, created = User.objects.get_or_create(username=username)
46
- if created:
47
- user.first_name = user_data.get('first_name', '')
48
- user.last_name = user_data.get('last_name', '')
49
- user.save()
 
 
 
 
50
 
51
  # Ensure profile exists
52
  UserProfile.objects.get_or_create(user=user)
@@ -54,8 +60,7 @@ def get_or_create_tg_user(user_data):
54
 
55
  def ensure_user_session(request):
56
  """
57
- Esegue il login automatico se ci sono i dati di Telegram,
58
- altrimenti ritorna il request.user corrente.
59
  """
60
  if request.user.is_authenticated:
61
  return request.user
@@ -69,8 +74,15 @@ def ensure_user_session(request):
69
  return user
70
 
71
  if settings.DEBUG:
72
- # Per test locale
73
- user, _ = User.objects.get_or_create(username="test_user", first_name="Dev")
 
 
 
 
 
 
 
74
  UserProfile.objects.get_or_create(user=user)
75
  login(request, user)
76
  return user
@@ -78,11 +90,16 @@ def ensure_user_session(request):
78
  return None
79
 
80
  def login_page(request):
81
- """Semplice login manuale per test via browser"""
82
  if request.method == 'POST':
83
  username = request.POST.get('username')
84
  if username:
85
- user, _ = User.objects.get_or_create(username=username)
 
 
 
 
 
 
86
  UserProfile.objects.get_or_create(user=user)
87
  login(request, user)
88
  return redirect('index')
 
7
  from django.http import JsonResponse, HttpResponse
8
  from django.views.decorators.csrf import csrf_exempt
9
  from django.conf import settings
10
+ from .models import ChatSession, PendingMessage, UserProfile
11
  from huggingface_hub import InferenceClient
12
  from urllib.parse import parse_qs
13
 
 
37
  from django.contrib.auth.models import User
38
  from django.contrib.auth.decorators import login_required
39
 
40
+ from django.utils import timezone
41
+
42
  def get_or_create_tg_user(user_data):
43
  """
44
  Sincronizza l'utente Telegram con il DB Django.
45
  """
46
  username = f"tg_{user_data['id']}"
47
+ user = User.objects.filter(username=username).first()
48
+ if not user:
49
+ user = User.objects.create(
50
+ username=username,
51
+ first_name=user_data.get('first_name', ''),
52
+ last_name=user_data.get('last_name', ''),
53
+ last_login=timezone.now(),
54
+ date_joined=timezone.now()
55
+ )
56
 
57
  # Ensure profile exists
58
  UserProfile.objects.get_or_create(user=user)
 
60
 
61
  def ensure_user_session(request):
62
  """
63
+ Esegue il login automatico se ci sono i dati di Telegram o debug.
 
64
  """
65
  if request.user.is_authenticated:
66
  return request.user
 
74
  return user
75
 
76
  if settings.DEBUG:
77
+ username = "test_user"
78
+ user = User.objects.filter(username=username).first()
79
+ if not user:
80
+ user = User.objects.create(
81
+ username=username,
82
+ first_name="Dev",
83
+ last_login=timezone.now(),
84
+ date_joined=timezone.now()
85
+ )
86
  UserProfile.objects.get_or_create(user=user)
87
  login(request, user)
88
  return user
 
90
  return None
91
 
92
  def login_page(request):
 
93
  if request.method == 'POST':
94
  username = request.POST.get('username')
95
  if username:
96
+ user = User.objects.filter(username=username).first()
97
+ if not user:
98
+ user = User.objects.create(
99
+ username=username,
100
+ last_login=timezone.now(),
101
+ date_joined=timezone.now()
102
+ )
103
  UserProfile.objects.get_or_create(user=user)
104
  login(request, user)
105
  return redirect('index')