From 4f0e4cc9f5a9f64576d5fca2721d0a14d1d093f7 Mon Sep 17 00:00:00 2001 From: Facundo Lopez Janza Date: Wed, 18 Mar 2026 18:19:04 -0300 Subject: [PATCH 1/3] ENG-2594: Add received_at column to currentprivacypreferencev2 Add a nullable received_at column to CurrentPrivacyPreference so the companion fidesplus fix can compare incoming received_at against the stored value instead of updated_at (server write time). This fixes incorrect current preferences when backfill scripts send historical timestamps via the pre-verified endpoint. --- ...8_1800_d98cea042828_add_received_at_to_.py | 28 +++++++++++++++++++ src/fides/api/models/privacy_preference.py | 2 ++ 2 files changed, 30 insertions(+) create mode 100644 src/fides/api/alembic/migrations/versions/xx_2026_03_18_1800_d98cea042828_add_received_at_to_.py diff --git a/src/fides/api/alembic/migrations/versions/xx_2026_03_18_1800_d98cea042828_add_received_at_to_.py b/src/fides/api/alembic/migrations/versions/xx_2026_03_18_1800_d98cea042828_add_received_at_to_.py new file mode 100644 index 00000000000..69f702b8838 --- /dev/null +++ b/src/fides/api/alembic/migrations/versions/xx_2026_03_18_1800_d98cea042828_add_received_at_to_.py @@ -0,0 +1,28 @@ +"""add received_at to currentprivacypreferencev2 + +Revision ID: d98cea042828 +Revises: baa6792fc3f7 +Create Date: 2026-03-18 18:00:11.051667 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'd98cea042828' +down_revision = 'baa6792fc3f7' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('currentprivacypreferencev2', sa.Column('received_at', sa.DateTime(timezone=True), nullable=True)) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('currentprivacypreferencev2', 'received_at') + # ### end Alembic commands ### diff --git a/src/fides/api/models/privacy_preference.py b/src/fides/api/models/privacy_preference.py index be0e79e1726..0c6595f37fe 100644 --- a/src/fides/api/models/privacy_preference.py +++ b/src/fides/api/models/privacy_preference.py @@ -189,6 +189,8 @@ def __tablename__(self) -> str: nullable=True, ) + received_at = Column(DateTime(timezone=True), nullable=True) + updated_at = Column( DateTime(timezone=True), server_default=func.now(), From 46b55a14381471c960b32edc288621635852ff5d Mon Sep 17 00:00:00 2001 From: Facundo Lopez Janza Date: Wed, 18 Mar 2026 18:59:54 -0300 Subject: [PATCH 2/3] fix revision --- ...03_18_2159_94273d7e8319_add_received_at_to_.py} | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) rename src/fides/api/alembic/migrations/versions/{xx_2026_03_18_1800_d98cea042828_add_received_at_to_.py => xx_2026_03_18_2159_94273d7e8319_add_received_at_to_.py} (53%) diff --git a/src/fides/api/alembic/migrations/versions/xx_2026_03_18_1800_d98cea042828_add_received_at_to_.py b/src/fides/api/alembic/migrations/versions/xx_2026_03_18_2159_94273d7e8319_add_received_at_to_.py similarity index 53% rename from src/fides/api/alembic/migrations/versions/xx_2026_03_18_1800_d98cea042828_add_received_at_to_.py rename to src/fides/api/alembic/migrations/versions/xx_2026_03_18_2159_94273d7e8319_add_received_at_to_.py index 69f702b8838..61e740ad97f 100644 --- a/src/fides/api/alembic/migrations/versions/xx_2026_03_18_1800_d98cea042828_add_received_at_to_.py +++ b/src/fides/api/alembic/migrations/versions/xx_2026_03_18_2159_94273d7e8319_add_received_at_to_.py @@ -1,8 +1,8 @@ """add received_at to currentprivacypreferencev2 -Revision ID: d98cea042828 -Revises: baa6792fc3f7 -Create Date: 2026-03-18 18:00:11.051667 +Revision ID: 94273d7e8319 +Revises: b5c6d7e8f9a0 +Create Date: 2026-03-18 21:59:14.123976 """ from alembic import op @@ -10,19 +10,15 @@ # revision identifiers, used by Alembic. -revision = 'd98cea042828' -down_revision = 'baa6792fc3f7' +revision = '94273d7e8319' +down_revision = 'b5c6d7e8f9a0' branch_labels = None depends_on = None def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### op.add_column('currentprivacypreferencev2', sa.Column('received_at', sa.DateTime(timezone=True), nullable=True)) - # ### end Alembic commands ### def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### op.drop_column('currentprivacypreferencev2', 'received_at') - # ### end Alembic commands ### From 4e8f88c34471e7604696fbb7ca8348e847234d17 Mon Sep 17 00:00:00 2001 From: Facundo Lopez Janza Date: Wed, 18 Mar 2026 19:13:49 -0300 Subject: [PATCH 3/3] Add data category annotation for received_at on currentprivacypreferencev2 --- .fides/db_dataset.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.fides/db_dataset.yml b/.fides/db_dataset.yml index 575452d54ad..ab7e8131954 100644 --- a/.fides/db_dataset.yml +++ b/.fides/db_dataset.yml @@ -2830,6 +2830,8 @@ dataset: data_categories: [system.operations] - name: is_hash_migrated data_categories: [system.operations] + - name: received_at + data_categories: [system.operations] - name: lastservednoticev2 description: 'Stores the last notices that were served to a user' data_categories: [system.operations]