From 12f99ca3715de113bf963d656f5d1a1acd888812 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Tue, 12 Jan 2021 23:51:33 +0100
Subject: [PATCH] split routing into specific router

---
 src/Dependencies.py         |  9 +++++++
 src/main.py                 | 47 ++++---------------------------------
 src/routers/DeviceRouter.py | 34 +++++++++++++++++++++++++++
 src/routers/__init__.py     |  0
 4 files changed, 48 insertions(+), 42 deletions(-)
 create mode 100644 src/Dependencies.py
 create mode 100644 src/routers/DeviceRouter.py
 create mode 100644 src/routers/__init__.py

diff --git a/src/Dependencies.py b/src/Dependencies.py
new file mode 100644
index 0000000..a96609f
--- /dev/null
+++ b/src/Dependencies.py
@@ -0,0 +1,9 @@
+from logic.databaseNew.Database import SessionLocal
+
+
+def get_database():
+    db = SessionLocal()
+    try:
+        yield db
+    finally:
+        db.close()
diff --git a/src/main.py b/src/main.py
index 700d056..ca293f7 100644
--- a/src/main.py
+++ b/src/main.py
@@ -1,56 +1,19 @@
 import json
-from typing import List
 
 import uvicorn
-from fastapi import FastAPI, Depends, HTTPException
-from pydantic import BaseModel
-from sqlalchemy.orm import Session
+from fastapi import FastAPI
 
-from logic.databaseNew import Models, Schemas, Crud
-from logic.databaseNew.Database import engine, SessionLocal
+from logic.databaseNew import Models
+from logic.databaseNew.Database import engine
+from routers import DeviceRouter
 
 Models.Base.metadata.create_all(bind=engine)
 
 app = FastAPI()
+app.include_router(DeviceRouter.router)
 
 with open('../settings.json', 'r', encoding='UTF-8') as f:
     settings = json.load(f)
 
-
-# Dependency
-def get_db():
-    db = SessionLocal()
-    try:
-        yield db
-    finally:
-        db.close()
-
-
-class Device(BaseModel):
-    id: int
-    name: str
-
-
-@app.get('/devices/', response_model=List[Schemas.Device])
-def read_devices(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
-    return Crud.get_devices(db, skip=skip, limit=limit)
-
-
-@app.get('/devices/{deviceId}', response_model=Schemas.Device)
-def read_device(deviceId: int, db: Session = Depends(get_db)):
-    device = Crud.get_device(db, deviceId=deviceId)
-    if device is None:
-        raise HTTPException(status_code=404, detail='Device not found')
-    return device
-
-
-@app.post("/devices/", response_model=Schemas.Device)
-def create_user(device: Schemas.DeviceCreate, db: Session = Depends(get_db)):
-    createdDevice = Crud.get_device_by_name(db, device.name)
-    if createdDevice:
-        raise HTTPException(status_code=400, detail="Device with this name already exists")
-    return Crud.create_device(db=db, device=device)
-
-
 if __name__ == '__main__':
     uvicorn.run(app, host='0.0.0.0', port=8000)
diff --git a/src/routers/DeviceRouter.py b/src/routers/DeviceRouter.py
new file mode 100644
index 0000000..b560a4f
--- /dev/null
+++ b/src/routers/DeviceRouter.py
@@ -0,0 +1,34 @@
+from typing import List
+
+from fastapi import APIRouter, HTTPException, Depends
+from sqlalchemy.orm import Session
+
+from Dependencies import get_database
+from logic.databaseNew import Schemas, Crud
+
+router = APIRouter(
+    prefix='/devices',
+    tags=['devices'],
+    responses={404: {'description': 'Not found'}},
+)
+
+
+@router.get('/', response_model=List[Schemas.Device])
+async def read_devices(skip: int = 0, limit: int = 100, db: Session = Depends(get_database)):
+    return Crud.get_devices(db, skip=skip, limit=limit)
+
+
+@router.get('/{deviceId}', response_model=Schemas.Device, responses={404: {'description': 'Device not found'}})
+async def read_device(deviceId: int, db: Session = Depends(get_database)):
+    device = Crud.get_device(db, deviceId=deviceId)
+    if device is None:
+        raise HTTPException(status_code=404, detail='Device not found')
+    return device
+
+
+@router.post('/', response_model=Schemas.Device, responses={400: {'description': 'Device with this name already exists'}})
+async def create_user(device: Schemas.DeviceCreate, db: Session = Depends(get_database)):
+    createdDevice = Crud.get_device_by_name(db, device.name)
+    if createdDevice:
+        raise HTTPException(status_code=400, detail='Device with this name already exists')
+    return Crud.create_device(db=db, device=device)
diff --git a/src/routers/__init__.py b/src/routers/__init__.py
new file mode 100644
index 0000000..e69de29
-- 
GitLab