From 425e0ae71530770a950ec41f5aae4cc447b622a3 Mon Sep 17 00:00:00 2001
From: Alfred Ashur Oshana <alfredashur.oshana@stud.h-da.de>
Date: Fri, 1 Nov 2024 21:16:44 +0100
Subject: [PATCH] refactor

---
 pilab/events/meta.py   | 10 +++++++++-
 pilab/schemas/Image.py | 19 +++++++++++++++++--
 pilab/schemas/Key.py   |  7 ++++++-
 pilab/schemas/Pi.py    |  6 +-----
 setup.py               |  2 +-
 5 files changed, 34 insertions(+), 10 deletions(-)

diff --git a/pilab/events/meta.py b/pilab/events/meta.py
index 4c8818b..481193c 100644
--- a/pilab/events/meta.py
+++ b/pilab/events/meta.py
@@ -61,7 +61,7 @@ class Pi_old(Host):
     position: int
     ssh_host_ed25519_key: Optional[str]
 
-class Pi(Host):
+class Pi_legacy(Host):
     """
     representation of pi object with host id
     """
@@ -73,6 +73,14 @@ class Pi(Host):
     playbook_id: Optional[int]
     cube_id: int
 
+class Pi(Host):
+    """
+    representation of pi object with host id
+    """
+    serial: bytes
+    position: int
+    cube_id: int
+
 class PiUpdate(HostUpdate):
     """
     representation of pi object for update
diff --git a/pilab/schemas/Image.py b/pilab/schemas/Image.py
index b9f8ae6..917bac1 100644
--- a/pilab/schemas/Image.py
+++ b/pilab/schemas/Image.py
@@ -1,4 +1,4 @@
-from sqlalchemy import Column, Integer, ForeignKey, String, Boolean, BigInteger, DateTime
+from sqlalchemy import Column, Integer, ForeignKey, String, Boolean, DateTime
 
 from pilab.database import Base, MAC, SERIAL, IP
 
@@ -13,6 +13,11 @@ class ScriptType(Base):
     script = Column(String)
     script_chroot = Column(String)
 
+class ScriptBindingType(Base):
+    __tablename__ = "script_bindings"
+    script_id = Column(Integer, ForeignKey('scripts.id'), primary_key=True)
+    pi_id = Column(Integer, ForeignKey('pis.host_id'), primary_key=True)
+
 class ImageType(Base):
     __tablename__ = "images"
     id = Column(Integer, primary_key=True)
@@ -25,8 +30,18 @@ class ImageType(Base):
     change = Column(DateTime)
     script_id = Column(Integer, ForeignKey('scripts.id'))
 
+class ImageBindingType(Base):
+    __tablename__ = "image_bindings"
+    image_id = Column(Integer, ForeignKey('images.id'), primary_key=True)
+    pi_id = Column(Integer, ForeignKey('pis.host_id'), primary_key=True)
+
 class UserDataType(Base):
     __tablename__ = "user_data"
     id = Column(Integer, primary_key=True)
     owner = Column(String)
-    data = Column(String)
\ No newline at end of file
+    data = Column(String)
+
+class UserDataBindingType(Base):
+    __tablename__ = "user_data_bindings"
+    user_data_id = Column(Integer, ForeignKey('user_data.id'), primary_key=True)
+    pi_id = Column(Integer, ForeignKey('pis.host_id'), primary_key=True)
\ No newline at end of file
diff --git a/pilab/schemas/Key.py b/pilab/schemas/Key.py
index 35e3053..1c4ee03 100644
--- a/pilab/schemas/Key.py
+++ b/pilab/schemas/Key.py
@@ -1,4 +1,4 @@
-from sqlalchemy import Column, Integer, String
+from sqlalchemy import Column, Integer, ForeignKey, String
 
 from pilab.database import Base, MAC, SERIAL, IP
 
@@ -9,3 +9,8 @@ class KeyType(Base):
     id = Column(Integer, primary_key=True)
     owner = Column(String)
     host_key = Column(String)
+
+class KeyBindingType(Base):
+    __tablename__ = "key_bindings"
+    key_id = Column(Integer, ForeignKey('keys.id'), primary_key=True)
+    pi_id = Column(Integer, ForeignKey('pis.host_id'), primary_key=True)
\ No newline at end of file
diff --git a/pilab/schemas/Pi.py b/pilab/schemas/Pi.py
index 7b5bdb3..32c5b58 100644
--- a/pilab/schemas/Pi.py
+++ b/pilab/schemas/Pi.py
@@ -8,8 +8,4 @@ class PiType(Base):
     host_id = Column(Integer, ForeignKey('hosts.id'), primary_key=True)
     cube_id = Column(Integer, ForeignKey('cubes.id'), primary_key=True)
     serial = Column(SERIAL())
-    position = Column(Integer)
-    user_data_id = Column(Integer, ForeignKey('user_data.id'))
-    image_id = Column(Integer, ForeignKey('images.id'))
-    playbook_id = Column(Integer)
-    key_id = Column(Integer, ForeignKey('keys.id'))
\ No newline at end of file
+    position = Column(Integer)
\ No newline at end of file
diff --git a/setup.py b/setup.py
index df4658f..ffb615b 100644
--- a/setup.py
+++ b/setup.py
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
 
 setup(
     name='pilab',
-    version='5.0.2',
+    version='5.0.3',
     description='Shared-Libs for the pi-lab microservices',
     url='https://code.fbi.h-da.de/api/v4/projects/27896/packages/pypi/pilab',
     author='Max Reinheimer',
-- 
GitLab