Skip to content

Commit 1e55619

Browse files
aapelivclaude
andcommitted
Backend/moderation: drop Reference.is_deleted column
Now that UMS owns reference visibility, the legacy is_deleted column is dead. Migration 0151 drops it after the visibility backfill (and restores it from the moderation visibility on downgrade). AdminReference.is_deleted is reserved in the proto since the field shipped to production. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 2b0fb11 commit 1e55619

5 files changed

Lines changed: 20 additions & 11 deletions

File tree

app/backend/src/couchers/migrations/versions/0155_backend_moderation_ums_coverage_for_.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,25 @@ def upgrade() -> None:
8484
["id"],
8585
)
8686

87+
# The legacy `is_deleted` flag is now subsumed by UMS visibility (deleted rows were
88+
# backfilled to 'hidden' above). Drop the column.
89+
op.drop_column("references", "is_deleted")
90+
8791

8892
def downgrade() -> None:
93+
# Restore the is_deleted column from the moderation visibility before tearing down UMS state.
94+
op.add_column(
95+
"references",
96+
sa.Column("is_deleted", sa.Boolean(), nullable=False, server_default=sa.false()),
97+
)
98+
op.execute("""
99+
UPDATE "references"
100+
SET is_deleted = TRUE
101+
FROM moderation_states
102+
WHERE moderation_states.id = "references".moderation_state_id
103+
AND moderation_states.visibility = 'hidden'
104+
""")
105+
89106
op.drop_constraint(op.f("fk_references_moderation_state_id_moderation_states"), "references", type_="foreignkey")
90107
op.drop_index(op.f("ix_references_moderation_state_id"), table_name="references")
91108
op.drop_column("references", "moderation_state_id")

app/backend/src/couchers/models/rest.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -431,8 +431,6 @@ class Reference(Base, kw_only=True):
431431
rating: Mapped[float] = mapped_column(Float)
432432
was_appropriate: Mapped[bool] = mapped_column(Boolean)
433433

434-
is_deleted: Mapped[bool] = mapped_column(Boolean, default=False, server_default=expression.false())
435-
436434
from_user: Mapped[User] = relationship(init=False, backref="references_from", foreign_keys="Reference.from_user_id")
437435
to_user: Mapped[User] = relationship(init=False, backref="references_to", foreign_keys="Reference.to_user_id")
438436

app/backend/src/couchers/servicers/admin.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,6 @@ def _reference_to_pb(reference: Reference) -> admin_pb2.AdminReference:
185185
host_request_id=reference.host_request_id or 0,
186186
rating=reference.rating,
187187
was_appropriate=reference.was_appropriate,
188-
is_deleted=reference.is_deleted,
189188
)
190189

191190

app/backend/src/tests/test_admin.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -737,11 +737,6 @@ def test_DeleteReference_deprecated(db):
737737
admin_api.DeleteReference(admin_pb2.DeleteReferenceReq(reference_id=reference.reference_id))
738738
assert e.value.code() == grpc.StatusCode.FAILED_PRECONDITION
739739

740-
# The reference is unchanged on disk.
741-
with session_scope() as session:
742-
ref_row = session.execute(select(Reference).where(Reference.id == reference.reference_id)).scalar_one()
743-
assert not ref_row.is_deleted
744-
745740

746741
def test_GetUserReferences(db):
747742
super_user, super_token = generate_user(is_superuser=True)
@@ -799,7 +794,6 @@ def test_GetUserReferences(db):
799794
assert res.references_from[0].from_user_id == user1.id
800795
assert res.references_from[0].to_user_id == user2.id
801796
assert res.references_from[0].text == "Reference from user1 to user2"
802-
assert res.references_from[0].is_deleted is False
803797

804798
# user1 received 2 references
805799
assert len(res.references_to) == 2
@@ -810,7 +804,6 @@ def test_GetUserReferences(db):
810804
assert res.references_to[1].reference_id == ref2.reference_id
811805
assert res.references_to[1].private_text == "Private note"
812806
assert res.references_to[1].rating == 0.8
813-
assert res.references_to[1].is_deleted is False
814807

815808

816809
def test_GetUserReferences_not_found(db):

app/proto/admin.proto

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,9 @@ message GetUserReferencesReq {
407407
}
408408

409409
message AdminReference {
410+
reserved 11;
411+
reserved "is_deleted";
412+
410413
int64 reference_id = 1;
411414
int64 from_user_id = 2;
412415
int64 to_user_id = 3;
@@ -417,7 +420,6 @@ message AdminReference {
417420
int64 host_request_id = 8;
418421
double rating = 9;
419422
bool was_appropriate = 10;
420-
bool is_deleted = 11;
421423
}
422424

423425
message GetUserReferencesRes {

0 commit comments

Comments
 (0)