Skip to content

Commit ca4c6e5

Browse files
committed
add migration plus test
1 parent fa4733e commit ca4c6e5

File tree

2 files changed

+768
-0
lines changed

2 files changed

+768
-0
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
from datastore.migrations import BaseModelMigration
2+
from datastore.writer.core.write_request import BaseRequestEvent, RequestUpdateEvent
3+
4+
from ...shared.filters import And, FilterOperator, Or
5+
6+
7+
class Migration(BaseModelMigration):
8+
"""
9+
This migration removes mistakenly created history collection entries
10+
"""
11+
12+
target_migration_index = 73
13+
14+
def migrate_models(self) -> list[BaseRequestEvent] | None:
15+
if self.reader.is_in_memory_migration:
16+
return None
17+
events: list[BaseRequestEvent] = []
18+
filter_ = And(
19+
FilterOperator("original_model_id", "%=", "motion/%"),
20+
FilterOperator("meeting_id", "!=", None),
21+
FilterOperator("meta_deleted", "!=", True),
22+
)
23+
potentially_broken_entries = self.reader.filter(
24+
"history_entry", filter_, ["meeting_id"]
25+
)
26+
potentially_affected_meetings = {
27+
meeting_id
28+
for entry in potentially_broken_entries.values()
29+
if (meeting_id := entry.get("meeting_id"))
30+
}
31+
if potentially_broken_entries:
32+
deleted_meetings = self.reader.filter(
33+
"meeting",
34+
And(
35+
FilterOperator("meta_deleted", "=", True),
36+
Or(
37+
*[
38+
FilterOperator("id", "=", id_)
39+
for id_ in potentially_affected_meetings
40+
]
41+
),
42+
),
43+
)
44+
events = [
45+
*[
46+
RequestUpdateEvent(
47+
f"history_entry/{id_}", fields={"meeting_id": None}
48+
)
49+
for id_, entry in potentially_broken_entries.items()
50+
if entry["meeting_id"] in deleted_meetings
51+
],
52+
]
53+
# meetings = self.reader.get_many(
54+
# [
55+
# GetManyRequestPart("meeting", list(affected_meetings), ["meta_deleted"])
56+
# ]
57+
# ).get("meeting", {})
58+
# events = [
59+
# *[
60+
# RequestUpdateEvent(f"history_entry/{id_}", fields={"meeting_id": None})
61+
# for id_, entry in potentially_broken_entries.items()
62+
# if meetings[entry["meeting_id"]].get("meta_deleted") != True
63+
# ],
64+
# ]
65+
66+
return events

0 commit comments

Comments
 (0)