From b4545d6c9958da4bf4d9d6d2874ba99bb508bee7 Mon Sep 17 00:00:00 2001 From: pierregeeraert Date: Tue, 30 Jun 2026 13:20:40 +0100 Subject: [PATCH] Add telegram_communication app with dedicated DB routing - Register TelegramCommunicationConfig in INSTALLED_APPS and add telegram_db to DATABASES - Define TelegramData model mapped to the messages table - Fix allow_migrate in ProjectDatabaseRouter: redirect and telegram entries were returning the DB name string (always truthy) instead of a boolean comparison, causing their migrations to bleed into every database - Add telegram routing to db_for_read, db_for_write, allow_relation, and allow_migrate Co-Authored-By: Claude Sonnet 4.6 --- .../apps/telegram_communication/apps.py | 3 +- .../migrations/0001_initial.py | 28 ++++++++++++++++ ...002_alter_telegramdata_chat_id_and_more.py | 33 +++++++++++++++++++ .../apps/telegram_communication/models.py | 11 ++++++- django_code/core/routers.py | 14 +++++--- django_code/core/settings.py | 9 +++++ django_code/manage.py | 0 7 files changed, 92 insertions(+), 6 deletions(-) create mode 100644 django_code/apps/telegram_communication/migrations/0001_initial.py create mode 100644 django_code/apps/telegram_communication/migrations/0002_alter_telegramdata_chat_id_and_more.py mode change 100755 => 100644 django_code/manage.py diff --git a/django_code/apps/telegram_communication/apps.py b/django_code/apps/telegram_communication/apps.py index 8d6cb75..b515c36 100644 --- a/django_code/apps/telegram_communication/apps.py +++ b/django_code/apps/telegram_communication/apps.py @@ -3,4 +3,5 @@ from django.apps import AppConfig class TelegramCommunicationConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' - name = 'telegram_communication' + name = 'apps.telegram_communication' + label = 'telegram' diff --git a/django_code/apps/telegram_communication/migrations/0001_initial.py b/django_code/apps/telegram_communication/migrations/0001_initial.py new file mode 100644 index 0000000..aad837b --- /dev/null +++ b/django_code/apps/telegram_communication/migrations/0001_initial.py @@ -0,0 +1,28 @@ +# Generated by Django 4.2.30 on 2026-06-30 12:13 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='TelegramData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('message_id', models.IntegerField(max_length=100, null=True)), + ('chat_id', models.IntegerField(max_length=100, null=True)), + ('description', models.CharField(max_length=100, null=True)), + ('creation_date', models.DateField(blank=True, null=True, verbose_name='Published')), + ('expiration_date', models.DateField(blank=True, null=True, verbose_name='Published')), + ], + options={ + 'db_table': 'messages', + }, + ), + ] diff --git a/django_code/apps/telegram_communication/migrations/0002_alter_telegramdata_chat_id_and_more.py b/django_code/apps/telegram_communication/migrations/0002_alter_telegramdata_chat_id_and_more.py new file mode 100644 index 0000000..564ed8a --- /dev/null +++ b/django_code/apps/telegram_communication/migrations/0002_alter_telegramdata_chat_id_and_more.py @@ -0,0 +1,33 @@ +# Generated by Django 4.2.30 on 2026-06-30 12:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('telegram', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='telegramdata', + name='chat_id', + field=models.IntegerField(), + ), + migrations.AlterField( + model_name='telegramdata', + name='creation_date', + field=models.DateField(blank=True, verbose_name='Published'), + ), + migrations.AlterField( + model_name='telegramdata', + name='expiration_date', + field=models.DateField(blank=True, verbose_name='Published'), + ), + migrations.AlterField( + model_name='telegramdata', + name='message_id', + field=models.IntegerField(), + ), + ] diff --git a/django_code/apps/telegram_communication/models.py b/django_code/apps/telegram_communication/models.py index 71a8362..20fc223 100644 --- a/django_code/apps/telegram_communication/models.py +++ b/django_code/apps/telegram_communication/models.py @@ -1,3 +1,12 @@ from django.db import models -# Create your models here. + +class TelegramData(models.Model): + message_id = models.IntegerField(null=False) + chat_id = models.IntegerField(null=False) + description = models.CharField(max_length=100, null=True) + creation_date = models.DateField(blank=True, null=False, verbose_name='Published') + expiration_date = models.DateField(blank=True, null=False, verbose_name='Published') + class Meta: + db_table = 'messages' + diff --git a/django_code/core/routers.py b/django_code/core/routers.py index f0d36f1..d41b9cb 100644 --- a/django_code/core/routers.py +++ b/django_code/core/routers.py @@ -16,6 +16,8 @@ class ProjectDatabaseRouter: return 'redirect_db' if model._meta.app_label == 'cloudmanager': return 'cloudmanager_db' + if model._meta.app_label == 'telegram': + return 'telegram_db' return 'default' def db_for_write(self, model, **hints): @@ -28,14 +30,16 @@ class ProjectDatabaseRouter: return 'cloudmanager_db' if model._meta.app_label == 'redirect': return 'redirect_db' + if model._meta.app_label == 'telegram': + return 'telegram_db' return 'default' def allow_relation(self, obj1, obj2, **hints): """Allow relations if both models are in the same database.""" # Prevents accidental foreign key relationships across different physical DBs if ( - obj1._meta.app_label in ['simpsons', 'cloudmanager','redirect','job'] or - obj2._meta.app_label in ['simpsons', 'cloudmanager','redirect','job'] + obj1._meta.app_label in ['simpsons', 'cloudmanager','redirect','job','telegram'] or + obj2._meta.app_label in ['simpsons', 'cloudmanager','redirect','job','telegram'] ): return obj1._meta.app_label == obj2._meta.app_label return None @@ -49,9 +53,11 @@ class ProjectDatabaseRouter: if app_label == 'cloudmanager': return db == 'cloudmanager_db' if app_label == 'redirect': - return 'redirect_db' + return db == 'redirect_db' + if app_label == 'telegram': + return db == 'telegram_db' # Ensure default Django apps (auth, sessions, etc.) don't migrate into simpsons/cloudmanager - if db in ['simpsons_db', 'cloudmanager_db','redirect_db','job_db']: + if db in ['simpsons_db', 'cloudmanager_db','redirect_db','job_db','telegram_db']: return False return None \ No newline at end of file diff --git a/django_code/core/settings.py b/django_code/core/settings.py index 3ce4102..945343d 100644 --- a/django_code/core/settings.py +++ b/django_code/core/settings.py @@ -47,6 +47,7 @@ INSTALLED_APPS = [ 'apps.random_simpsons.apps.RandomSimpsonsConfig', 'apps.website_redirection.apps.redirectConfig', 'apps.job_dashboard.apps.JobDashboardConfig', + 'apps.telegram_communication.apps.TelegramCommunicationConfig', 'import_export', ] @@ -133,6 +134,14 @@ DATABASES = { 'HOST': os.environ.get('DB_HOST'), 'PORT': os.environ.get('DB_PORT'), }, + 'telegram_db': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': 'telegram', + 'USER': os.environ.get('DB_USERNAME'), + 'PASSWORD': os.environ.get('DB_PASSWORD'), + 'HOST': os.environ.get('DB_HOST'), + 'PORT': os.environ.get('DB_PORT'), + }, } DATABASE_ROUTERS = ['core.routers.ProjectDatabaseRouter'] #DATABASE_ROUTERS = [] diff --git a/django_code/manage.py b/django_code/manage.py old mode 100755 new mode 100644