Changed reported_at to a date and included audit columns.

This commit is contained in:
Rebecca Law
2019-12-12 14:11:54 +00:00
parent 140cb65554
commit d330025447
5 changed files with 24 additions and 14 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -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')

View File

@@ -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

View File

@@ -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)