"Refactor database schema for guest blueprint"

This commit is contained in:
2025-05-29 11:32:28 +02:00
parent 61630a97c6
commit 4e4d89b6aa
5 changed files with 505 additions and 295 deletions

View File

@@ -247,16 +247,23 @@ def api_start_job_with_otp(otp):
"""Job mit OTP starten."""
try:
with get_cached_session() as db_session:
# OTP validieren und Job finden
guest_request = db_session.query(GuestRequest).filter_by(otp_code=otp).first()
if not guest_request:
# Alle genehmigten Anfragen mit OTP durchsuchen
guest_requests = db_session.query(GuestRequest).filter_by(status="approved").all()
valid_request = None
for req in guest_requests:
if req.verify_otp(otp):
valid_request = req
break
if not valid_request:
return jsonify({"error": "Ungültiger oder abgelaufener Code"}), 400
if not guest_request.job_id:
if not valid_request.job_id:
return jsonify({"error": "Kein Job mit diesem Code verknüpft"}), 400
# Job laden
job = db_session.query(Job).filter_by(id=guest_request.job_id).first()
job = db_session.query(Job).filter_by(id=valid_request.job_id).first()
if not job:
return jsonify({"error": "Job nicht gefunden"}), 404
@@ -264,22 +271,37 @@ def api_start_job_with_otp(otp):
if job.status != "scheduled":
return jsonify({"error": "Job kann nicht gestartet werden"}), 400
# Grace-Period prüfen (5 Minuten vor bis 5 Minuten nach geplantem Start)
now = datetime.now()
start_time = job.start_at
grace_start = start_time - timedelta(minutes=5)
grace_end = start_time + timedelta(minutes=5)
if now < grace_start:
return jsonify({
"error": f"Der Job kann erst ab {grace_start.strftime('%H:%M')} Uhr gestartet werden"
}), 400
if now > job.end_at:
return jsonify({"error": "Der Job ist bereits abgelaufen"}), 400
# Job starten
job.status = "active"
job.start_at = datetime.now()
job.start_at = now # Aktualisiere Startzeit auf jetzt
# OTP als verwendet markieren (optional: OTP löschen)
guest_request.otp_used_at = datetime.now()
# OTP als verwendet markieren
valid_request.otp_used_at = now
db_session.commit()
logger.info(f"Job {job.id} mit OTP {otp} gestartet")
logger.info(f"Job {job.id} mit OTP {otp} gestartet von IP: {request.remote_addr}")
return jsonify({
"success": True,
"job_id": job.id,
"status": job.status,
"started_at": job.start_at.isoformat()
"started_at": job.start_at.isoformat(),
"end_at": job.end_at.isoformat()
})
except Exception as e: