diff --git a/.gitignore b/.gitignore index 6e87e73443ebee35e218f004d38d002244d4ebbe..6ef315ca54660eeeb32561d3b3f3f1e1b1142555 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ /Pipfile.lock /settings.json -/src/storageLeaf.db +/src/*.db diff --git a/src/StorageLeaf.py b/src/StorageLeaf.py index 36ec3249b07d83e2650b8f48760c96e9d6f9d2fc..23cb865dfb63bc0b2f32a472a7fe437735b861d5 100644 --- a/src/StorageLeaf.py +++ b/src/StorageLeaf.py @@ -3,7 +3,7 @@ import json import uvicorn from TheCodeLabs_BaseUtils.DefaultLogger import DefaultLogger from fastapi import FastAPI -from starlette.responses import RedirectResponse, JSONResponse +from starlette.responses import RedirectResponse from Settings import SETTINGS from logic import Constants @@ -13,12 +13,14 @@ from routers import DeviceRouter, SensorRouter, MeasurementRouter LOGGER = DefaultLogger().create_logger_if_not_exists(Constants.APP_NAME) -# create database tables -Models.Base.metadata.create_all(bind=engine) +databaseSettings = SETTINGS['database'] with open('version.json', 'r', encoding='UTF-8') as f: VERSION = json.load(f)['version'] +# create database tables +Models.Base.metadata.create_all(bind=engine) + app = FastAPI(title=Constants.APP_NAME, version=VERSION['name'], description='The StorageLeaf API', diff --git a/src/logic/databaseNew/Crud.py b/src/logic/databaseNew/Crud.py index 28499428733135fcb8959cdd1ebdc256b22267de..ecfb9c22a17d77d6d0e1b8cd4d1a938e5a2c0aa0 100644 --- a/src/logic/databaseNew/Crud.py +++ b/src/logic/databaseNew/Crud.py @@ -3,10 +3,26 @@ from datetime import datetime from sqlalchemy import and_ from sqlalchemy.orm import Session +from Settings import SETTINGS +from logic.BackupService import BackupService from logic.databaseNew import Models, Schemas DATE_FORMAT = '%Y-%m-%d %H:%M:%S' +BACKUP_SERVICE = BackupService(SETTINGS['database']['databasePath'], **SETTINGS['database']['backup']) + + +def notify_backup_service(backupService: BackupService): + def inner(func): + def wrapper(*args, **kwargs): + returnValue = func(*args, **kwargs) + backupService.perform_modification() + return returnValue + + return wrapper + + return inner + # ===== devices ===== @@ -23,6 +39,7 @@ def get_device_by_name(db: Session, name: str): return db.query(Models.Device).filter(Models.Device.name == name).first() +@notify_backup_service(BACKUP_SERVICE) def create_device(db: Session, device: Schemas.DeviceCreate): dbDevice = Models.Device(name=device.name) db.add(dbDevice) @@ -31,6 +48,7 @@ def create_device(db: Session, device: Schemas.DeviceCreate): return dbDevice +@notify_backup_service(BACKUP_SERVICE) def delete_device(db: Session, device: Schemas.Device): db.delete(device) db.commit() @@ -51,6 +69,7 @@ def get_sensor_by_name_and_device_id(db: Session, sensorName: str, deviceId: int Models.Sensor.name == sensorName and Models.Sensor.deviceId == deviceId).first() +@notify_backup_service(BACKUP_SERVICE) def create_sensor(db: Session, sensor: Schemas.SensorCreate): dbSensor = Models.Sensor(**sensor.dict()) db.add(dbSensor) @@ -59,6 +78,7 @@ def create_sensor(db: Session, sensor: Schemas.SensorCreate): return dbSensor +@notify_backup_service(BACKUP_SERVICE) def delete_sensor(db: Session, sensor: Schemas.Sensor): db.delete(sensor) db.commit() @@ -94,6 +114,7 @@ def get_measurement(db: Session, measurementId: int): return db.query(Models.Measurement).filter(Models.Measurement.id == measurementId).first() +@notify_backup_service(BACKUP_SERVICE) def create_measurement(db: Session, measurement: Schemas.MeasurementCreate): dbMeasurement = Models.Measurement(**measurement.dict(), timestamp=__get_current_datetime()) db.add(dbMeasurement) @@ -102,6 +123,7 @@ def create_measurement(db: Session, measurement: Schemas.MeasurementCreate): return dbMeasurement +@notify_backup_service(BACKUP_SERVICE) def delete_measurement(db: Session, measurement: Schemas.Measurement): db.delete(measurement) db.commit()