Closed Semprini closed 1 month ago
from django.utils.translation import gettext_lazy as _ from django.db import models class AuditableModel(models.Model): last_updated_by = models.CharField( max_length=50 ) last_updated_datetime = models.DateTimeField(auto_now=True) created_by = models.CharField( max_length=50 ) created_datetime = models.DateTimeField(auto_now_add=True) source_transation_timestamp = models.DateTimeField() is_deleted = models.BooleanField() class Meta: abstract = True class ENUM_TopicType(models.TextChoices): Raw = 'Raw', _('Raw') In_Canonical = 'In-Canonical', _('In-Canonical') class ENUM_SourceIdentifierType(models.TextChoices): Column = 'Column', _('Column') Field = 'Field', _('Field') class ENUM_ObjectType(models.TextChoices): Table = 'Table', _('Table') File = 'File', _('File') class ENUM_DMLAction(models.TextChoices): Insert = 'Insert', _('Insert') Update = 'Update', _('Update') Delete = 'Delete', _('Delete') class DataProduct2TopicMapping( models.Model ): data_product_2_topic_mapping_id = models.AutoField( primary_key=True, ) source_2_data_product_mapping = models.ForeignKey( 'KeyMapping.Source2DataProductMapping', related_name='data_source_2_topic_mappings', on_delete=models.CASCADE, blank=True, null=True ) transport_topic = models.ForeignKey( 'KeyMapping.TransportTopic', related_name='data_product_2_topic_mappings', on_delete=models.CASCADE, blank=True, null=True ) class Meta(): db_table = 'DataProduct2TopicMapping' constraints = [ models.UniqueConstraint(fields=['source_2_data_product_mapping','transport_topic',], name='unique data_product_2_topic_mapping_source_2_data_product_mapping__transport_topic__') ] class DataProductKeyColumn( models.Model ): column_name = models.CharField( blank=True, null=True, max_length=50 ) data_product_key_column_id = models.AutoField( primary_key=True, ) table_name = models.CharField( blank=True, null=True, max_length=50 ) class Meta(): db_table = 'DataProductKeyColumn' constraints = [ models.UniqueConstraint(fields=['column_name','table_name',], name='unique data_product_key_column_column_name__table_name__') ] class Source2DataProductMapping( models.Model ): source_2_data_product_mapping_id = models.AutoField( primary_key=True, ) data_product_value = models.IntegerField( blank=True, null=True, ) data_product_key_column = models.ForeignKey( 'KeyMapping.DataProductKeyColumn', related_name='source_2_data_product_mappings', on_delete=models.CASCADE, blank=True, null=True ) source_key_instance = models.ForeignKey( 'KeyMapping.SourceKeyInstance', related_name='source_2_data_product_mappings', on_delete=models.CASCADE, blank=True, null=True ) class Meta(): db_table = 'Source2DataProductMapping' constraints = [ models.UniqueConstraint(fields=['data_product_key_column','source_key_instance',], name='unique source_2_data_product_mapping_data_product_key_column__source_key_instance__') ] class TransportTopic( models.Model ): dml_action = models.CharField( max_length=100, choices=ENUM_DMLAction.choices, blank=True, null=True ) sequence = models.IntegerField( blank=True, null=True, ) topic_type = models.CharField( max_length=100, choices=ENUM_TopicType.choices, blank=True, null=True ) source_object = models.CharField( blank=True, null=True, max_length=50 ) dml_updated_by = models.CharField( blank=True, null=True, max_length=50 ) partition = models.CharField( blank=True, null=True, max_length=50 ) name = models.CharField( blank=True, null=True, max_length=50 ) offset = models.CharField( blank=True, null=True, max_length=50 ) source_dml_timestamp = models.DateTimeField( blank=True, null=True, ) topic_create_timestamp = models.DateTimeField( blank=True, null=True, ) correlation_id = models.IntegerField( blank=True, null=True, ) transport_topic_id = models.AutoField( primary_key=True, ) source = models.CharField( blank=True, null=True, max_length=50 ) source_key_instance = models.ForeignKey( 'KeyMapping.SourceKeyInstance', related_name='transport_topics', on_delete=models.CASCADE, blank=True, null=True ) class Meta(): db_table = 'TransportTopic' constraints = [ models.UniqueConstraint(fields=['topic_type','partition','name','offset','topic_create_timestamp',], name='unique transport_topic_topic_type__partition__name__offset__topic_create_timestamp__') ] class SourceIdentifierValue( models.Model ): source_name = models.CharField( blank=True, null=True, max_length=50 ) source_identifier_value_id = models.AutoField( primary_key=True, ) object_type = models.CharField( max_length=100, choices=ENUM_ObjectType.choices, blank=True, null=True ) identifier_type = models.CharField( max_length=100, choices=ENUM_SourceIdentifierType.choices, blank=True, null=True ) object_schema = models.CharField( blank=True, null=True, max_length=50 ) identifier_name = models.CharField( blank=True, null=True, max_length=50 ) identifier_value = models.CharField( blank=True, null=True, max_length=255 ) object_name = models.CharField( blank=True, null=True, max_length=50 ) source_key_instance = models.ForeignKey( 'KeyMapping.SourceKeyInstance', related_name='source_identifier_values', on_delete=models.CASCADE, blank=True, null=True ) class Meta(): db_table = 'SourceIdentifierValue' constraints = [ models.UniqueConstraint(fields=['source_key_instance',], name='unique source_identifier_value_source_key_instance__') ] class SourceKeyInstance( models.Model ): source_key_instance_id = models.AutoField( primary_key=True, ) create_timestamp = models.DateTimeField( blank=True, null=True, ) class Meta(): db_table = 'SourceKeyInstance'