diff --git a/hotels/migrations/0003_alter_hotel_options_alter_userhotel_options_and_more.py b/hotels/migrations/0003_alter_hotel_options_alter_userhotel_options_and_more.py new file mode 100644 index 00000000..f989f535 --- /dev/null +++ b/hotels/migrations/0003_alter_hotel_options_alter_userhotel_options_and_more.py @@ -0,0 +1,58 @@ +# Generated by Django 5.1.4 on 2024-12-06 04:26 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('hotels', '0002_initial'), + ('users', '0004_alter_user_options_alter_userconfirmation_options_and_more'), + ] + + operations = [ + migrations.AlterModelOptions( + name='hotel', + options={'verbose_name': 'Отель', 'verbose_name_plural': 'Отели'}, + ), + migrations.AlterModelOptions( + name='userhotel', + options={'verbose_name': 'Пользователь отеля', 'verbose_name_plural': 'Пользователи отелей'}, + ), + migrations.AlterField( + model_name='hotel', + name='api_key', + field=models.CharField(blank=True, max_length=255, null=True, verbose_name='API ключ'), + ), + migrations.AlterField( + model_name='hotel', + name='created_at', + field=models.DateTimeField(auto_now_add=True, verbose_name='Создан'), + ), + migrations.AlterField( + model_name='hotel', + name='name', + field=models.CharField(max_length=255, verbose_name='Название отеля'), + ), + migrations.AlterField( + model_name='hotel', + name='pms_type', + field=models.CharField(choices=[('bnovo', 'Bnovo'), ('travelline', 'Travel Line')], max_length=50, verbose_name='PMS система'), + ), + migrations.AlterField( + model_name='hotel', + name='public_key', + field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Публичный ключ'), + ), + migrations.AlterField( + model_name='userhotel', + name='hotel', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='hotels.hotel', verbose_name='Отель'), + ), + migrations.AlterField( + model_name='userhotel', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.user', verbose_name='Пользователь'), + ), + ] diff --git a/users/management/commands/import_user_activity_log.py b/users/management/commands/import_user_activity_log.py new file mode 100644 index 00000000..cd9821cc --- /dev/null +++ b/users/management/commands/import_user_activity_log.py @@ -0,0 +1,50 @@ +from django.core.management.base import BaseCommand +from users.models import UserActivityLog +from asgiref.sync import sync_to_async +from django.db import connections + +class Command(BaseCommand): + help = "Импорт данных из таблицы wpts_user_activity_log в локальную базу" + + def handle(self, *args, **kwargs): + self.stdout.write("Начало импорта данных...") + + try: + # Подключение к основной базе данных (wordpress) + with connections['wordpress'].cursor() as cursor: + cursor.execute("SELECT * FROM wpts_user_activity_log") + rows = cursor.fetchall() + + # Сохранение данных в локальной базе + for row in rows: + UserActivityLog.objects.update_or_create( + id=row[0], # Используем поле id как уникальный ключ + defaults={ + 'user_id': row[1], + 'ip': row[2], + 'created': row[3], + 'timestamp': row[4], + 'date_time': row[5], + 'referred': row[6], + 'agent': row[7], + 'platform': row[8], + 'version': row[9], + 'model': row[10], + 'device': row[11], + 'UAString': row[12], + 'location': row[13], + 'page_id': row[14], + 'url_parameters': row[15], + 'page_title': row[16], + 'type': row[17], + 'last_counter': row[18], + 'hits': row[19], + 'honeypot': row[20], + 'reply': row[21], + 'page_url': row[22], + } + ) + + self.stdout.write(self.style.SUCCESS("Импорт завершён успешно!")) + except Exception as e: + self.stderr.write(self.style.ERROR(f"Ошибка импорта: {str(e)}")) diff --git a/users/migrations/0002_localuseractivitylog_useractivitylog.py b/users/migrations/0002_localuseractivitylog_useractivitylog.py new file mode 100644 index 00000000..6cf3698b --- /dev/null +++ b/users/migrations/0002_localuseractivitylog_useractivitylog.py @@ -0,0 +1,56 @@ +# Generated by Django 5.1.4 on 2024-12-06 03:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='LocalUserActivityLog', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('user_id', models.IntegerField()), + ('activity_type', models.CharField(max_length=255)), + ('timestamp', models.DateTimeField()), + ('additional_data', models.JSONField(blank=True, null=True)), + ], + ), + migrations.CreateModel( + name='UserActivityLog', + fields=[ + ('id', models.BigAutoField(primary_key=True, serialize=False)), + ('user_id', models.BigIntegerField()), + ('ip', models.CharField(blank=True, max_length=100, null=True)), + ('created', models.DateTimeField(auto_now_add=True)), + ('timestamp', models.IntegerField()), + ('date_time', models.DateTimeField()), + ('referred', models.CharField(blank=True, max_length=255, null=True)), + ('agent', models.CharField(blank=True, max_length=255, null=True)), + ('platform', models.CharField(blank=True, max_length=255, null=True)), + ('version', models.CharField(blank=True, max_length=50, null=True)), + ('model', models.CharField(blank=True, max_length=255, null=True)), + ('device', models.CharField(blank=True, max_length=50, null=True)), + ('UAString', models.TextField(blank=True, null=True)), + ('location', models.CharField(blank=True, max_length=255, null=True)), + ('page_id', models.BigIntegerField(blank=True, null=True)), + ('url_parameters', models.TextField(blank=True, null=True)), + ('page_title', models.CharField(blank=True, max_length=255, null=True)), + ('type', models.CharField(blank=True, max_length=50, null=True)), + ('last_counter', models.IntegerField(blank=True, null=True)), + ('hits', models.IntegerField(blank=True, null=True)), + ('honeypot', models.BooleanField(blank=True, null=True)), + ('reply', models.BooleanField(blank=True, null=True)), + ('page_url', models.CharField(blank=True, max_length=255, null=True)), + ], + options={ + 'verbose_name': 'User Activity Log', + 'verbose_name_plural': 'User Activity Logs', + 'db_table': 'user_activity_log', + }, + ), + ] diff --git a/users/migrations/0003_alter_useractivitylog_options_alter_user_confirmed_and_more.py b/users/migrations/0003_alter_useractivitylog_options_alter_user_confirmed_and_more.py new file mode 100644 index 00000000..15c26425 --- /dev/null +++ b/users/migrations/0003_alter_useractivitylog_options_alter_user_confirmed_and_more.py @@ -0,0 +1,44 @@ +# Generated by Django 5.1.4 on 2024-12-06 04:14 + +import django.db.models.deletion +import uuid +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0002_localuseractivitylog_useractivitylog'), + ] + + operations = [ + migrations.AlterModelOptions( + name='useractivitylog', + options={'verbose_name': 'Журнал активности', 'verbose_name_plural': 'Журналы активности'}, + ), + migrations.AlterField( + model_name='user', + name='confirmed', + field=models.BooleanField(default=False, verbose_name='Подтвержден'), + ), + migrations.AlterField( + model_name='user', + name='role', + field=models.CharField(choices=[('admin', 'Администратор системы'), ('hotel_user', 'Сотрудник отеля')], default='hotel_user', max_length=20, verbose_name='Роль'), + ), + migrations.AlterField( + model_name='userconfirmation', + name='confirmation_code', + field=models.UUIDField(default=uuid.uuid4, verbose_name='Код подтверждения'), + ), + migrations.AlterField( + model_name='userconfirmation', + name='created_at', + field=models.DateTimeField(auto_now_add=True, verbose_name='Создан: '), + ), + migrations.AlterField( + model_name='userconfirmation', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.user', verbose_name='Пользователь'), + ), + ] diff --git a/users/migrations/0004_alter_user_options_alter_userconfirmation_options_and_more.py b/users/migrations/0004_alter_user_options_alter_userconfirmation_options_and_more.py new file mode 100644 index 00000000..a890fc39 --- /dev/null +++ b/users/migrations/0004_alter_user_options_alter_userconfirmation_options_and_more.py @@ -0,0 +1,66 @@ +# Generated by Django 5.1.4 on 2024-12-06 04:26 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0003_alter_useractivitylog_options_alter_user_confirmed_and_more'), + ] + + operations = [ + migrations.AlterModelOptions( + name='user', + options={'verbose_name': 'Пользователь', 'verbose_name_plural': 'Пользователи'}, + ), + migrations.AlterModelOptions( + name='userconfirmation', + options={'verbose_name': 'Подтверждение пользователя', 'verbose_name_plural': 'Подтверждения пользователей'}, + ), + migrations.AlterField( + model_name='user', + name='chat_id', + field=models.BigIntegerField(blank=True, null=True, unique=True, verbose_name='ID чата в телеграм'), + ), + migrations.AlterField( + model_name='user', + name='telegram_id', + field=models.BigIntegerField(blank=True, null=True, unique=True, verbose_name='ID Телеграм'), + ), + migrations.AlterField( + model_name='useractivitylog', + name='agent', + field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Браузер'), + ), + migrations.AlterField( + model_name='useractivitylog', + name='created', + field=models.DateTimeField(auto_now_add=True, verbose_name='Создан'), + ), + migrations.AlterField( + model_name='useractivitylog', + name='date_time', + field=models.DateTimeField(verbose_name='Дата'), + ), + migrations.AlterField( + model_name='useractivitylog', + name='id', + field=models.BigAutoField(primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='useractivitylog', + name='ip', + field=models.CharField(blank=True, max_length=100, null=True, verbose_name='IP адрес'), + ), + migrations.AlterField( + model_name='useractivitylog', + name='timestamp', + field=models.IntegerField(verbose_name='Время'), + ), + migrations.AlterField( + model_name='useractivitylog', + name='user_id', + field=models.BigIntegerField(verbose_name='ID пользователя'), + ), + ]