diff --git a/app/dao/returned_letters_dao.py b/app/dao/returned_letters_dao.py index 7e313178c..a79bc5b64 100644 --- a/app/dao/returned_letters_dao.py +++ b/app/dao/returned_letters_dao.py @@ -23,19 +23,21 @@ def _get_notification_ids_for_references(references): @transactional def insert_or_update_returned_letters(references): data = _get_notification_ids_for_references(references) - now = datetime.utcnow() for row in data: table = ReturnedLetter.__table__ stmt = insert(table).values( - reported_at=now, + reported_at=datetime.utcnow().date(), service_id=row.service_id, - notification_id=row.id) + notification_id=row.id, + created_at=datetime.utcnow() + ) stmt = stmt.on_conflict_do_update( index_elements=[table.c.notification_id], set_={ - 'reported_at': now, + 'reported_at': datetime.utcnow().date(), + 'updated_at': datetime.utcnow() } ) db.session.connection().execute(stmt) diff --git a/app/models.py b/app/models.py index 577beb64a..1c7a68f35 100644 --- a/app/models.py +++ b/app/models.py @@ -2076,7 +2076,9 @@ class ReturnedLetter(db.Model): __tablename__ = 'returned_letters' id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) - reported_at = db.Column(db.DateTime, nullable=False, default=datetime.datetime.utcnow) + reported_at = db.Column(db.Date, nullable=False) service_id = db.Column(UUID(as_uuid=True), db.ForeignKey('services.id'), unique=False, index=True, nullable=False) service = db.relationship(Service, backref=db.backref('returned_letters')) notification_id = db.Column(UUID(as_uuid=True), unique=True, nullable=False) + created_at = db.Column(db.DateTime, nullable=False) + updated_at = db.Column(db.DateTime, nullable=True, onupdate=datetime.datetime.utcnow) diff --git a/migrations/versions/0310_returned_letters_table_.py b/migrations/versions/0310_returned_letters_table_.py index a33be2595..fe71e1e7d 100644 --- a/migrations/versions/0310_returned_letters_table_.py +++ b/migrations/versions/0310_returned_letters_table_.py @@ -16,9 +16,11 @@ down_revision = '0309_add_uq_key_row_number' def upgrade(): op.create_table('returned_letters', sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False), - sa.Column('reported_at', sa.DateTime(), nullable=False), + sa.Column('reported_at', sa.Date(), nullable=False), sa.Column('service_id', postgresql.UUID(as_uuid=True), nullable=False), sa.Column('notification_id', postgresql.UUID(as_uuid=True), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=False), + sa.Column('updated_at', sa.DateTime(), nullable=True), sa.ForeignKeyConstraint(['service_id'], ['services.id'], ), sa.PrimaryKeyConstraint('id'), sa.UniqueConstraint('notification_id') diff --git a/tests/app/dao/test_returned_letters_dao.py b/tests/app/dao/test_returned_letters_dao.py index 9c33988a4..126197f1c 100644 --- a/tests/app/dao/test_returned_letters_dao.py +++ b/tests/app/dao/test_returned_letters_dao.py @@ -1,4 +1,4 @@ -from datetime import datetime, timedelta +from datetime import datetime, timedelta, date from freezegun import freeze_time @@ -37,16 +37,19 @@ def test_insert_or_update_returned_letters_updates(sample_letter_template): returned_letters = ReturnedLetter.query.all() assert len(returned_letters) == 2 for x in returned_letters: - assert x.reported_at == datetime(2019, 12, 9, 13, 30) + assert x.reported_at == date(2019, 12, 9) + assert x.created_at == datetime(2019, 12, 9, 13, 30) + assert not x.updated_at assert x.notification_id in [notification.id, history.id] with freeze_time('2019-12-10 14:20'): insert_or_update_returned_letters(['ref1', 'ref2']) - returned_letters = ReturnedLetter.query.all() assert len(returned_letters) == 2 for x in returned_letters: - assert x.reported_at == datetime(2019, 12, 10, 14, 20) + assert x.reported_at == date(2019, 12, 10) + assert x.created_at == datetime(2019, 12, 9, 13, 30) + assert x.updated_at == datetime(2019, 12, 10, 14, 20) assert x.notification_id in [notification.id, history.id] @@ -93,7 +96,7 @@ def test_get_returned_letter_summary(sample_service): assert len(results) == 1 assert results[0].returned_letter_count == 2 - assert results[0].reported_at == now + assert results[0].reported_at == now.date() def test_get_returned_letter_summary_orders_by_reported_at(sample_service): @@ -109,7 +112,7 @@ def test_get_returned_letter_summary_orders_by_reported_at(sample_service): results = get_returned_letter_summary(sample_service.id) assert len(results) == 2 - assert results[0].reported_at == now + assert results[0].reported_at == now.date() assert results[0].returned_letter_count == 3 - assert results[1].reported_at == last_month + assert results[1].reported_at == last_month.date() assert results[1].returned_letter_count == 2 diff --git a/tests/app/db.py b/tests/app/db.py index e95f79b77..e940eab07 100644 --- a/tests/app/db.py +++ b/tests/app/db.py @@ -952,7 +952,8 @@ def create_returned_letter(service=None, reported_at=None): returned_letter = ReturnedLetter( service_id=service.id, reported_at=reported_at or datetime.utcnow(), - notification_id=notification.id + notification_id=notification.id, + created_at=datetime.utcnow(), ) db.session.add(returned_letter)