51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
from fastapi import APIRouter, Depends, HTTPException
|
|
from typing import Sequence
|
|
from models.users import User
|
|
from schemas.users import UserOut, UserIn
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from db.session import get_db
|
|
import services.users as user_service
|
|
from sqlalchemy.exc import IntegrityError
|
|
from core.security import hash_password, get_current_user
|
|
|
|
router = APIRouter(prefix="/users", tags=["users"])
|
|
|
|
|
|
@router.get("/me", response_model=UserOut)
|
|
async def get_self(user: User = Depends(get_current_user)):
|
|
return user
|
|
|
|
|
|
@router.get("/", response_model=list[UserOut])
|
|
async def get_users(db: AsyncSession = Depends(get_db)) -> Sequence[User]:
|
|
users = await user_service.get_users(db)
|
|
|
|
return users
|
|
|
|
|
|
@router.get("/{id}", response_model=UserOut)
|
|
async def get_user_by_id(id: int, db: AsyncSession = Depends(get_db)) -> User:
|
|
|
|
user = await user_service.get_user_by_id(id, db)
|
|
|
|
if user:
|
|
return user
|
|
else:
|
|
raise HTTPException(404, "User not found")
|
|
|
|
|
|
@router.post("/register", response_model=UserOut)
|
|
async def register(user: UserIn, db: AsyncSession = Depends(get_db)) -> User:
|
|
|
|
hashed = hash_password(user.password)
|
|
|
|
try:
|
|
new_user = await user_service.create_user(User(email=user.email, password = hashed), db)
|
|
|
|
return new_user
|
|
|
|
except IntegrityError:
|
|
await db.rollback()
|
|
raise HTTPException(400, f"User with email {user.email} is already exist...")
|
|
|
|
|