Skip to content

Commit 4e8d321

Browse files
Merge pull request #973 from robertatakenaka/fix_bugs_migration
Corrige problemas de banco de dados ao executar migração de artigos
2 parents 8843a15 + 4058b7b commit 4e8d321

5 files changed

Lines changed: 34 additions & 11 deletions

File tree

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v2.12.0rc12
1+
v2.12.0rc13

article/models.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -336,9 +336,17 @@ def get_first(cls, pid_v2=None, sps_pkg_name=None, pid_v3=None, delete=False):
336336
if obj is None:
337337
raise cls.DoesNotExist
338338
if delete:
339-
qs.exclude(pk=obj.pk).delete()
339+
cls.delete_queryset(qs.exclude(pk=obj.pk))
340340
return obj
341341

342+
@classmethod
343+
def delete_queryset(cls, qs):
344+
ArticleDOIWithLang.objects.filter(article__in=qs).delete()
345+
ArticleTitle.objects.filter(parent__in=qs).delete()
346+
ArticleCollection.objects.filter(article__in=qs).delete()
347+
ArticleWebPage.objects.filter(article__in=qs).delete()
348+
return qs.delete()
349+
342350
# ── create_or_update ──
343351

344352
@classmethod
@@ -914,7 +922,7 @@ def exclude_invalid_records(cls, user, issue, sps_pkg_id_list, timeout=None):
914922
sps_pkg_to_delete.add(sps_pkg_id)
915923
sps_pkg_names.append(sps_pkg_name)
916924
response["sps_pkg_with_invalid_pid_v2"] = sps_pkg_names
917-
qtd_deleted, _ = qs.delete()
925+
qtd_deleted, _ = cls.delete_queryset(qs)
918926
total_deletado += qtd_deleted
919927

920928
# 1. Remoção por falta de pp_xml
@@ -933,7 +941,7 @@ def exclude_invalid_records(cls, user, issue, sps_pkg_id_list, timeout=None):
933941
sps_pkg_names.append(item.sps_pkg.sps_pkg_name)
934942
if article_ids:
935943
response["ppxml_invalid"] = sps_pkg_names
936-
qtd_deleted, _ = qs.filter(id__in=article_ids).delete()
944+
qtd_deleted, _ = cls.delete_queryset(qs.filter(id__in=article_ids))
937945
total_deletado += qtd_deleted
938946

939947
# 2. Remoção por duplicidade
@@ -945,7 +953,7 @@ def exclude_invalid_records(cls, user, issue, sps_pkg_id_list, timeout=None):
945953
for value in list(multiple_values or []):
946954

947955
# Filtra os registros que possuem este valor específico duplicado
948-
duplicados = qs.filter(**{field_name: value}).order_by("-update")
956+
duplicados = qs.filter(**{field_name: value}).order_by("-updated")
949957

950958
if not duplicados.exists():
951959
continue
@@ -982,23 +990,23 @@ def exclude_invalid_records(cls, user, issue, sps_pkg_id_list, timeout=None):
982990
response[f"repeated_{field_name}"].append((value, sps_pkg_names))
983991

984992
# Executa a deleção e soma ao totalizador
985-
qtd_deletada, _ = remover_qs.delete()
993+
qtd_deletada, _ = cls.delete_queryset(remover_qs)
986994
total_deletado += qtd_deletada
987995

988996
# Se você precisar retornar o total_deletado junto com o dicionário,
989997
# pode adicioná-lo ao dicionário ou retornar uma tupla.
990998
# Como o seu esqueleto final pedia apenas o retorno do dicionário, mantive assim:
991999
if ppxml_to_delete:
992-
PidProviderXML.objects.filter(id__in=ppxml_to_delete).delete()
1000+
PidProviderXML.delete_queryset(PidProviderXML.objects.filter(id__in=ppxml_to_delete))
9931001
if sps_pkg_to_delete:
994-
SPSPkg.objects.filter(id__in=sps_pkg_to_delete).delete()
1002+
SPSPkg.delete_queryset(SPSPkg.objects.filter(id__in=sps_pkg_to_delete))
9951003

9961004
response["deleted_ppxml_ids"] = list(ppxml_to_delete)
9971005
response["deleted_sps_pkg_ids"] = list(sps_pkg_to_delete)
9981006

9991007
qs = cls.objects.filter(Q(sps_pkg__isnull=True) | Q(pp_xml__isnull=True), issue=issue)
10001008
response["deleted_article_ids"] = list(qs.values_list("id", flat=True))
1001-
qtd_deleted, _ = qs.delete()
1009+
qtd_deleted, _ = cls.delete_queryset(qs)
10021010
total_deletado += qtd_deleted
10031011

10041012
response["total_deleted_items"] = total_deletado

package/models.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,11 @@ def supplementary_materials(self):
408408
def get(cls, pid_v3):
409409
return cls.objects.get(pid_v3=pid_v3)
410410

411+
@classmethod
412+
def delete_queryset(cls, qs):
413+
SPSPkgComponent.objects.filter(sps_pkg__in=qs).delete()
414+
qs.delete()
415+
411416
def set_registered_in_core(self, value):
412417
PidRequester.set_registered_in_core(self.pid_v3, value)
413418

@@ -428,7 +433,7 @@ def _get_or_create(cls, user, pid_v3, sps_pkg_name, registered_in_core, pid_v2):
428433
except cls.MultipleObjectsReturned:
429434
items = cls.objects.filter(sps_pkg_name=sps_pkg_name).order_by("-updated")
430435
obj = items.first()
431-
items.exclude(id=obj.id).delete()
436+
cls.delete_queryset(items.exclude(id=obj.id))
432437
except cls.DoesNotExist:
433438
obj = cls()
434439
obj.creator = user

pid_provider/models.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -565,6 +565,11 @@ def get_queryset(
565565
params["proc_status__in"] = proc_status_list
566566
return cls.objects.filter(q, **params)
567567

568+
@classmethod
569+
def delete_queryset(cls, qs):
570+
OtherPid.objects.filter(pid_provider_xml__in=qs).delete()
571+
qs.delete()
572+
568573
@classmethod
569574
@profile_classmethod
570575
def public_items(cls, from_date):

proc/models.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2037,6 +2037,11 @@ def mark_for_reprocessing(
20372037
public_ws_status=tracker_choices.PROGRESS_STATUS_REPROC,
20382038
)
20392039

2040+
@classmethod
2041+
def delete_queryset(cls, qs):
2042+
ArticleProcResult.objects.filter(proc__in=qs).delete()
2043+
qs.delete()
2044+
20402045
# ── status propagation ──
20412046

20422047
def propagate_reproc_or_todo_status(self):
@@ -2554,7 +2559,7 @@ def exclude_invalid_items(cls, user, issue):
25542559
issue_proc__issue=issue,
25552560
)
25562561
items = qs.values("pid", "sps_pkg__sps_pkg_name")
2557-
qs.delete()
2562+
cls.delete_queryset(qs)
25582563
return {"sps_pkg_id_list": list(sps_pkg_id_list), "deleted": list(items)}
25592564

25602565
def update_sps_pkg_status(self):

0 commit comments

Comments
 (0)