You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.4 KiB
53 lines
1.4 KiB
from ..models import Database
|
|
from ..schemas import DatabaseBase, DatabaseSchema
|
|
from sqlalchemy import select, delete
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from typing import Sequence, Optional, List
|
|
async def get_all(
|
|
session: AsyncSession
|
|
) -> Sequence[DatabaseSchema]:
|
|
stmt = select(Database).order_by(Database.id)
|
|
result = await session.scalars(stmt)
|
|
return result.all()
|
|
|
|
async def get(
|
|
session: AsyncSession,
|
|
id: int
|
|
) -> DatabaseSchema:
|
|
db_login = await session.get(Database,id)
|
|
if db_login is None:
|
|
return None
|
|
return db_login
|
|
|
|
async def create(
|
|
session:AsyncSession,
|
|
model: DatabaseBase
|
|
) -> DatabaseSchema:
|
|
login = Database(**model.model_dump())
|
|
session.add(login)
|
|
await session.commit()
|
|
return login
|
|
|
|
async def delete(
|
|
session: AsyncSession,
|
|
id: int
|
|
):
|
|
db_login = await session.get(Database,id)
|
|
if db_login is None:
|
|
return None
|
|
stmt = delete(Database).filter(Database.id == id)
|
|
await session.execute(stmt)
|
|
await session.commit()
|
|
|
|
async def update(
|
|
session:AsyncSession,
|
|
id: int,
|
|
model: DatabaseBase
|
|
) -> DatabaseSchema:
|
|
db_login = await session.get(Database,id)
|
|
if db_login is None:
|
|
return None
|
|
for var, value in vars(model).items():
|
|
setattr(db_login, var, value) if value else None
|
|
await session.commit()
|
|
return db_login
|