Added all other missing API endpoints. #20

Merged
Luis merged 1 commits from Luis-Hebendanz-main into main 2023-11-27 15:58:30 +00:00
4 changed files with 176 additions and 56 deletions

View File

@@ -7,11 +7,12 @@ from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from fastapi.routing import APIRoute from fastapi.routing import APIRoute
from fastapi.staticfiles import StaticFiles from fastapi.staticfiles import StaticFiles
from sqlalchemy.exc import SQLAlchemyError
from ..errors import ClanError from ..errors import ClanError
from . import sql_models from . import sql_models
from .assets import asset_path from .assets import asset_path
from .error_handlers import clan_error_handler from .error_handlers import clan_error_handler, sql_error_handler
from .routers import health, root, socket_manager2, sql_connect # sql router hinzufügen from .routers import health, root, socket_manager2, sql_connect # sql router hinzufügen
from .sql_db import engine from .sql_db import engine
from .tags import tags_metadata from .tags import tags_metadata
@@ -53,6 +54,7 @@ def setup_app() -> FastAPI:
# Needs to be last in register. Because of wildcard route # Needs to be last in register. Because of wildcard route
app.include_router(root.router) app.include_router(root.router)
app.add_exception_handler(ClanError, clan_error_handler) # type: ignore app.add_exception_handler(ClanError, clan_error_handler) # type: ignore
app.add_exception_handler(SQLAlchemyError, sql_error_handler) # type: ignore
app.mount("/static", StaticFiles(directory=asset_path()), name="static") app.mount("/static", StaticFiles(directory=asset_path()), name="static")

View File

@@ -3,12 +3,27 @@ import logging
from fastapi import Request, status from fastapi import Request, status
from fastapi.encoders import jsonable_encoder from fastapi.encoders import jsonable_encoder
from fastapi.responses import JSONResponse from fastapi.responses import JSONResponse
from sqlalchemy.exc import SQLAlchemyError
from ..errors import ClanError from ..errors import ClanError
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
def sql_error_handler(request: Request, exc: SQLAlchemyError) -> JSONResponse:
log.exception(exc)
detail = [
{
"loc": [],
"msg": exc._message(),
}
]
return JSONResponse(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
content=jsonable_encoder(dict(detail=detail)),
)
def clan_error_handler(request: Request, exc: ClanError) -> JSONResponse: def clan_error_handler(request: Request, exc: ClanError) -> JSONResponse:
log.error("ClanError: %s", exc) log.error("ClanError: %s", exc)
detail = [ detail = [

View File

@@ -1,4 +1,4 @@
from typing import List from typing import List, Optional
from fastapi import APIRouter, Depends from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
@@ -19,6 +19,19 @@ from ..tags import Tags
router = APIRouter() router = APIRouter()
#########################
# #
# Producer #
# #
#########################
@router.post("/api/v1/create_producer", response_model=Producer, tags=[Tags.producers])
def create_producer(
producer: ProducerCreate, db: Session = Depends(sql_db.get_db)
) -> Producer:
# todo checken ob schon da ...
return sql_crud.create_producer(db=db, producer=producer)
@router.get( @router.get(
"/api/v1/get_producers", response_model=List[Producer], tags=[Tags.producers] "/api/v1/get_producers", response_model=List[Producer], tags=[Tags.producers]
) )
@@ -29,30 +42,24 @@ def get_producers(
return producers return producers
@router.post("/api/v1/create_producer", response_model=Producer, tags=[Tags.producers]) @router.get(
def create_producer( "/api/v1/get_producer", response_model=List[Producer], tags=[Tags.producers]
producer: ProducerCreate, db: Session = Depends(sql_db.get_db) )
) -> Producer: def get_producer(
# todo checken ob schon da ... entity_did: str = "did:sov:test:1234",
return sql_crud.create_producer(db=db, producer=producer) skip: int = 0,
limit: int = 100,
db: Session = Depends(sql_db.get_db),
@router.post("/api/v1/create_entity", response_model=Entity, tags=[Tags.entities]) ) -> List[sql_models.Producer]:
def create_entity( producer = sql_crud.get_producers_by_entity_did(db, entity_did=entity_did)
entity: EntityCreate, db: Session = Depends(sql_db.get_db) return producer
) -> EntityCreate:
# todo checken ob schon da ...
return sql_crud.create_entity(db, entity)
@router.get("/api/v1/get_entities", response_model=List[Entity], tags=[Tags.entities])
def get_entities(
skip: int = 0, limit: int = 100, db: Session = Depends(sql_db.get_db)
) -> List[sql_models.Entity]:
entities = sql_crud.get_entities(db, skip=skip, limit=limit)
return entities
#########################
# #
# Consumer #
# #
#########################
@router.post("/api/v1/create_consumer", response_model=Consumer, tags=[Tags.consumers]) @router.post("/api/v1/create_consumer", response_model=Consumer, tags=[Tags.consumers])
def create_consumer( def create_consumer(
consumer: ConsumerCreate, db: Session = Depends(sql_db.get_db) consumer: ConsumerCreate, db: Session = Depends(sql_db.get_db)
@@ -71,15 +78,28 @@ def get_consumers(
return consumers return consumers
@router.get(
"/api/v1/get_consumer", response_model=List[Consumer], tags=[Tags.consumers]
)
def get_consumer(
entity_did: str = "did:sov:test:1234",
skip: int = 0,
limit: int = 100,
db: Session = Depends(sql_db.get_db),
) -> List[sql_models.Consumer]:
consumer = sql_crud.get_consumers_by_entity_did(db, entity_did=entity_did)
return consumer
######################### #########################
# # # #
# REPOSITORY # # REPOSITORY #
# # # #
######################### #########################
@router.post( @router.post(
"/api/v1/add_to_repository", response_model=Repository, tags=[Tags.repositories] "/api/v1/create_repository", response_model=Repository, tags=[Tags.repositories]
) )
def add_to_repository( def create_repository(
repository: RepositoryCreate, db: Session = Depends(sql_db.get_db) repository: RepositoryCreate, db: Session = Depends(sql_db.get_db)
) -> sql_models.Repository: ) -> sql_models.Repository:
# todo checken ob schon da ... # todo checken ob schon da ...
@@ -102,10 +122,42 @@ def get_repositories(
"/api/v1/get_repository", response_model=List[Repository], tags=[Tags.repositories] "/api/v1/get_repository", response_model=List[Repository], tags=[Tags.repositories]
) )
def get_repository( def get_repository(
entity_did: str, entity_did: str = "did:sov:test:1234",
skip: int = 0, skip: int = 0,
limit: int = 100, limit: int = 100,
db: Session = Depends(sql_db.get_db), db: Session = Depends(sql_db.get_db),
) -> List[sql_models.Repository]: ) -> List[sql_models.Repository]:
repository = sql_crud.get_repository_by_did(db, did=entity_did) repository = sql_crud.get_repository_by_did(db, did=entity_did)
return repository return repository
#########################
# #
# Entity #
# #
#########################
@router.post("/api/v1/create_entity", response_model=Entity, tags=[Tags.entities])
def create_entity(
entity: EntityCreate, db: Session = Depends(sql_db.get_db)
) -> EntityCreate:
# todo checken ob schon da ...
return sql_crud.create_entity(db, entity)
@router.get("/api/v1/get_entities", response_model=List[Entity], tags=[Tags.entities])
def get_entities(
skip: int = 0, limit: int = 100, db: Session = Depends(sql_db.get_db)
) -> List[sql_models.Entity]:
entities = sql_crud.get_entities(db, skip=skip, limit=limit)
return entities
@router.get("/api/v1/get_entity", response_model=Optional[Entity], tags=[Tags.entities])
def get_entity(
entity_did: str = "did:sov:test:1234",
skip: int = 0,
limit: int = 100,
db: Session = Depends(sql_db.get_db),
) -> Optional[sql_models.Entity]:
entity = sql_crud.get_entity_by_did(db, did=entity_did)
return entity

View File

@@ -4,35 +4,11 @@ from sqlalchemy.orm import Session
from . import schemas, sql_models from . import schemas, sql_models
#########################
def create_entity(db: Session, entity: schemas.EntityCreate) -> sql_models.Entity: # #
db_entity = sql_models.Entity(**entity.dict()) # Producer #
db.add(db_entity) # #
db.commit() #########################
db.refresh(db_entity)
return db_entity
def get_entities(
db: Session, skip: int = 0, limit: int = 100
) -> List[sql_models.Entity]:
return db.query(sql_models.Entity).offset(skip).limit(limit).all()
def create_consumer(
db: Session, consumer: schemas.ConsumerCreate
) -> sql_models.Consumer:
db_consumer = sql_models.Consumer(**consumer.dict())
db.add(db_consumer)
db.commit()
db.refresh(db_consumer)
return db_consumer
def get_consumers(
db: Session, skip: int = 0, limit: int = 100
) -> List[sql_models.Consumer]:
return db.query(sql_models.Consumer).offset(skip).limit(limit).all()
def create_producer( def create_producer(
@@ -51,6 +27,58 @@ def get_producers(
return db.query(sql_models.Producer).offset(skip).limit(limit).all() return db.query(sql_models.Producer).offset(skip).limit(limit).all()
def get_producers_by_entity_did(
db: Session, entity_did: str, skip: int = 0, limit: int = 100
) -> List[sql_models.Producer]:
return (
db.query(sql_models.Producer)
.filter(sql_models.Producer.entity_did == entity_did)
.offset(skip)
.limit(limit)
.all()
)
#########################
# #
# Consumer #
# #
#########################
def create_consumer(
db: Session, consumer: schemas.ConsumerCreate
) -> sql_models.Consumer:
db_consumer = sql_models.Consumer(**consumer.dict())
db.add(db_consumer)
db.commit()
db.refresh(db_consumer)
return db_consumer
def get_consumers(
db: Session, skip: int = 0, limit: int = 100
) -> List[sql_models.Consumer]:
return db.query(sql_models.Consumer).offset(skip).limit(limit).all()
def get_consumers_by_entity_did(
db: Session, entity_did: str, skip: int = 0, limit: int = 100
) -> List[sql_models.Consumer]:
return (
db.query(sql_models.Consumer)
.filter(sql_models.Consumer.entity_did == entity_did)
.offset(skip)
.limit(limit)
.all()
)
#########################
# #
# REPOSITORY #
# #
#########################
def create_repository( def create_repository(
db: Session, repository: schemas.RepositoryCreate db: Session, repository: schemas.RepositoryCreate
) -> sql_models.Repository: ) -> sql_models.Repository:
@@ -85,3 +113,26 @@ def get_repository_by_did(
.limit(limit) .limit(limit)
.all() .all()
) )
#########################
# #
# Entity #
# #
#########################
def create_entity(db: Session, entity: schemas.EntityCreate) -> sql_models.Entity:
db_entity = sql_models.Entity(**entity.dict())
db.add(db_entity)
db.commit()
db.refresh(db_entity)
return db_entity
def get_entities(
db: Session, skip: int = 0, limit: int = 100
) -> List[sql_models.Entity]:
return db.query(sql_models.Entity).offset(skip).limit(limit).all()
def get_entity_by_did(db: Session, did: str) -> Optional[sql_models.Entity]:
return db.query(sql_models.Entity).filter(sql_models.Entity.did == did).first()