from django.db import models from django.contrib.postgres.indexes import GinIndex from fwd_api.constant.common import FileCategory from fwd_api.models import SubscriptionRequest from fwd_api.models.fields.EncryptedCharField import EncryptedCharField from django.utils import timezone import uuid class SubscriptionRequestFile(models.Model): def gen_random_code(): return f"FIL{uuid.uuid4().hex}" code = models.CharField(max_length=300, default=gen_random_code) origin_name = models.CharField(max_length=300, default="") file_name = models.CharField(max_length=300, default=None) file_path = EncryptedCharField(max_length=500, default=None) file_category = models.CharField(max_length=200, default=FileCategory.Origin.value) request = models.ForeignKey(SubscriptionRequest, related_name="files", on_delete=models.CASCADE) created_at = models.DateTimeField(default=timezone.now, db_index=True) updated_at = models.DateTimeField(auto_now=True) is_bad_image_quality = models.BooleanField(default=False) doc_type = models.CharField(max_length=10, default="") index_in_request = models.IntegerField(default=0) # by doc_type processing_time = models.FloatField(default=-1) # in milisecond reason = models.TextField(blank=True, db_index=True) counter_measures = models.TextField(blank=True) is_reviewed = models.BooleanField(default=False) is_required = models.BooleanField(default=True) # subsidiary = models.CharField(default="", null=True, max_length=200) # save already in SubscriptionRequest predict_result = models.JSONField(null=True) feedback_result = models.JSONField(null=True) reviewed_result = models.JSONField(null=True) feedback_accuracy = models.JSONField(null=True) reviewed_accuracy = models.JSONField(null=True) class Meta: indexes = [ models.Index(fields=['request', 'index_in_request', 'doc_type']), # For updating results models.Index(fields=['request', 'file_name']), # for getting image files by AI GinIndex(fields=['predict_result'], name='idx_gin_predict_result'), GinIndex(fields=['feedback_result'], name='idx_gin_feedback_result'), GinIndex(fields=['reviewed_result'], name='idx_gin_reviewed_result'), ]