mirror of
https://github.com/FutureOfMedTech-FITM-hack/backend.git
synced 2025-02-27 09:10:35 +03:00
53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
|
from typing import List
|
||
|
|
||
|
from fastapi import HTTPException
|
||
|
from sqlalchemy import select
|
||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||
|
|
||
|
from ..db.models.users import UserScheme
|
||
|
from . import schemas, services
|
||
|
from .schemas import User
|
||
|
|
||
|
|
||
|
async def get_user(session: AsyncSession, username: str) -> User | None:
|
||
|
r = await session.execute(select(UserScheme).where(UserScheme.username == username))
|
||
|
user = r.scalars().first()
|
||
|
return user
|
||
|
|
||
|
|
||
|
async def get_user_by_email(session: AsyncSession, email: str) -> User | None:
|
||
|
r = await session.execute(select(UserScheme).where(UserScheme.email == email))
|
||
|
user = r.scalars().first()
|
||
|
return user
|
||
|
|
||
|
|
||
|
async def get_users(
|
||
|
session: AsyncSession,
|
||
|
skip: int = 0,
|
||
|
limit: int = 100,
|
||
|
) -> List[User] | None:
|
||
|
r = await session.execute(select(UserScheme).offset(skip).limit(limit))
|
||
|
users = r.scalars().all()
|
||
|
return users
|
||
|
|
||
|
|
||
|
async def create_user(session: AsyncSession, user: schemas.UserCreate) -> UserScheme:
|
||
|
if await get_user(session, user.username):
|
||
|
raise HTTPException(status_code=400, detail="Username already taken")
|
||
|
|
||
|
if await get_user_by_email(session, user.email):
|
||
|
raise HTTPException(status_code=400, detail="Email already taken")
|
||
|
|
||
|
hashed_password = services.get_password_hash(user.password)
|
||
|
db_user = UserScheme(
|
||
|
email=user.email,
|
||
|
username=user.username,
|
||
|
fullname=user.fullname,
|
||
|
hashed_password=hashed_password,
|
||
|
disabled=False,
|
||
|
)
|
||
|
session.add(db_user)
|
||
|
await session.commit()
|
||
|
await session.refresh(db_user)
|
||
|
return db_user
|