From 4e96d09513d4543c866d01186d2bb6b3e7b85840 Mon Sep 17 00:00:00 2001 From: michail Date: Mon, 7 Oct 2019 14:34:24 +0500 Subject: [PATCH] added transfer.py to account, comment and review --- apps/account/transfer.py | 49 ++++++++++++++++++++++++++++++ apps/comment/transfer.py | 47 +++++++++++++++++++++++++++++ apps/review/transfer.py | 58 ++++++++++++++++++++++++++++++++++++ apps/transfer/models.py | 64 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 218 insertions(+) create mode 100644 apps/account/transfer.py create mode 100644 apps/comment/transfer.py create mode 100644 apps/review/transfer.py diff --git a/apps/account/transfer.py b/apps/account/transfer.py new file mode 100644 index 00000000..dc02c49c --- /dev/null +++ b/apps/account/transfer.py @@ -0,0 +1,49 @@ +""" +Структура fields: +key - поле в таблице postgres +value - поле или группа полей в таблице legacy + +В случае передачи группы полей каждое поле представляет собой кортеж, где: +field[0] - название аргумента +field[1] - название поля в таблице legacy +Опционально: field[2] - тип данных для преобразования + +Структура внешних ключей: +"legacy_table" - спикок кортежей для сопоставления полей +"legacy_table": [ + (("legacy_key", "legacy_field"), + ("psql_table", "psql_key", "psql_field", "psql_field_type")) +], где: +legacy_table - название модели legacy +legacy_key - ForeignKey в legacy +legacy_field - уникальное поле в модели legacy для сопоставления с postgresql +psql_table - название модели psql +psql_key - ForeignKey в postgresql +psql_field - уникальное поле в модели postgresql для сопоставления с legacy +psql_field_type - тип уникального поля в postgresql + +""" + +card = { + "User": { + "data_type": "objects", + "dependencies": None, + "fields": { + "Accounts": { + "username": "nickname", + "email": "email", + "email_confirmed": ("confirmed_at", "BooleanField") + }, + # Profiles ссылается внешним ключом(account) на Accounts + "Profiles": { + "first_name": "firstname", + "last_name": "lastname" + } + } + } + +} + +used_apps = None + + diff --git a/apps/comment/transfer.py b/apps/comment/transfer.py new file mode 100644 index 00000000..ef84bfe7 --- /dev/null +++ b/apps/comment/transfer.py @@ -0,0 +1,47 @@ +""" +Структура fields: +key - поле в таблице postgres +value - поле или группа полей в таблице legacy + +В случае передачи группы полей каждое поле представляет собой кортеж, где: +field[0] - название аргумента +field[1] - название поля в таблице legacy +Опционально: field[2] - тип данных для преобразования + +Структура внешних ключей: +"legacy_table" - спикок кортежей для сопоставления полей +"legacy_table": [ + (("legacy_key", "legacy_field"), + ("psql_table", "psql_key", "psql_field", "psql_field_type")) +], где: +legacy_table - название модели legacy +legacy_key - ForeignKey в legacy +legacy_field - уникальное поле в модели legacy для сопоставления с postgresql +psql_table - название модели psql +psql_key - ForeignKey в postgresql +psql_field - уникальное поле в модели postgresql для сопоставления с legacy +psql_field_type - тип уникального поля в postgresql + +""" + +card = { + "Comment": { + "data_type": "objects", + "dependencies": ("User",), + "fields": { + "text": "comment", + "mark": "mark" + # как работать с GenericForeignKey - ? + # "content_object" : "" + }, + "relations": { + # нужен ответ по вопросу Как поступать со сбором данных + # "Accounts": [ + # (("account_id", "account_id"), + # ("User", "id", "user", "PositiveIntegerField")) + # ] + } + } +} + +used_apps = ("account", ) \ No newline at end of file diff --git a/apps/review/transfer.py b/apps/review/transfer.py new file mode 100644 index 00000000..109d88be --- /dev/null +++ b/apps/review/transfer.py @@ -0,0 +1,58 @@ +""" +Структура fields: +key - поле в таблице postgres +value - поле или группа полей в таблице legacy + +В случае передачи группы полей каждое поле представляет собой кортеж, где: +field[0] - название аргумента +field[1] - название поля в таблице legacy +Опционально: field[2] - тип данных для преобразования + +Структура внешних ключей: +"legacy_table" - спикок кортежей для сопоставления полей +"legacy_table": [ + (("legacy_key", "legacy_field"), + ("psql_table", "psql_key", "psql_field", "psql_field_type")) +], где: +legacy_table - название модели legacy +legacy_key - ForeignKey в legacy +legacy_field - уникальное поле в модели legacy для сопоставления с postgresql +psql_table - название модели psql +psql_key - ForeignKey в postgresql +psql_field - уникальное поле в модели postgresql для сопоставления с legacy +psql_field_type - тип уникального поля в postgresql + + +""" + +card = { + "Review": { + "data_type": "objects", + "dependencies": ("User",), + "fields": { + "Reviews": { + "published_at": "published_at", + "vintage": "vintage", + # как работать с GenericForeignKey - ? + # "content_object": "" + }, + "ReviewTexts": { + # полу text в модели Review имеет тип TJSONField, а поле text в модели ReviewTexts имеет тип TextField + # при их сопоставлении использовать поле locale модели ReviewTexts + "text": "text" + } + }, + "relations": { + # вопрос с внешним ключом language + + # нужен ответ по вопросу как поступать со сбором данных + # "Accounts": [ + # (("account_id", "account_id"), + # ("User", "id", "reviewer", "PositiveIntegerField")) + # ] + } + } + +} + +used_apps = ("account", ) \ No newline at end of file diff --git a/apps/transfer/models.py b/apps/transfer/models.py index 3bb3d90c..59f827c6 100644 --- a/apps/transfer/models.py +++ b/apps/transfer/models.py @@ -566,3 +566,67 @@ class EmailAddresses(MigrateMixin): managed = False db_table = 'email_addresses' + +class Reviews(MigrateMixin): + using = 'legacy' + + vintage = models.PositiveIntegerField() + mark = models.FloatField(blank=True, null=True) + favorite = models.IntegerField(blank=True, null=True) + account = models.ForeignKey(Accounts, models.DO_NOTHING, blank=True, null=True) + establishment = models.ForeignKey(Establishments, models.DO_NOTHING, blank=True, null=True) + visited_at = models.DateField(blank=True, null=True) + created_at = models.DateTimeField() + published_at = models.DateTimeField(blank=True, null=True) + updated_at = models.DateTimeField() + aasm_state = models.CharField(max_length=255, blank=True, null=True) + reviewer_id = models.IntegerField() + priority = models.IntegerField(blank=True, null=True) + #TODO: модель Products в postgres закомментирована + product = models.ForeignKey("Products", models.DO_NOTHING, blank=True, null=True) + received_at = models.DateTimeField(blank=True, null=True) + reviewer_name = models.CharField(max_length=255, blank=True, null=True) + type = models.CharField(max_length=255, blank=True, null=True) + locked = models.IntegerField(blank=True, null=True) + temporary = models.IntegerField(blank=True, null=True) + last_state_change_at = models.DateTimeField(blank=True, null=True) + editor = models.ForeignKey(Accounts, models.DO_NOTHING, blank=True, null=True) + + class Meta: + managed = False + db_table = 'reviews' + + +class ReviewTexts(MigrateMixin): + using = 'legacy' + + review = models.ForeignKey('Reviews', models.DO_NOTHING, blank=True, null=True) + locale = models.CharField(max_length=5, blank=True, null=True) + text = models.TextField(blank=True, null=True) + updated_by = models.ForeignKey(Accounts, models.DO_NOTHING, db_column='updated_by', blank=True, null=True) + created_at = models.DateTimeField() + updated_at = models.DateTimeField() + + class Meta: + managed = False + db_table = 'review_texts' + +class Comments(MigrateMixin): + using = 'legacy' + + account = models.ForeignKey(Accounts, models.DO_NOTHING, blank=True, null=True) + establishment = models.ForeignKey('Establishments', models.DO_NOTHING) + parent_id = models.IntegerField(blank=True, null=True) + main_parent_id = models.IntegerField(blank=True, null=True) + comment = models.TextField(blank=True, null=True) + mark = models.DecimalField(max_digits=4, decimal_places=2, blank=True, null=True) + locale = models.CharField(max_length=5) + ip = models.CharField(max_length=40) + state = models.CharField(max_length=255, blank=True, null=True) + created_at = models.DateTimeField() + updated_at = models.DateTimeField() + date = models.DateField(blank=True, null=True) + + class Meta: + managed = False + db_table = 'comments' \ No newline at end of file