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