Untitled
unknown
plain_text
a year ago
2.7 kB
16
Indexable
# app/main.py
from datetime import timedelta
from fastapi import FastAPI, Depends, HTTPException, status
from fastapi.middleware.cors import CORSMiddleware
from sqlalchemy.ext.asyncio import AsyncSession
from app import crud, database, schemas, auth
from app.database import get_session
from app.settings import settings
app = FastAPI(title="Dijital Patoloji Backend")
# ✅ CORS (frontend hem localhost hem 127.0.0.1’den gelebilir)
origins = [o.strip() for o in settings.FRONTEND_ORIGINS.split(",")]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.on_event("startup")
async def on_startup():
await database.init_db()
# -------------------------
# Kullanıcı oluşturma (Register) — sadece query param
# -------------------------
@app.post("/users/", response_model=schemas.UserRead, status_code=status.HTTP_201_CREATED)
async def create_user(
username: str,
password: str,
email: str | None = None,
db: AsyncSession = Depends(get_session),
):
# Aynı kullanıcı var mı?
db_user = await crud.get_user_by_username(db, username)
if db_user:
raise HTTPException(status_code=400, detail="Kullanıcı zaten mevcut")
return await crud.create_user(
db,
username=username,
password=password,
email=email,
)
# -------------------------
# Giriş (Login) — username veya email ile
# -------------------------
@app.post("/login", response_model=schemas.Token)
async def login(body: schemas.LoginRequest, db: AsyncSession = Depends(get_session)):
# Önce kullanıcı adına göre ara
user = await crud.get_user_by_username(db, body.username)
# Bulunamadıysa ve '@' içeriyorsa e-postaya göre dene
if not user and "@" in body.username:
user = await crud.get_user_by_email(db, body.username)
if not user or not auth.verify_password(body.password, user.hashed_password):
raise HTTPException(status_code=401, detail="Kullanıcı adı veya şifre hatalı")
token = auth.create_access_token(
{"sub": user.username},
timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES),
)
return {"access_token": token, "token_type": "bearer"}
# -------------------------
# Korumalı örnek endpoint
# -------------------------
@app.get("/me", response_model=schemas.UserRead)
async def me(current_user=Depends(auth.get_current_user)):
return {
"id": current_user.id,
"username": current_user.username,
"email": current_user.email,
}
Editor is loading...
Leave a Comment