from django.db import models from users.models import User class PMSConfiguration(models.Model): name = models.CharField(max_length=255, verbose_name="Название PMS") parser_settings = models.JSONField(default=dict, verbose_name="Настройки разбора данных") description = models.TextField(blank=True, null=True, verbose_name="Описание") created_at = models.DateTimeField(auto_now_add=True, verbose_name="Дата создания") def __str__(self): return self.name class Meta: verbose_name = "PMS система" verbose_name_plural = "PMS системы" class APIConfiguration(models.Model): name = models.CharField(max_length=255, verbose_name="Название API") url = models.URLField(verbose_name="URL API") token = models.CharField(max_length=255, blank=True, null=True, verbose_name="Токен") username = models.CharField(max_length=255, blank=True, null=True, verbose_name="Логин") password = models.CharField(max_length=255, blank=True, null=True, verbose_name="Пароль") last_updated = models.DateTimeField(auto_now=True, verbose_name="Дата последнего обновления") def __str__(self): return self.name class Meta: verbose_name = "Конфигурация API" verbose_name_plural = "Конфигурации API" class Hotel(models.Model): name = models.CharField(max_length=255, verbose_name="Название отеля") api = models.OneToOneField( APIConfiguration, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="API", help_text="API, связанный с этим отелем." ) created_at = models.DateTimeField(auto_now_add=True, verbose_name="Создан") pms = models.ForeignKey(PMSConfiguration, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="PMS система") def __str__(self): return self.name class Meta: verbose_name = "Отель" verbose_name_plural = "Отели" class PMSIntegrationLog(models.Model): hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE, verbose_name="Отель") checked_at = models.DateTimeField(auto_now_add=True, verbose_name="Время проверки") status = models.CharField(max_length=50, verbose_name="Статус", choices=[('success', 'Успех'), ('error', 'Ошибка')]) message = models.TextField(verbose_name="Сообщение", blank=True, null=True) def __str__(self): return f"{self.hotel.name} - {self.status} - {self.checked_at}" class Meta: verbose_name = "Журнал интеграции PMS" verbose_name_plural = "Журналы интеграции PMS" indexes = [ models.Index(fields=['hotel']), models.Index(fields=['checked_at']), models.Index(fields=['status']), ] class UserHotel(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="Пользователь") hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE, verbose_name="Отель") def __str__(self): return f"{self.user.username} - {self.hotel.name}" class Meta: verbose_name = "Пользователь отеля" verbose_name_plural = "Пользователи отелей" from django.db import models class APIRequestLog(models.Model): api = models.ForeignKey(APIConfiguration, on_delete=models.CASCADE, verbose_name="API") request_time = models.DateTimeField(auto_now_add=True, verbose_name="Время запроса") response_status = models.IntegerField(verbose_name="HTTP статус ответа") response_data = models.JSONField(verbose_name="Данные ответа", blank=True, null=True) def __str__(self): return f"{self.api.name} - {self.request_time}" class Meta: verbose_name = "Журнал запросов API" verbose_name_plural = "Журналы запросов API" indexes = [ models.Index(fields=['api']), models.Index(fields=['request_time']), ] from django.db import models