RealtyCalendar plugin
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
import logging
|
||||
from datetime import timedelta
|
||||
from urllib.parse import parse_qs
|
||||
from django.utils import timezone
|
||||
@@ -7,8 +6,8 @@ from hotels.models import Reservation, Hotel
|
||||
from .models import UserActivityLog, ViolationLog
|
||||
from touchh.utils.log import CustomLogger
|
||||
# Настройка логирования
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger(__name__)
|
||||
logger = CustomLogger(__name__).get_logger()
|
||||
|
||||
|
||||
class ReservationChecker:
|
||||
"""
|
||||
|
||||
@@ -202,63 +202,56 @@ class DataSyncManager:
|
||||
self.logger.error(f"Error fetching data: {e}")
|
||||
return []
|
||||
def update_sync_log(self, hotel, recieved_records, processed_records):
|
||||
"""
|
||||
Обновляет или создает запись в таблице SyncLog.
|
||||
"""
|
||||
try:
|
||||
log, created = SyncLog.objects.get_or_create(hotel=hotel)
|
||||
log, created = SyncLog.objects.update_or_create(
|
||||
hotel=hotel,
|
||||
defaults={
|
||||
"recieved_records": recieved_records,
|
||||
"processed_records": processed_records,
|
||||
"created": timezone.now(), # Убедитесь, что дата обновляется
|
||||
}
|
||||
)
|
||||
if created:
|
||||
log.recieved_records = recieved_records
|
||||
log.processed_records = processed_records
|
||||
self.logger.info(f"Sync log created for hotel '{hotel.name}'.")
|
||||
else:
|
||||
log.recieved_records += recieved_records
|
||||
log.processed_records += processed_records
|
||||
log.save()
|
||||
self.logger.info(f"Sync log updated for hotel '{hotel.name}'.")
|
||||
self.logger.info(f"Sync log updated for hotel '{hotel.name}'.")
|
||||
except Exception as e:
|
||||
self.logger.error(f"Error updating sync log for hotel '{hotel.name}': {e}")
|
||||
|
||||
self.logger.info(f"Attempting to update sync log for hotel: {hotel.name}")
|
||||
self.update_sync_log(hotel, recieved_records, processed_records)
|
||||
|
||||
def process_and_save_data(self, rows):
|
||||
"""
|
||||
Обрабатывает и сохраняет данные из внешнего источника.
|
||||
|
||||
:param rows: Список строк данных, полученных из базы данных.
|
||||
"""
|
||||
seen_entries = set()
|
||||
hotel_processed_counts = {} # Словарь для подсчёта записей по каждому отелю
|
||||
|
||||
for row in rows:
|
||||
# Получение и декодирование URL-параметров
|
||||
url_parameters = row.get("url_parameters")
|
||||
if not url_parameters:
|
||||
self.logger.warning(f"Skipping record with missing URL parameters: {row}")
|
||||
continue
|
||||
|
||||
parsed_params = self.data_processor.parse_url_parameters(url_parameters)
|
||||
hotel_id = parsed_params.get("utm_content") # Извлекаем hotel_id из параметров
|
||||
room_number = parsed_params.get("utm_term") # Извлекаем room_number из параметров
|
||||
|
||||
if not hotel_id or not room_number:
|
||||
self.logger.warning(f"Skipping record with missing data: hotel_id={hotel_id}, room_number={room_number}")
|
||||
continue
|
||||
|
||||
# Проверка на дубликаты
|
||||
if (hotel_id, room_number) in seen_entries:
|
||||
self.logger.warning(f"Duplicate record skipped: hotel_id={hotel_id}, room_number={room_number}")
|
||||
continue
|
||||
|
||||
seen_entries.add((hotel_id, room_number))
|
||||
|
||||
try:
|
||||
# Получение или создание отеля
|
||||
url_parameters = row.get("url_parameters")
|
||||
if not url_parameters:
|
||||
self.logger.warning(f"Skipping record with missing URL parameters: {row}")
|
||||
continue
|
||||
|
||||
parsed_params = self.data_processor.parse_url_parameters(url_parameters)
|
||||
hotel_id = parsed_params.get("utm_content")
|
||||
room_number = parsed_params.get("utm_term")
|
||||
|
||||
if not hotel_id or not room_number:
|
||||
self.logger.warning(f"Skipping record with missing data: hotel_id={hotel_id}, room_number={room_number}")
|
||||
continue
|
||||
|
||||
hotel = self.hotel_manager.get_or_create_hotel(hotel_id, row.get("page_title"))
|
||||
if not hotel:
|
||||
self.logger.warning(f"Skipping record: Failed to create or retrieve hotel with ID {hotel_id}")
|
||||
continue
|
||||
|
||||
# Получение или создание комнаты
|
||||
room = self.hotel_manager.get_or_create_room(hotel, room_number)
|
||||
if not room:
|
||||
self.logger.warning(f"Skipping record: Failed to create or retrieve room {room_number} in hotel {hotel.name}")
|
||||
continue
|
||||
|
||||
# Создание или обновление записи активности пользователя
|
||||
UserActivityLog.objects.update_or_create(
|
||||
external_id=row.get("id"),
|
||||
defaults={
|
||||
@@ -270,14 +263,23 @@ class DataSyncManager:
|
||||
"url_parameters": parsed_params,
|
||||
"page_title": self.data_processor.decode_html_entities(row.get("page_title")) or "Untitled",
|
||||
"page_url": row.get("page_url") or "",
|
||||
"page_id": row.get("page_id") or 0,
|
||||
"hits": row.get("hits") or 0,
|
||||
}
|
||||
)
|
||||
self.logger.info(f"Record ID {row.get('id')} processed successfully.")
|
||||
|
||||
if hotel.id not in hotel_processed_counts:
|
||||
hotel_processed_counts[hotel.id] = {"recieved_records": 0, "processed_records": 0}
|
||||
hotel_processed_counts[hotel.id]["processed_records"] += 1
|
||||
|
||||
except Exception as e:
|
||||
self.logger.error(f"Error processing record ID {row.get('id')}: {e}")
|
||||
|
||||
self.logger.info(f"Data processing completed. Processed {len(seen_entries)} unique records.")
|
||||
for hotel_id, counts in hotel_processed_counts.items():
|
||||
hotel = Hotel.objects.get(id=hotel_id)
|
||||
self.update_sync_log(hotel, recieved_records=len(rows), processed_records=counts["processed_records"])
|
||||
|
||||
|
||||
|
||||
def sync(self):
|
||||
@@ -292,7 +294,8 @@ class DataSyncManager:
|
||||
|
||||
|
||||
def scheduled_sync():
|
||||
logger = CustomLogger(name="DatabaseSyncScheduler", log_level="ERROR").get_logger()
|
||||
import os
|
||||
logger = CustomLogger(name="DatabaseSyncScheduler", log_level=os.getenv("SCHEDULED_SYNC_LOG_LEVEL", default="ERROR")).get_logger()
|
||||
logger.info("Starting scheduled sync.")
|
||||
|
||||
active_db_settings = ExternalDBSettings.objects.filter(is_active=True)
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-12 12:28
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('hotels', '0004_alter_reservation_room_number'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='ExternalDBSettings',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(help_text='Имя подключения для идентификации.', max_length=255, unique=True)),
|
||||
('host', models.CharField(help_text='Адрес сервера базы данных.', max_length=255)),
|
||||
('port', models.PositiveIntegerField(default=3306, help_text='Порт сервера базы данных.')),
|
||||
('database', models.CharField(help_text='Имя базы данных.', max_length=255)),
|
||||
('user', models.CharField(help_text='Имя пользователя базы данных.', max_length=255)),
|
||||
('password', models.CharField(help_text='Пароль для подключения.', max_length=255)),
|
||||
('table_name', models.CharField(blank=True, help_text='Имя таблицы для загрузки данных.', max_length=255, null=True)),
|
||||
('selected_fields', models.TextField(blank=True, help_text='Список полей для загрузки (через запятую).', null=True)),
|
||||
('is_active', models.BooleanField(default=True, help_text='Флаг активности подключения.')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Настройки подключения к БД',
|
||||
'verbose_name_plural': 'Настройки подключений к БД',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserActivityLog',
|
||||
fields=[
|
||||
('id', models.BigIntegerField(primary_key=True, serialize=False)),
|
||||
('user_id', models.BigIntegerField(verbose_name='ID пользователя')),
|
||||
('ip', models.GenericIPAddressField(verbose_name='IP-адрес')),
|
||||
('created', models.DateTimeField(verbose_name='Дата создания')),
|
||||
('timestamp', models.BigIntegerField(verbose_name='Метка времени')),
|
||||
('date_time', models.DateTimeField(verbose_name='Дата и время')),
|
||||
('referred', models.TextField(blank=True, null=True, verbose_name='Реферальная ссылка')),
|
||||
('agent', models.TextField(verbose_name='Агент пользователя')),
|
||||
('platform', models.CharField(blank=True, max_length=255, null=True, verbose_name='Платформа')),
|
||||
('version', models.CharField(blank=True, max_length=255, null=True, verbose_name='Версия')),
|
||||
('model', models.CharField(blank=True, max_length=255, null=True, verbose_name='Модель устройства')),
|
||||
('device', models.CharField(blank=True, max_length=255, null=True, verbose_name='Тип устройства')),
|
||||
('UAString', models.TextField(verbose_name='User-Agent строка')),
|
||||
('location', models.CharField(blank=True, max_length=255, null=True, verbose_name='Местоположение')),
|
||||
('page_id', models.BigIntegerField(blank=True, null=True, verbose_name='ID страницы')),
|
||||
('url_parameters', models.TextField(blank=True, null=True, verbose_name='Параметры URL')),
|
||||
('page_title', models.TextField(blank=True, null=True, verbose_name='Заголовок страницы')),
|
||||
('type', models.CharField(max_length=50, verbose_name='Тип')),
|
||||
('last_counter', models.IntegerField(verbose_name='Последний счетчик')),
|
||||
('hits', models.IntegerField(verbose_name='Количество обращений')),
|
||||
('honeypot', models.BooleanField(verbose_name='Метка honeypot')),
|
||||
('reply', models.BooleanField(verbose_name='Ответ пользователя')),
|
||||
('page_url', models.URLField(blank=True, null=True, verbose_name='URL страницы')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Регистрация посетителей',
|
||||
'verbose_name_plural': 'Регистрации посетителей',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='RoomDiscrepancy',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('room_number', models.CharField(max_length=50, verbose_name='Номер комнаты')),
|
||||
('booking_id', models.CharField(max_length=255, verbose_name='ID бронирования')),
|
||||
('check_in_date_expected', models.DateField(verbose_name='Ожидаемая дата заселения')),
|
||||
('check_in_date_actual', models.DateField(verbose_name='Фактическая дата заселения')),
|
||||
('discrepancy_type', models.CharField(choices=[('early', 'Раннее заселение'), ('late', 'Позднее заселение'), ('missed', 'Неявка')], max_length=50, verbose_name='Тип несоответствия')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')),
|
||||
('hotel', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='hotels.hotel', verbose_name='Отель')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Несовпадение в заселении',
|
||||
'verbose_name_plural': 'Несовпадения в заселении',
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,42 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-12 13:07
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('antifroud', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='externaldbsettings',
|
||||
name='database',
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='externaldbsettings',
|
||||
name='host',
|
||||
field=models.CharField(default='', help_text='Адрес сервера базы данных.', max_length=255),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='externaldbsettings',
|
||||
name='is_active',
|
||||
field=models.BooleanField(default=False, help_text='Флаг активности подключения.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='externaldbsettings',
|
||||
name='name',
|
||||
field=models.CharField(default='Новая настройка', help_text='Имя подключения для идентификации.', max_length=255, unique=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='externaldbsettings',
|
||||
name='password',
|
||||
field=models.CharField(default='', help_text='Пароль для подключения.', max_length=255),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='externaldbsettings',
|
||||
name='user',
|
||||
field=models.CharField(default='', help_text='Имя пользователя базы данных.', max_length=255),
|
||||
),
|
||||
]
|
||||
@@ -1,43 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-12 13:10
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('antifroud', '0002_remove_externaldbsettings_database_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='externaldbsettings',
|
||||
name='database',
|
||||
field=models.CharField(default='', help_text='Имя базы данных.', max_length=255),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='externaldbsettings',
|
||||
name='host',
|
||||
field=models.CharField(help_text='Адрес сервера базы данных.', max_length=255),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='externaldbsettings',
|
||||
name='is_active',
|
||||
field=models.BooleanField(default=True, help_text='Флаг активности подключения.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='externaldbsettings',
|
||||
name='name',
|
||||
field=models.CharField(help_text='Имя подключения для идентификации.', max_length=255, unique=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='externaldbsettings',
|
||||
name='password',
|
||||
field=models.CharField(help_text='Пароль для подключения.', max_length=255),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='externaldbsettings',
|
||||
name='user',
|
||||
field=models.CharField(help_text='Имя пользователя базы данных.', max_length=255),
|
||||
),
|
||||
]
|
||||
@@ -1,27 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-12 14:42
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('antifroud', '0003_externaldbsettings_database_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='externaldbsettings',
|
||||
options={'verbose_name': 'Настройка подключения к БД', 'verbose_name_plural': 'Настройки подключений к БД'},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='externaldbsettings',
|
||||
name='database',
|
||||
field=models.CharField(default='u1510415_wp832', help_text='Имя базы данных.', max_length=255),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='externaldbsettings',
|
||||
name='table_name',
|
||||
field=models.CharField(blank=True, default='wpts_user_activity_log', help_text='Имя таблицы для загрузки данных.', max_length=255, null=True),
|
||||
),
|
||||
]
|
||||
@@ -1,24 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-12 23:57
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('antifroud', '0004_alter_externaldbsettings_options_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='ImportedHotel',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('external_id', models.CharField(max_length=255, unique=True, verbose_name='Внешний ID отеля')),
|
||||
('name', models.CharField(max_length=255, verbose_name='Имя отеля')),
|
||||
('created', models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')),
|
||||
('updated', models.DateTimeField(auto_now=True, verbose_name='Дата обновления')),
|
||||
('imported', models.BooleanField(default=False, verbose_name='Импортирован в основную базу')),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -1,17 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-12 23:58
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('antifroud', '0005_importedhotel'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='importedhotel',
|
||||
options={'verbose_name': 'Импортированный отель', 'verbose_name_plural': 'Импортированные отели'},
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-13 00:03
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('antifroud', '0006_alter_importedhotel_options'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='useractivitylog',
|
||||
name='external_id',
|
||||
field=models.CharField(blank=True, max_length=255, null=True),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-13 00:09
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('antifroud', '0007_useractivitylog_external_id'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='id',
|
||||
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-13 00:32
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('antifroud', '0008_alter_useractivitylog_id'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='importedhotel',
|
||||
name='display_name',
|
||||
field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Отображаемое имя'),
|
||||
),
|
||||
]
|
||||
@@ -1,30 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-14 04:29
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('antifroud', '0009_importedhotel_display_name'),
|
||||
('hotels', '0010_alter_hotel_timezone'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='SyncLog',
|
||||
fields=[
|
||||
('id', models.BigIntegerField(primary_key=True, serialize=False, unique=True, verbose_name='ID')),
|
||||
('created', models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')),
|
||||
('recieved_records', models.IntegerField(verbose_name='Полученные записи')),
|
||||
('processed_records', models.IntegerField(verbose_name='Обработанные записи')),
|
||||
('hotel', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='hotels.hotel', verbose_name='Отель')),
|
||||
('reservation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='hotels.reservation', verbose_name='Бронирование')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Журнал синхронизации',
|
||||
'verbose_name_plural': 'Журналы синхронизации',
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-14 06:13
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('antifroud', '0010_synclog'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='importedhotel',
|
||||
name='external_id',
|
||||
field=models.CharField(max_length=255, verbose_name='Внешний ID отеля'),
|
||||
),
|
||||
]
|
||||
@@ -1,31 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-16 23:37
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('antifroud', '0011_alter_importedhotel_external_id'),
|
||||
('hotels', '0010_alter_hotel_timezone'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='ViolationLog',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('room_number', models.CharField(blank=True, max_length=50, null=True, verbose_name='Номер комнаты')),
|
||||
('violation_type', models.CharField(choices=[('missed', 'Неявка'), ('early', 'Раннее заселение'), ('late', 'Позднее заселение')], max_length=50, verbose_name='Тип нарушения')),
|
||||
('violation_details', models.TextField(blank=True, null=True, verbose_name='Детали нарушения')),
|
||||
('detected_at', models.DateTimeField(auto_now_add=True, verbose_name='Дата обнаружения')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')),
|
||||
('hotel', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='hotels.hotel', verbose_name='Отель')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Журнал нарушений',
|
||||
'verbose_name_plural': 'Журналы нарушений',
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-17 03:23
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('antifroud', '0012_violationlog'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='timestamp',
|
||||
field=models.BigIntegerField(blank=True, null=True, verbose_name='Метка времени'),
|
||||
),
|
||||
]
|
||||
@@ -1,68 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-17 03:26
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('antifroud', '0013_alter_useractivitylog_timestamp'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='UAString',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='User-Agent строка'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='agent',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='Агент пользователя'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='created',
|
||||
field=models.DateTimeField(blank=True, null=True, verbose_name='Дата создания'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='date_time',
|
||||
field=models.DateTimeField(blank=True, null=True, verbose_name='Дата и время'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='hits',
|
||||
field=models.IntegerField(blank=True, null=True, verbose_name='Количество обращений'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='honeypot',
|
||||
field=models.BooleanField(blank=True, null=True, verbose_name='Метка honeypot'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='ip',
|
||||
field=models.GenericIPAddressField(blank=True, null=True, verbose_name='IP-адрес'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='last_counter',
|
||||
field=models.IntegerField(blank=True, null=True, verbose_name='Последний счетчик'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='reply',
|
||||
field=models.BooleanField(blank=True, null=True, verbose_name='Ответ пользователя'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='type',
|
||||
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='Тип'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='user_id',
|
||||
field=models.BigIntegerField(blank=True, null=True, verbose_name='ID пользователя'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-17 04:49
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('antifroud', '0014_alter_useractivitylog_uastring_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='page_id',
|
||||
field=models.CharField(blank=True, max_length=255, null=True, verbose_name='ID страницы'),
|
||||
),
|
||||
]
|
||||
@@ -1,39 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-17 05:27
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('antifroud', '0015_alter_useractivitylog_page_id'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='created',
|
||||
field=models.DateTimeField(blank=True, db_index=True, null=True, verbose_name='Дата создания'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='external_id',
|
||||
field=models.CharField(db_index=True, default=1, max_length=255, unique=True, verbose_name='Внешний ID'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='ip',
|
||||
field=models.GenericIPAddressField(blank=True, db_index=True, null=True, verbose_name='IP-адрес'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='page_id',
|
||||
field=models.BigIntegerField(blank=True, db_index=True, null=True, verbose_name='ID страницы'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='user_id',
|
||||
field=models.BigIntegerField(blank=True, db_index=True, null=True, verbose_name='ID пользователя'),
|
||||
),
|
||||
]
|
||||
@@ -1,19 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-18 01:13
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('antifroud', '0016_alter_useractivitylog_created_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='violationlog',
|
||||
name='hits',
|
||||
field=models.IntegerField(default=1, verbose_name='Срабатывания'),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
||||
@@ -1,44 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-18 04:46
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('antifroud', '0017_violationlog_hits'),
|
||||
('hotels', '0014_alter_room_number'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='synclog',
|
||||
name='reservation',
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='synclog',
|
||||
name='created',
|
||||
field=models.DateTimeField(auto_now=True, verbose_name='Дата обновления'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='synclog',
|
||||
name='hotel',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='hotels.hotel', unique=True, verbose_name='Отель'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='synclog',
|
||||
name='id',
|
||||
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='synclog',
|
||||
name='processed_records',
|
||||
field=models.IntegerField(default=0, verbose_name='Обработанные записи'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='synclog',
|
||||
name='recieved_records',
|
||||
field=models.IntegerField(default=0, verbose_name='Полученные записи'),
|
||||
),
|
||||
]
|
||||
@@ -1,20 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-18 04:55
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('antifroud', '0018_remove_synclog_reservation_alter_synclog_created_and_more'),
|
||||
('hotels', '0014_alter_room_number'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='synclog',
|
||||
name='hotel',
|
||||
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='hotels.hotel', verbose_name='Отель'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 5.1.4 on 2024-12-18 10:45
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('antifroud', '0019_alter_synclog_hotel'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='useractivitylog',
|
||||
name='hits',
|
||||
field=models.IntegerField(blank=True, default='0', null=True, verbose_name='Количество обращений'),
|
||||
),
|
||||
]
|
||||
Reference in New Issue
Block a user