"Refactor database connection and templates using shm files for improved performance"

This commit is contained in:
2025-05-29 18:21:15 +02:00
parent 629177f0fe
commit e464fb9587
5 changed files with 64 additions and 13 deletions

View File

@@ -769,7 +769,8 @@ class GuestRequest(Base):
name = Column(String(100), nullable=False)
email = Column(String(120))
reason = Column(Text)
duration_min = Column(Integer)
duration_min = Column(Integer) # Bestehend - wird für Backward-Kompatibilität beibehalten
duration_minutes = Column(Integer) # Neu hinzugefügt für API-Kompatibilität
created_at = Column(DateTime, default=datetime.now)
status = Column(String(20), default="pending") # pending|approved|denied
printer_id = Column(Integer, ForeignKey("printers.id"))
@@ -778,37 +779,71 @@ class GuestRequest(Base):
author_ip = Column(String(50))
otp_used_at = Column(DateTime, nullable=True) # Zeitpunkt der OTP-Verwendung
# Erweiterte Attribute für Datei-Management
file_name = Column(String(255), nullable=True) # Name der hochgeladenen Datei
file_path = Column(String(500), nullable=True) # Pfad zur hochgeladenen Datei
copies = Column(Integer, default=1) # Anzahl der Kopien
# Neue Felder für Admin-Verwaltung
processed_by = Column(Integer, ForeignKey("users.id"), nullable=True) # Admin der die Anfrage bearbeitet hat
processed_at = Column(DateTime, nullable=True) # Zeitpunkt der Bearbeitung
approval_notes = Column(Text, nullable=True) # Notizen bei Genehmigung
rejection_reason = Column(Text, nullable=True) # Grund bei Ablehnung
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now) # Automatische Aktualisierung
printer = relationship("Printer")
# Zusätzliche Zeitstempel für bessere Verwaltung
approved_at = Column(DateTime, nullable=True) # Zeitpunkt der Genehmigung
rejected_at = Column(DateTime, nullable=True) # Zeitpunkt der Ablehnung
approved_by = Column(Integer, ForeignKey("users.id"), nullable=True) # Admin der genehmigt hat
rejected_by = Column(Integer, ForeignKey("users.id"), nullable=True) # Admin der abgelehnt hat
# OTP-Verwaltung erweitert
otp_expires_at = Column(DateTime, nullable=True) # Ablaufzeit des OTP-Codes
assigned_printer_id = Column(Integer, ForeignKey("printers.id"), nullable=True) # Zugewiesener Drucker
# Beziehungen
printer = relationship("Printer", foreign_keys=[printer_id])
assigned_printer = relationship("Printer", foreign_keys=[assigned_printer_id])
job = relationship("Job")
processed_by_user = relationship("User", foreign_keys=[processed_by]) # Admin der bearbeitet hat
approved_by_user = relationship("User", foreign_keys=[approved_by]) # Admin der genehmigt hat
rejected_by_user = relationship("User", foreign_keys=[rejected_by]) # Admin der abgelehnt hat
def to_dict(self) -> dict:
"""
Konvertiert die Gastanfrage in ein Dictionary.
"""
return {
"id": self.id,
"name": self.name,
"email": self.email,
"reason": self.reason,
"duration_min": self.duration_min,
"duration_minutes": self.duration_minutes or self.duration_min, # Fallback auf duration_min
"file_name": self.file_name,
"file_path": self.file_path,
"copies": self.copies,
"created_at": self.created_at.isoformat() if self.created_at else None,
"status": self.status,
"printer_id": self.printer_id,
"assigned_printer_id": self.assigned_printer_id,
"otp_code": self.otp_code,
"otp_expires_at": self.otp_expires_at.isoformat() if self.otp_expires_at else None,
"otp_used_at": self.otp_used_at.isoformat() if self.otp_used_at else None,
"job_id": self.job_id,
"author_ip": self.author_ip,
"processed_by": self.processed_by,
"processed_at": self.processed_at.isoformat() if self.processed_at else None,
"approval_notes": self.approval_notes,
"rejection_reason": self.rejection_reason,
"updated_at": self.updated_at.isoformat() if self.updated_at else None,
"approved_at": self.approved_at.isoformat() if self.approved_at else None,
"rejected_at": self.rejected_at.isoformat() if self.rejected_at else None,
"approved_by": self.approved_by,
"rejected_by": self.rejected_by,
"printer": self.printer.to_dict() if self.printer else None,
"assigned_printer": self.assigned_printer.to_dict() if self.assigned_printer else None,
"job": self.job.to_dict() if self.job else None,
"processed_by_user": self.processed_by_user.to_dict() if self.processed_by_user else None
"processed_by_user": self.processed_by_user.to_dict() if self.processed_by_user else None,
"approved_by_user": self.approved_by_user.to_dict() if self.approved_by_user else None,
"rejected_by_user": self.rejected_by_user.to_dict() if self.rejected_by_user else None
}
def generate_otp(self) -> str: