52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
|
||
from fastapi import Depends, APIRouter, HTTPException, Depends
|
||
from sqlalchemy.orm import Session
|
||
from app.db import models
|
||
from app.core.security import get_current_user
|
||
from app.api import schemas
|
||
|
||
|
||
# бд
|
||
def get_db():
|
||
db = models.SessionLocal()
|
||
try:
|
||
yield db
|
||
finally:
|
||
db.close()
|
||
|
||
|
||
usersRouter = APIRouter(
|
||
prefix="/users",
|
||
tags=[],
|
||
)
|
||
|
||
# Пример защищенного роута
|
||
|
||
|
||
@usersRouter.get("/me")
|
||
async def read_users_me(current_user: models.User = Depends(get_current_user)):
|
||
return {"id": current_user.id, "username": current_user.username, "first_name": current_user.first_name, "last_name": current_user.last_name, "public_key": current_user.public_key, "encrypted_private_key": current_user.encrypted_private_key}
|
||
|
||
|
||
@usersRouter.get("/all")
|
||
async def read_users_all(current_user: models.User = Depends(get_current_user), db: Session = Depends(get_db)):
|
||
users = db.query(models.User).all()
|
||
return [{"id": user.id, "username": user.username, "name": f"{user.first_name} {user.last_name or ''}".strip(), "public_key": user.public_key} for user in users]
|
||
|
||
|
||
@usersRouter.get("/{user_id}", response_model=schemas.UserPublic)
|
||
def get_user_by_id(
|
||
user_id: int,
|
||
db: Session = Depends(get_db),
|
||
current_user: models.User = Depends(get_current_user)
|
||
):
|
||
"""
|
||
Получить публичную информацию о пользователе, включая его публичный ключ.
|
||
"""
|
||
user = db.query(models.User).filter(models.User.id == user_id).first()
|
||
|
||
if not user:
|
||
raise HTTPException(status_code=404, detail="Пользователь не найден")
|
||
|
||
return user
|