From 6881f9e3efaeaaa6679d29d01efedfec7c763459 Mon Sep 17 00:00:00 2001
From: hanfi <ccc@spahan.ch>
Date: Thu, 14 Sep 2023 08:08:01 +0200
Subject: [PATCH] refaktor apiv2

---
 backend/main.py    | 42 +++++++++++++++++++++++++++++++++---------
 backend/schemas.py |  9 +++++++--
 backend/utils.py   | 14 +++++++++++++-
 3 files changed, 53 insertions(+), 12 deletions(-)

diff --git a/backend/main.py b/backend/main.py
index c79e5d7..db47efe 100644
--- a/backend/main.py
+++ b/backend/main.py
@@ -1,3 +1,4 @@
+from typing import List
 from uuid import UUID
 
 from fastapi import Depends, FastAPI, HTTPException, Request, UploadFile, status
@@ -86,13 +87,13 @@ def verify_customer(
     login_data: schemas.LoginData, db: Session = Depends(get_db)
 ):  # item_uuid: str, signature: str):
     print(login_data)
-    item = utils.get_item_by_uuid(db, UUID(login_data.item_uuid))
-    if not item:
+    delivery = utils.get_delivery_by_uuid(db, UUID(login_data.delivery_uuid))
+    if not delivery:
         raise HTTPException(status_code=404, detail="Item not found")
-    if not utils.verify_signature(item, login_data.signature):
+    if not utils.verify_signature(delivery, delivery.uuid, login_data.signature):
         raise HTTPException(status_code=400, detail="Invalid signature")
     return {
-        "access_token": oauth2_tokener.dumps(str(item.uuid)),
+        "access_token": oauth2_tokener.dumps(str(delivery.uuid)),
         "token_type": "bearer",
     }
 
@@ -101,9 +102,9 @@ def verify_customer(
 @app.post("/delivery", response_model=schemas.Delivery)
 @limiter.limit("2/minute")
 def prepare_delivery(
-    request: Request, verification: str, db: Session = Depends(get_db)
+    request: Request, delivery: schemas.DeliveryBase, db: Session = Depends(get_db)
 ):
-    return utils.prepare_delivery(db, verification)
+    return utils.prepare_delivery(db, delivery.verification)
 
 
 @app.get("/delivery/{delivery_uuid}", response_model=schemas.Delivery)
@@ -119,6 +120,17 @@ def get_delivery_by_uuid(
     return delivery
 
 
+@app.get("/tag/{delivery_tag}", response_model=schemas.Delivery)
+def get_delivery_by_tag(
+    delivery_tag: str,
+    token: str = Depends(oauth2_scheme),
+    db: Session = Depends(get_db),
+):
+    delivery = utils.get_delivery_by_tag(db, delivery_tag)
+    check_token(token, delivery.uuid)
+    return delivery
+
+
 @app.put("/delivery/{delivery_uuid}", response_model=schemas.Delivery)
 def update_delivery(
     delivery_uuid: str,
@@ -133,13 +145,16 @@ def update_delivery(
 
 @app.post("/item", response_model=schemas.Item)
 def add_item(
-    delivery_uuid: str,
-    storage_name: str,
+    item: schemas.ItemAdd,
     token: str = Depends(oauth2_scheme),
     db: Session = Depends(get_db),
 ):
     check_token(token, None)
-    return utils.add_item_for_delivery_at_storage(db, UUID(delivery_uuid), storage_name)
+    print(item)
+
+    return utils.add_item_for_delivery_at_storage(
+        db, item.delivery_uuid, item.storage_name
+    )
 
 
 @app.get("/item/{item_uuid}", response_model=schemas.Item)
@@ -167,6 +182,15 @@ def get_storage(
     return utils.get_storage_by_name(db, storage_name)
 
 
+@app.get("/storages", response_model=List[schemas.Storage])
+def get_storages(
+    token: str = Depends(oauth2_scheme),
+    db: Session = Depends(get_db),
+):
+    check_token(token, None)
+    return utils.get_storages(db)
+
+
 @app.post("/item/register", response_model=schemas.Delivery)
 def add_item_with_image(
     image: UploadFile,
diff --git a/backend/schemas.py b/backend/schemas.py
index 2c2637a..c73c301 100644
--- a/backend/schemas.py
+++ b/backend/schemas.py
@@ -11,7 +11,12 @@ class Image(BaseModel):
         orm_mode = True
 
 
-class Item(BaseModel):
+class ItemAdd(BaseModel):
+    delivery_uuid: UUID4
+    storage_name: str
+
+
+class Item(ItemAdd):
     uuid: UUID4
     received_at: datetime
     images: List[Image]
@@ -50,5 +55,5 @@ class Delivery(DeliveryBase, DeliveryUpdate):
 
 
 class LoginData(BaseModel):
-    item_uuid: str
+    delivery_uuid: str
     signature: str
diff --git a/backend/utils.py b/backend/utils.py
index 647eb7d..0a2c86b 100644
--- a/backend/utils.py
+++ b/backend/utils.py
@@ -47,8 +47,18 @@ def get_storage_by_name(db: Session, storage_name: str):
     return db.get(models.Storage, storage_name)
 
 
+def get_storages(db: Session):
+    storages = db.query(models.Storage).all()
+    for storage in storages:
+        storage.items = [
+            item for item in storage.items if item.deployed_at == None  # noqa: E711
+        ]
+    return storages
+
+
 def get_delivery_by_uuid(db: Session, delivery_uuid: UUID4):
     delivery = db.get(models.Delivery, delivery_uuid)
+    delivery.amount = len(delivery.items)
     delivery.items = [
         item for item in delivery.items if item.deployed_at == None  # noqa: E711
     ]
@@ -59,6 +69,7 @@ def get_delivery_by_tag(db: Session, delivery_tag: str):
     delivery = (
         db.query(models.Delivery).filter(models.Delivery.tag == delivery_tag).first()
     )
+    delivery.amount = len(delivery.items)
     delivery.items = [
         item for item in delivery.items if item.deployed_at == None  # noqa: E711
     ]
@@ -86,6 +97,7 @@ def update_delivery_data(
         delivery.team = escape(update_data.team)
     db.commit()
     db.refresh(delivery)
+    delivery.amount = len(delivery.items)
     delivery.items = [
         item for item in delivery.items if item.deployed_at == None  # noqa: E711
     ]
@@ -106,7 +118,7 @@ def add_item_for_delivery_at_storage(
 
 def deploy_item(db: Session, item_uuid: UUID4):
     item = db.get(models.Item, item_uuid)
-    item.datetime = datetime.now()
+    item.deployed_at = datetime.now()
     db.commit()
     db.refresh(item)
     return item
-- 
GitLab