From 5a9a333090089ee100009593083fca143a840cef Mon Sep 17 00:00:00 2001
From: Arno Wunderlich <arno.a.wunderlich@student.jyu.fi>
Date: Sun, 12 Feb 2023 11:14:52 +0000
Subject: [PATCH] displaying image and resizeing when saving

---
 src/tjts5901/models.py              | 16 +++++++++++++++-
 src/tjts5901/templates/listBid.html |  2 +-
 src/tjts5901/views.py               |  9 +++++----
 3 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/src/tjts5901/models.py b/src/tjts5901/models.py
index a0ae09d9..f9057d7d 100644
--- a/src/tjts5901/models.py
+++ b/src/tjts5901/models.py
@@ -1,3 +1,6 @@
+
+from PIL import Image
+from io import BytesIO
 from datetime import datetime
 from .db import db
 
@@ -70,6 +73,17 @@ class Item(db.Document):
 
     created_at = DateTimeField(required=True, default=datetime.utcnow)
     
-    closes_at = DateTimeField()
+    closes_at = DateTimeField(required=True)
 
     image = FileField()
+
+    def save(self, *args, **kwargs):
+        # Resize image before saving
+        if self.image:
+            image = Image.open(BytesIO(self.image.read()))
+            image.thumbnail((200, 200))
+            output = BytesIO()
+            image.save(output, format='JPEG')
+            self.image.replace(output.getvalue(), content_type='image/jpeg')
+
+        super().save(*args, **kwargs)
\ No newline at end of file
diff --git a/src/tjts5901/templates/listBid.html b/src/tjts5901/templates/listBid.html
index 6fd31c61..82446828 100644
--- a/src/tjts5901/templates/listBid.html
+++ b/src/tjts5901/templates/listBid.html
@@ -31,7 +31,7 @@
             <div class="list-group container">
                 {%for item in items %}
                 <div class="d-flex w-100 justify-content-between mb-4">
-                    <img class=" col-md-2 col-xs-2" src="${path}"{{ item.image }} alt="Image" />
+                    <img src="data:image/png;base64,{{ item.image_base64 }}">
                     <a href="#" class="list-group-item list-group-item-action" aria-current="true">
                         <div class="d-flex w-100 justify-content-between">
                             <h5 class="mb-1">{{ item.title }}</h5>
diff --git a/src/tjts5901/views.py b/src/tjts5901/views.py
index c599672c..16061a24 100644
--- a/src/tjts5901/views.py
+++ b/src/tjts5901/views.py
@@ -3,6 +3,7 @@ Basic views for Application
 ===========================
 """
 
+import base64
 import random
 from datetime import datetime, timedelta
 from flask import Blueprint, flash, redirect, render_template, request, url_for
@@ -76,7 +77,6 @@ def add_item():
             user.email = "test" + ran_int + "@gmail.com"
             user.password = "placeholder"
             user.save()
-
             try:
                 item = Item(
                     title=nItem,
@@ -88,9 +88,10 @@ def add_item():
 
                 )
                 item.save()
+
             except Exception as exc:
                 error = f"Error creating item: {exc!s}"
-                print('error')
+                print('error:', exc)
             else:
                 return redirect(url_for('views.list_bid'))
 
@@ -109,8 +110,8 @@ def list_bid():
     """
     # for test reasons all items are shown and no selection on only on sale items
     items = Item.objects.all()
-    #for item in items:
-    #    print(item.image)
+    for item in items:
+        item.image_base64 = base64.b64encode(item.image.read()).decode('utf-8')
 
     html = render_template("listBid.html", items=items)
     return html
-- 
GitLab