Skip to content
Snippets Groups Projects
Verified Commit 6881f9e3 authored by hanfi's avatar hanfi
Browse files

refaktor apiv2

parent fe68fe8c
No related branches found
No related tags found
1 merge request!8backend api v2
This commit is part of merge request !8. Comments created here will be created in the context of that merge request.
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,
......
......@@ -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
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment