From 92946ab24b9a0c738c83ca2814c1a43d55c584d0 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sat, 16 Jan 2021 22:19:43 +0100
Subject: [PATCH] call backup service on creation and deletion of database
 items

---
 .gitignore                    |  2 +-
 src/StorageLeaf.py            |  8 +++++---
 src/logic/databaseNew/Crud.py | 22 ++++++++++++++++++++++
 3 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/.gitignore b/.gitignore
index 6e87e73..6ef315c 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 36ec324..23cb865 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 2849942..ecfb9c2 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()
-- 
GitLab