Backend: Added action field

This commit is contained in:
2024-01-15 16:56:38 +01:00
parent 2864ec20cc
commit 26e594f94b
29 changed files with 995 additions and 464 deletions

View File

@@ -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

View File

@@ -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):

View File

@@ -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:

View File

@@ -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