"Refactor database connection and templates using shm files for improved performance"
This commit is contained in:
@@ -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:
|
||||
|
Reference in New Issue
Block a user