From f15e88f3ae68291228cf546c677011c3e4f27818 Mon Sep 17 00:00:00 2001
From: hanfi <ccc@spahan.ch>
Date: Sat, 29 Jul 2023 20:56:46 +0200
Subject: [PATCH] allow register packages by image

---
 .gitignore       |  3 +++
 backend/main.py  | 13 ++++++++++++-
 backend/utils.py | 20 ++++++++++++++++++++
 3 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/.gitignore b/.gitignore
index ca45ec0..4461783 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,3 +35,6 @@ venv.bak/
 
 # SQLite Databases
 *.db
+
+# images directory
+images/
diff --git a/backend/main.py b/backend/main.py
index d77f207..0e126d2 100644
--- a/backend/main.py
+++ b/backend/main.py
@@ -1,7 +1,7 @@
 from datetime import datetime, timedelta
 from uuid import UUID
 
-from fastapi import Depends, FastAPI, HTTPException, Request, status
+from fastapi import Depends, FastAPI, HTTPException, Request, UploadFile, status
 from fastapi.middleware.cors import CORSMiddleware
 from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
 from itsdangerous.serializer import Serializer
@@ -67,6 +67,17 @@ def add_item(
     return utils.prepare_item_shipping(db, item)
 
 
+@app.post("/item/register", response_model=schemas.Item)
+def add_item_with_image(
+    image: UploadFile,
+    token: str = Depends(oauth2_scheme),
+    db: Session = Depends(get_db),
+):
+    check_token(token)
+    print(image.file)
+    return utils.add_item_with_image(db, image)
+
+
 @app.post("/item/update/{item_uuid}", response_model=schemas.Item)
 def update_item(
     item_uuid: str, data: schemas.ItemUpdate, db: Session = Depends(get_db)
diff --git a/backend/utils.py b/backend/utils.py
index b247acf..aceab63 100644
--- a/backend/utils.py
+++ b/backend/utils.py
@@ -1,6 +1,8 @@
 from datetime import datetime
 from html import escape
 from secrets import token_hex
+from shutil import copyfileobj
+from tempfile import SpooledTemporaryFile
 
 from cryptography.exceptions import InvalidSignature
 from cryptography.hazmat.primitives.asymmetric.ed448 import Ed448PublicKey
@@ -53,6 +55,24 @@ def prepare_item_shipping(db: Session, item: schemas.ItemCreatePrepareShipping):
     return new_item
 
 
+def add_item_with_image(db: Session, image: SpooledTemporaryFile):
+    db_item = models.Item()
+    db.add(db_item)
+    db.commit()
+    db_image = models.Image(item_uuid=db_item.uuid)
+    db.add(db_image)
+    db.commit()
+    db.refresh(db_image)
+    print(db_item.uuid)
+    print(db_image.uuid)
+    with open(f"./images/{ db_image.uuid }", "wb") as destination:
+        try:
+            copyfileobj(image.file, destination)
+        finally:
+            image.file.close
+    return db_item
+
+
 def update_item(db: Session, item: schemas.Item, data: schemas.ItemUpdate):
     public_key = Ed448PublicKey.from_public_bytes(bytes.fromhex(item.verification))
     verify = ""
-- 
GitLab