From dd7457a9dc03ab001a3e79dff4e1e6f1385f9001 Mon Sep 17 00:00:00 2001
From: Julian Rother <julian@cccv.de>
Date: Sun, 12 Mar 2023 13:29:47 +0100
Subject: [PATCH] Add photo creation date

---
 .../aabfcc081e98_add_photo_creation_date.py   | 42 +++++++++++++++++++
 warehouse/models.py                           |  2 +
 2 files changed, 44 insertions(+)
 create mode 100644 warehouse/migrations/versions/aabfcc081e98_add_photo_creation_date.py

diff --git a/warehouse/migrations/versions/aabfcc081e98_add_photo_creation_date.py b/warehouse/migrations/versions/aabfcc081e98_add_photo_creation_date.py
new file mode 100644
index 0000000..ff97ad7
--- /dev/null
+++ b/warehouse/migrations/versions/aabfcc081e98_add_photo_creation_date.py
@@ -0,0 +1,42 @@
+"""Add photo creation date
+
+Revision ID: aabfcc081e98
+Revises: 549a81db4351
+Create Date: 2023-03-11 23:10:39.519330
+
+"""
+from alembic import op
+import sqlalchemy as sa
+from flask import current_app
+import os
+import datetime
+
+# revision identifiers, used by Alembic.
+revision = 'aabfcc081e98'
+down_revision = '549a81db4351'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+    with op.batch_alter_table('photo', schema=None) as batch_op:
+        batch_op.add_column(sa.Column('created', sa.DateTime(), nullable=True))
+    table = sa.table(
+        'photo',
+        sa.column('id', sa.Integer),
+        sa.column('path', sa.String(128)),
+        sa.column('created', sa.DateTime),
+    )
+    conn = op.get_bind()
+    results = conn.execute(sa.select(table.c.id, table.c.path)).fetchall()
+    for photo_id, path in results:
+        path = os.path.join(current_app.config['UPLOAD_FOLDER'], path)
+        created = datetime.datetime.utcfromtimestamp(os.path.getctime(path))
+        op.execute(sa.update(table).where(table.c.id == photo_id).values(created=created))
+    with op.batch_alter_table('photo', schema=None) as batch_op:
+        batch_op.alter_column('created', existing_type=sa.DateTime(), nullable=False)
+
+
+def downgrade():
+    with op.batch_alter_table('photo', schema=None) as batch_op:
+        batch_op.drop_column('created')
diff --git a/warehouse/models.py b/warehouse/models.py
index d4e9ca5..e30bf8d 100644
--- a/warehouse/models.py
+++ b/warehouse/models.py
@@ -1,6 +1,7 @@
 import secrets
 import os
 import io
+import datetime
 
 from flask import current_app, send_file, Markup
 from flask_sqlalchemy import SQLAlchemy
@@ -13,6 +14,7 @@ class Photo(db.Model):
 	id = db.Column(db.Integer(), primary_key=True, autoincrement=True)
 	mimetype = db.Column(db.String(128), nullable=False)
 	path = db.Column(db.String(128), nullable=True)
+	created = db.Column(db.DateTime, default=datetime.datetime.utcnow, nullable=False)
 
 	@classmethod
 	def from_form(cls, filestorage):
-- 
GitLab