generated from Luis/nextjs-python-web-template
Backend: Added action field
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import logging
|
||||
import time
|
||||
from typing import Any, List, Optional
|
||||
from typing import Any, List
|
||||
|
||||
import httpx
|
||||
from fastapi import APIRouter, BackgroundTasks, Depends, Query
|
||||
@@ -42,12 +42,25 @@ def create_service(
|
||||
|
||||
@router.post("/api/v1/service_usage", response_model=Service, tags=[Tags.services])
|
||||
def add_service_usage(
|
||||
usage: ServiceUsageCreate, service_uuid: str, db: Session = Depends(sql_db.get_db)
|
||||
usage: ServiceUsageCreate,
|
||||
service_uuid: str = "bdd640fb-0667-1ad1-1c80-317fa3b1799d",
|
||||
db: Session = Depends(sql_db.get_db),
|
||||
) -> Service:
|
||||
service = sql_crud.add_service_usage(db, service_uuid, usage)
|
||||
return service
|
||||
|
||||
|
||||
@router.put("/api/v1/inc_service_usage", response_model=Service, tags=[Tags.services])
|
||||
def inc_service_usage(
|
||||
usage: ServiceUsageCreate,
|
||||
consumer_entity_did: str = "did:sov:test:120",
|
||||
service_uuid: str = "bdd640fb-0667-1ad1-1c80-317fa3b1799d",
|
||||
db: Session = Depends(sql_db.get_db),
|
||||
) -> Service:
|
||||
service = sql_crud.increment_service_usage(db, service_uuid, consumer_entity_did)
|
||||
return service
|
||||
|
||||
|
||||
@router.get("/api/v1/services", response_model=List[Service], tags=[Tags.services])
|
||||
def get_all_services(
|
||||
skip: int = 0, limit: int = 100, db: Session = Depends(sql_db.get_db)
|
||||
@@ -56,7 +69,9 @@ def get_all_services(
|
||||
return services
|
||||
|
||||
|
||||
@router.get("/api/v1/service", response_model=List[Service], tags=[Tags.services])
|
||||
@router.get(
|
||||
"/api/v1/service_by_did", response_model=List[Service], tags=[Tags.services]
|
||||
)
|
||||
def get_service_by_did(
|
||||
entity_did: str = "did:sov:test:120",
|
||||
skip: int = 0,
|
||||
@@ -67,6 +82,19 @@ def get_service_by_did(
|
||||
return service
|
||||
|
||||
|
||||
@router.get("/api/v1/service", response_model=Service, tags=[Tags.services])
|
||||
def get_service_by_uuid(
|
||||
uuid: str = "bdd640fb-0667-1ad1-1c80-317fa3b1799d",
|
||||
skip: int = 0,
|
||||
limit: int = 100,
|
||||
db: Session = Depends(sql_db.get_db),
|
||||
) -> sql_models.Service:
|
||||
service = sql_crud.get_service_by_uuid(db, uuid=uuid)
|
||||
if service is None:
|
||||
raise ClanError(f"Service with uuid '{uuid}' not found")
|
||||
return service
|
||||
|
||||
|
||||
@router.get(
|
||||
"/api/v1/services_without_entity",
|
||||
response_model=List[Service],
|
||||
@@ -121,12 +149,14 @@ def get_all_entities(
|
||||
return entities
|
||||
|
||||
|
||||
@router.get("/api/v1/entity", response_model=Optional[Entity], tags=[Tags.entities])
|
||||
@router.get("/api/v1/entity", response_model=Entity, tags=[Tags.entities])
|
||||
def get_entity_by_did(
|
||||
entity_did: str = "did:sov:test:120",
|
||||
db: Session = Depends(sql_db.get_db),
|
||||
) -> Optional[sql_models.Entity]:
|
||||
) -> sql_models.Entity:
|
||||
entity = sql_crud.get_entity_by_name_or_did(db, name=entity_did)
|
||||
if entity is None:
|
||||
raise ClanError(f"Entity with did '{entity_did}' not found")
|
||||
return entity
|
||||
|
||||
|
||||
|
||||
@@ -92,15 +92,22 @@ class ServiceUsage(ServiceUsageCreate):
|
||||
|
||||
|
||||
class ServiceBase(BaseModel):
|
||||
uuid: str = Field(..., example="8e285c0c-4e40-430a-a477-26b3b81e30df")
|
||||
uuid: str = Field(..., example="bdd640fb-0667-1ad1-1c80-317fa3b1799d")
|
||||
service_name: str = Field(..., example="Carlos Printing")
|
||||
service_type: str = Field(..., example="3D Printing")
|
||||
endpoint_url: str = Field(..., example="http://127.0.0.1:8000")
|
||||
status: str = Field(..., example="unknown")
|
||||
other: dict = Field(
|
||||
..., example={"action": ["register", "deregister", "delete", "create"]}
|
||||
)
|
||||
other: dict = Field(..., example={"test": "test"})
|
||||
entity_did: str = Field(..., example="did:sov:test:120")
|
||||
status: dict = Field(..., example={"data": ["draft", "registered"]})
|
||||
action: dict = Field(
|
||||
...,
|
||||
example={
|
||||
"data": [
|
||||
{"name": "register", "path": "/register"},
|
||||
{"name": "deregister", "path": "/deregister"},
|
||||
]
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ServiceCreate(ServiceBase):
|
||||
|
||||
@@ -26,6 +26,7 @@ def create_service(db: Session, service: schemas.ServiceCreate) -> sql_models.Se
|
||||
status=service.status,
|
||||
other=service.other,
|
||||
entity_did=service.entity_did,
|
||||
action=service.action,
|
||||
)
|
||||
db_usage = []
|
||||
for usage in service.usage:
|
||||
|
||||
@@ -55,23 +55,20 @@ class ServiceUsage(Base):
|
||||
service = relationship("Service", back_populates="usage")
|
||||
|
||||
|
||||
class ServiceAbstract(Base):
|
||||
__abstract__ = True
|
||||
class Service(Base):
|
||||
__tablename__ = "services"
|
||||
|
||||
# Queryable body
|
||||
uuid = Column(Text(length=36), primary_key=True, index=True)
|
||||
service_name = Column(String, index=True)
|
||||
service_type = Column(String, index=True)
|
||||
endpoint_url = Column(String, index=True)
|
||||
status = Column(String, index=True)
|
||||
|
||||
## Non queryable body ##
|
||||
# In here we deposit: Action
|
||||
other = Column(JSON)
|
||||
|
||||
|
||||
class Service(ServiceAbstract):
|
||||
__tablename__ = "services"
|
||||
status = Column(JSON, index=True)
|
||||
action = Column(JSON, index=True)
|
||||
|
||||
## Relations ##
|
||||
# One entity can have many services
|
||||
|
||||
Reference in New Issue
Block a user