Реализация crud и его добавление в RESTfull
This commit is contained in:
58
backend-app/repo/crud/login.py
Normal file
58
backend-app/repo/crud/login.py
Normal file
@ -0,0 +1,58 @@
|
||||
from typing import Sequence
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy import select, delete, update
|
||||
from ..schemas import LoginRead, LoginCreate, LoginUpdate
|
||||
from ..models import LoginModel
|
||||
|
||||
from utils.hashing import get_password_hash
|
||||
|
||||
async def get_all_logins(
|
||||
session: AsyncSession
|
||||
) -> Sequence[LoginModel]:
|
||||
stmt = select(LoginModel).order_by(LoginModel.id)
|
||||
result = await session.scalars(stmt)
|
||||
return result.all()
|
||||
|
||||
async def get_login(
|
||||
session: AsyncSession,
|
||||
login_id: int
|
||||
) -> LoginModel:
|
||||
db_login = await session.get(LoginModel,login_id)
|
||||
if db_login is None:
|
||||
return None
|
||||
return db_login
|
||||
|
||||
async def create_login(
|
||||
session:AsyncSession,
|
||||
login_create: LoginCreate
|
||||
) -> LoginModel:
|
||||
login = LoginModel(**login_create.model_dump())
|
||||
login.password = get_password_hash(login.password)
|
||||
session.add(login)
|
||||
await session.commit()
|
||||
return login
|
||||
|
||||
async def delete_login(
|
||||
session: AsyncSession,
|
||||
login_id: int
|
||||
) -> LoginModel:
|
||||
db_login = await session.get(LoginModel,login_id)
|
||||
if db_login is None:
|
||||
return None
|
||||
stmt = delete(LoginModel).filter(LoginModel.id == login_id)
|
||||
await session.execute(stmt)
|
||||
await session.commit()
|
||||
return db_login.one_or_none()
|
||||
|
||||
async def update_login(
|
||||
session:AsyncSession,
|
||||
login_id: int,
|
||||
login_update: LoginUpdate
|
||||
) -> LoginModel:
|
||||
db_login = await session.get(LoginModel,login_id)
|
||||
if db_login is None:
|
||||
return None
|
||||
for var, value in vars(login_update).items():
|
||||
setattr(db_login, var, value if var != "password" else get_password_hash(value)) if value else None
|
||||
await session.commit()
|
||||
return db_login
|
58
backend-app/repo/crud/user.py
Normal file
58
backend-app/repo/crud/user.py
Normal file
@ -0,0 +1,58 @@
|
||||
from typing import Sequence
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy import select, delete, update
|
||||
from ..schemas import UserRead, UserCreate,UserUpdate
|
||||
from ..models import UserModel
|
||||
|
||||
|
||||
|
||||
async def get_all_users(
|
||||
session: AsyncSession
|
||||
) -> Sequence[UserModel]:
|
||||
stmt = select(UserModel).order_by(UserModel.id)
|
||||
result = await session.scalars(stmt)
|
||||
return result.all()
|
||||
|
||||
async def get_user(
|
||||
session: AsyncSession,
|
||||
user_id: int
|
||||
) -> UserModel:
|
||||
db_user = await session.get(UserModel, user_id)
|
||||
if db_user is None:
|
||||
return None
|
||||
return db_user
|
||||
|
||||
async def create_user(
|
||||
session:AsyncSession,
|
||||
user_create: UserCreate
|
||||
) -> UserModel:
|
||||
user = UserModel(**user_create.model_dump())
|
||||
session.add(user)
|
||||
await session.commit()
|
||||
return user
|
||||
|
||||
async def delete_user(
|
||||
session: AsyncSession,
|
||||
user_id: int
|
||||
) -> UserModel:
|
||||
db_user = await session.get(UserModel, user_id)
|
||||
if db_user is None:
|
||||
return None
|
||||
stmt = delete(UserModel).filter(UserModel.id == user_id)
|
||||
await session.execute(stmt)
|
||||
await session.commit()
|
||||
return db_user.one_or_none()
|
||||
|
||||
async def update_user(
|
||||
session:AsyncSession,
|
||||
user_id: int,
|
||||
user_update: UserUpdate
|
||||
) -> UserModel:
|
||||
db_user = await session.get(UserModel, user_id)
|
||||
if db_user is None:
|
||||
return None
|
||||
for var, value in vars(user_update).items():
|
||||
setattr(db_user, var, value) if value else None
|
||||
await session.commit()
|
||||
await session.refresh(db_user)
|
||||
return db_user
|
@ -1,2 +1,33 @@
|
||||
from pydantic import BaseModel
|
||||
from pydantic import BaseModel, EmailStr
|
||||
from typing import Optional, Sequence
|
||||
|
||||
|
||||
class LoginBase(BaseModel):
|
||||
username:str
|
||||
password:str
|
||||
|
||||
class LoginUpdate(BaseModel):
|
||||
username:Optional[str] = None
|
||||
password:Optional[str] = None
|
||||
|
||||
class LoginCreate(LoginBase):
|
||||
pass
|
||||
|
||||
class LoginRead(LoginBase):
|
||||
id:int
|
||||
|
||||
class UserUpdate(BaseModel):
|
||||
firstname:Optional[str] = None
|
||||
lastname:Optional[str] = None
|
||||
age: Optional[int] = None
|
||||
email: Optional[EmailStr] = None
|
||||
|
||||
class UserBase(UserUpdate):
|
||||
login_id: int
|
||||
|
||||
class UserCreate(UserBase):
|
||||
pass
|
||||
|
||||
|
||||
class UserRead(UserBase):
|
||||
id:int
|
Reference in New Issue
Block a user