mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 04:52:12 +00:00
Adds nullable creator field, containing a reference to the user who created the stream. When creating a stream, acting user is set as the creator of the stream. Since API calls to create streams always have an acting user, this field should always be set when streams are created using the API. Because streams can be created with no acting user, this field is nullable. We try to backfill existing streams using RealmAuditLog table, but not all streams are guaranteed to have a recorded create log. Thus this new field is left null when it cannot be backfilled. We also set this field to null when the creator user is deleted.
51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
# Generated by Django 4.2.11 on 2024-04-05 06:09
|
|
|
|
import django.db.models.deletion
|
|
from django.conf import settings
|
|
from django.db import migrations, models
|
|
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
|
|
from django.db.migrations.state import StateApps
|
|
|
|
|
|
def backfill_creator_id_from_realm_audit_log(
|
|
apps: StateApps, schema_editor: BaseDatabaseSchemaEditor
|
|
) -> None:
|
|
RealmAuditLog = apps.get_model("zerver", "RealmAuditLog")
|
|
RealmAuditLog.STREAM_CREATED = 601
|
|
Stream = apps.get_model("zerver", "Stream")
|
|
|
|
stream_updates = []
|
|
for audit_log_entry in RealmAuditLog.objects.select_related("modified_stream").filter(
|
|
event_type=RealmAuditLog.STREAM_CREATED,
|
|
acting_user_id__isnull=False,
|
|
):
|
|
assert audit_log_entry.modified_stream is not None
|
|
stream = audit_log_entry.modified_stream
|
|
stream.creator_id = audit_log_entry.acting_user_id
|
|
stream_updates.append(stream)
|
|
|
|
Stream.objects.bulk_update(stream_updates, ["creator_id"], batch_size=1000)
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
atomic = False
|
|
|
|
dependencies = [
|
|
("zerver", "0510_add_realmauditlog_realm_event_type_index"),
|
|
]
|
|
|
|
operations = [
|
|
migrations.AddField(
|
|
model_name="stream",
|
|
name="creator",
|
|
field=models.ForeignKey(
|
|
null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL
|
|
),
|
|
),
|
|
migrations.RunPython(
|
|
backfill_creator_id_from_realm_audit_log,
|
|
reverse_code=migrations.RunPython.noop,
|
|
elidable=True,
|
|
),
|
|
]
|