from django.contrib.auth.models import User from django.db import models import threading import time class Order(models.Model): order_datetime = models.DateTimeField(auto_now_add=True) # Дата и время создания заказа user = models.ForeignKey(User, on_delete=models.CASCADE) # Связь с пользователем order_parameters = models.TextField(default='no parameters') # Параметры заказа file_path = models.CharField(max_length=255, blank=True, null=True) # Путь к файлу order_state = models.CharField(max_length=50, default='wait_confirmation') # Состояние заказа def __str__(self): return f"Order {self.id} for {self.user.username}" class EditRequest(models.Model): req_datetime = models.DateTimeField(auto_now_add=True) # Дата и время создания заказа user = models.ForeignKey(User, on_delete=models.CASCADE) # Связь с пользователем req_parameters = models.TextField(default='no parameters') # Параметры заказа file_path = models.CharField(max_length=255, blank=True, null=True) # Путь к файлу req_state = models.CharField( max_length=50, default='wait_confirmation', choices=[ ('wait_confirmation', 'Ожидание подтверждения'), ('in_progress', 'В работе'), ('ready', 'Готово'), ('error', 'Ошибка'), ] ) # Состояние заказа received_file = models.CharField(max_length=255, blank=True, null=True) # Полученный файл от сервера def __str__(self): return f"Edit Request {self.id} for {self.user.username}" def save(self, *args, **kwargs): # Сохраняем объект is_new = self.pk is None super().save(*args, **kwargs) # Если это новый объект, запускаем фоновую задачу if is_new: threading.Thread(target=self.send_request_to_server, args=(), daemon=True).start() def send_request_to_server(self): # Заглушка для отправки данных на сервер print(f"Начало отправки данных для заявки {self.id}") time.sleep(5) # Симуляция задержки print(f"Данные для заявки {self.id} отправлены на сервер.") class IncomingEditRequest(models.Model): related_request = models.OneToOneField( EditRequest, on_delete=models.CASCADE, related_name='incoming_request' ) # Связь с исходной заявкой response_datetime = models.DateTimeField(auto_now_add=True) # Время получения ответа server_response = models.TextField() # Ответ от сервера result_file_path = models.CharField(max_length=255, blank=True, null=True) # Путь к полученному файлу status = models.CharField( max_length=50, choices=[ ('ready', 'Готово'), ('error', 'Ошибка'), ] ) # Статус результата def __str__(self): return f"Incoming Edit Request for {self.related_request}" class Storage(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) item_name = models.CharField(max_length=255) file_path = models.CharField(max_length=255, default='') description = models.TextField(blank=True) created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return self.item_name class OrderArchive(models.Model): order_datetime = models.DateTimeField(auto_now_add=True) # Дата и время создания заказа user = models.ForeignKey(User, on_delete=models.CASCADE) # Связь с пользователем order_parameters = models.TextField(default='no parameters') # Параметры заказа file_path = models.CharField(max_length=255, blank=True, null=True) # Путь к файлу order_state = models.CharField(max_length=50, default='wait_confirmation') # Состояние заказа def __str__(self): return f"Order {self.id} for {self.user.username}" class APIKey(models.Model): key = models.CharField(max_length=40, unique=True) created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return self.key class Incoming(models.Model): order = models.OneToOneField(Order, on_delete=models.CASCADE) # Связь с заказом processed_datetime = models.DateTimeField(auto_now_add=True) # Дата и время обработки заказа job_state = models.CharField(max_length=50, default='success') # Состояние заказа def __str__(self): return f"Incoming record for Order {self.order.id}"