37 lines
1.9 KiB
Python
37 lines
1.9 KiB
Python
from fastapi import APIRouter, Depends, HTTPException, status
|
|
from sqlalchemy.orm import Session
|
|
from app.schemas.client import CheckUpdateRequest, CheckUpdateResponse, LoginResponse
|
|
from app.schemas.auth import UserLogin
|
|
from app.services.group_service import group_service
|
|
from app.services.auth_service import auth_service
|
|
from app.db import get_db
|
|
|
|
router = APIRouter()
|
|
|
|
@router.post("/check_update", response_model=CheckUpdateResponse)
|
|
async def check_update(request: CheckUpdateRequest, db: Session = Depends(get_db)):
|
|
try:
|
|
data = group_service.check_update(db, request.username)
|
|
return CheckUpdateResponse(code=200, data=data, message="success")
|
|
except HTTPException as e:
|
|
# Wrap HTTPException to match response format if needed, or let global handler handle it.
|
|
# Requirements imply specific format.
|
|
# But usually 4xx/5xx are handled by exception handlers.
|
|
# If I want to return 200 with code=404 in body (anti-pattern but possible), I should do it here.
|
|
# The example shows code=200.
|
|
# Let's assume standard HTTP status codes for errors, but if successful, return wrapped data.
|
|
raise e
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
@router.post("/login", response_model=LoginResponse)
|
|
async def login(login_data: UserLogin, db: Session = Depends(get_db)):
|
|
# Re-use UserLogin schema as it matches {username, password} + device_id (optional in spec but present in schema)
|
|
# Spec says {username, password}, UserLogin has device_id.
|
|
# If device_id is missing in request, validation fails.
|
|
# Spec example doesn't show device_id in request, but "Backend Development Guidelines" 4.5 says "Must provide stable device_id".
|
|
# So I will assume the client sends device_id.
|
|
|
|
data = auth_service.client_login(db, login_data)
|
|
return LoginResponse(code=200, data=data, message="success")
|