"Refactor database schema for guest blueprint"
This commit is contained in:
@@ -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:
|
||||
|
Reference in New Issue
Block a user