From 394986c05bb95c3f76d31c94f0222137833bbbe0 Mon Sep 17 00:00:00 2001 From: Ohualtex <230626673+Ohualtex@users.noreply.github.com> Date: Tue, 9 Jun 2026 15:43:11 +0300 Subject: [PATCH 1/2] =?UTF-8?q?chore(demo):=20tek-komut=20demo=20ba=C5=9Fl?= =?UTF-8?q?atma=20script'i=20(seed=20+=20app=20+=20Cloudflare=20tunnel)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ./demo-canli.sh → taze demo verisi + uvicorn :8000 + cloudflared quick tunnel. Yazdığı https://...trycloudflare.com URL'i paylaşılır (giriş admin@demo.test / 123456). Ücretsiz demo yayını için — Cloudflare quick tunnel (sabit değil, her çalıştırmada değişir, uyarı sayfası yok). Durdurmak Ctrl+C (app + tunnel birlikte kapanır). Co-Authored-By: Claude Opus 4.8 --- demo-canli.sh | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100755 demo-canli.sh diff --git a/demo-canli.sh b/demo-canli.sh new file mode 100755 index 0000000..cc67143 --- /dev/null +++ b/demo-canli.sh @@ -0,0 +1,32 @@ +#!/bin/bash +# ============================================================ +# SFDAP — Demo Canlı Başlatma (TEK KOMUT) +# ============================================================ +# Yaptığı: taze demo verisi → uygulama (:8000) → Cloudflare tunnel. +# Çalıştır: ./demo-canli.sh +# Tunnel'ın yazdığı https://...trycloudflare.com URL'ini paylaş. +# Giriş: admin@demo.test / 123456 +# Durdur: Ctrl+C (uygulama + tunnel birlikte kapanır) +# ============================================================ +set -e +cd "$(dirname "$0")" + +echo "🌱 [1/3] Demo verisi tazeleniyor..." +PYTHONPATH=. .venv/bin/python scripts/seed_demo_readings.py 2>&1 | tail -1 + +echo "🚀 [2/3] Uygulama :8000'de başlatılıyor..." +.venv/bin/python -m uvicorn app.main:app --port 8000 > /tmp/sfdap-demo-app.log 2>&1 & +APP_PID=$! +trap 'echo; echo "🛑 Kapatılıyor..."; kill $APP_PID 2>/dev/null' EXIT INT TERM + +for i in $(seq 1 30); do + if curl -sf -o /dev/null http://localhost:8000/dashboard/ 2>/dev/null; then + echo " ✓ uygulama hazır"; break + fi + sleep 1 +done + +echo "🌐 [3/3] Cloudflare tunnel açılıyor — aşağıdaki HTTPS URL'ini paylaş:" +echo " (giriş: admin@demo.test / 123456)" +echo "" +cloudflared tunnel --url http://localhost:8000 From ad630e87d9f1b6929f5ee9875111791735de2031 Mon Sep 17 00:00:00 2001 From: Ohualtex <230626673+Ohualtex@users.noreply.github.com> Date: Tue, 9 Jun 2026 16:24:58 +0300 Subject: [PATCH 2/2] =?UTF-8?q?feat(ux):=20k=C3=B6k=20URL'i=20taray=C4=B1c?= =?UTF-8?q?=C4=B1da=20/dashboard/'a=20y=C3=B6nlendir=20(i=C3=A7erik-m?= =?UTF-8?q?=C3=BCzakeresi)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Çıplak kök URL'e giren tarayıcı (Accept: text/html) artık otomatik 307 ile /dashboard/'a yönlenir → kullanıcı sona /dashboard/ yazmak zorunda değil. API client/curl/test (Accept: */* | application/json) eskisi gibi bilgi JSON'ı alır → mevcut sözleşme + 3 kök testi korunur. Co-Authored-By: Claude Opus 4.8 --- app/main.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/main.py b/app/main.py index 37b94f5..9e29e5f 100644 --- a/app/main.py +++ b/app/main.py @@ -20,8 +20,9 @@ from collections.abc import AsyncIterator from contextlib import asynccontextmanager -from fastapi import FastAPI, Response +from fastapi import FastAPI, Request, Response from fastapi.middleware.cors import CORSMiddleware +from fastapi.responses import RedirectResponse from fastapi.staticfiles import StaticFiles from loguru import logger from slowapi.errors import RateLimitExceeded @@ -269,7 +270,12 @@ async def lifespan(app: FastAPI) -> AsyncIterator[None]: @app.get("/", tags=["Root"]) -def root() -> dict: +def root(request: Request): + # Tarayıcı (Accept: text/html) → doğrudan uygulamaya yönlendir; böylece çıplak + # kök URL bile dashboard'a düşer. API client (curl/test; Accept: */* veya + # application/json) eskisi gibi bilgi JSON'ı alır → test/sözleşme bozulmaz. + if "text/html" in request.headers.get("accept", ""): + return RedirectResponse(url="/dashboard/") return { "message": "SFDAP - Akilli Tarim Veri Analizi Platformu API", "docs": "/docs",