feat: implemented deleting tracks, drivers, vehicles with proper data correction

This commit is contained in:
2025-01-16 01:30:32 +01:00
parent 1df2b155f3
commit a88c9e5ff7
9 changed files with 337 additions and 152 deletions

View File

@ -1,7 +1,7 @@
from sqlalchemy.orm import Session
from errors.NotFoundException import NotFoundError
from modules.geoObjects import Driver
from modules.geoObjects import Driver, Track
class DriverHandler:
@ -19,30 +19,32 @@ class DriverHandler:
raise ValueError("name is empty")
driver = Driver(name=name)
self.dbSession.add(driver)
self.dbSession.commit()
return driver
except Exception as e:
raise RuntimeError(f"failed to create driver with errors{e}")
# handles getting a driver by its id from the database
def getDriver(self, driverID: int) -> Driver:
try:
driver = self.dbSession.query(Driver).filter_by(id=driverID).first()
driver = self.dbSession.query(
Driver).filter_by(id=driverID).first()
if driver:
return driver
else:
raise NotFoundError(f"Driver with ID {driverID} not found", errors=[])
raise NotFoundError(
f"Driver with ID {driverID} not found", errors=[])
except Exception as e:
raise RuntimeError(f"failed to get driver with errors{e}")
# handles getting all drivers from the database
def getDrivers(self):
try:
drivers = self.dbSession.query(Driver).all()
driverList = [
{
"id": driver.id,
@ -53,6 +55,19 @@ class DriverHandler:
]
return driverList
except Exception as e:
raise RuntimeError(f"failed to get drivers with errors{e}")
raise RuntimeError(f"failed to get drivers with errors{e}")
def deleteDriver(self, id):
try:
updated_rows = (
self.dbSession.query(Track).filter(
Track.driver_id == id).update({Track.driver_id: 1})
)
self.dbSession.query(Driver).filter(Driver.id == id).delete()
self.dbSession.commit()
except Exception as e:
raise RuntimeError(f"failed to delete driver due to error: {e}")

View File

@ -12,10 +12,10 @@ def db_connect():
engine = create_engine("postgresql://example:example@localhost/geotrack", poolclass=NullPool)
# Überprüfe die Verbindung
with engine.connect() as connection:
print("Verbindung zur Datenbank erfolgreich!")
print("connected to database!")
return engine
except OperationalError as e:
print(f"Fehler bei der Verbindung zur Datenbank: {e}")
print(f"database connection failed: {e}")
return None
# Funktion zur Erstellung der Tabellen
@ -23,11 +23,12 @@ def create_table(engine):
try:
if engine is not None:
Base.metadata.create_all(engine)
print("Tabellen wurden erfolgreich erstellt!")
print("created tables")
else:
print("Keine Verbindung zur Datenbank verfügbar.")
print("error no connection")
except Exception as e:
print(f"Fehler bei der Tabellenerstellung: {e}")
print(f"unexpected error during initial database creation: {e}")
# Track-Tabelle
class Track(Base):

View File

@ -180,4 +180,10 @@ class GPXHandler:
for track in tracks # iterates all tracks and appends them to the list
]
return track_list
return track_list
def deleteTrack(self, trackid):
self.__dbSession.query(Waypoint).filter(Waypoint.track_id == trackid).delete()
self.__dbSession.query(Track).filter(Track.id == trackid).delete()
self.__dbSession.commit()

View File

@ -1,6 +1,6 @@
from sqlalchemy.orm import Session
from modules.geoObjects import Vehicle
from modules.geoObjects import Track, Vehicle
class VehicleHandler:
dbSession: Session
@ -42,3 +42,15 @@ class VehicleHandler:
]
return driverList
def deleteVehicle(self, id):
try:
updated_rows = (
self.dbSession.query(Track).filter(
Track.vehicle_id == id).update({Track.vehicle_id: 1})
)
self.dbSession.query(Vehicle).filter(Vehicle.id == id).delete()
self.dbSession.commit()
except Exception as e:
raise RuntimeError(f"failed to delete driver due to error: {e}")