mirror of
https://github.com/aykhans/portfolio-blog.git
synced 2025-04-16 19:03:11 +00:00
80 lines
1.7 KiB
Python
80 lines
1.7 KiB
Python
from typing import (
|
|
List,
|
|
Optional
|
|
)
|
|
|
|
from fastapi.encoders import jsonable_encoder
|
|
|
|
from sqlalchemy.orm import Session
|
|
from sqlalchemy.future import select
|
|
|
|
from app.crud.base import CRUDBase
|
|
from app.models.post import Post
|
|
from app.schemas.post import (
|
|
PostCreate,
|
|
PostUpdate
|
|
)
|
|
|
|
|
|
class CRUDPost(CRUDBase[Post, PostCreate, PostUpdate]):
|
|
async def create_with_owner(
|
|
self,
|
|
db: Session,
|
|
*,
|
|
obj_in: PostCreate,
|
|
owner_id: int
|
|
) -> Post:
|
|
|
|
obj_in_data = jsonable_encoder(obj_in)
|
|
db_obj = self.model(**obj_in_data, owner_id=owner_id)
|
|
db.add(db_obj)
|
|
await db.commit()
|
|
await db.refresh(db_obj)
|
|
|
|
return db_obj
|
|
|
|
async def get_by_slug(
|
|
self,
|
|
db: Session,
|
|
slug: str
|
|
) -> Optional[Post]:
|
|
|
|
q = select(self.model).where(self.model.slug == slug)
|
|
obj = await db.execute(q)
|
|
return obj.scalar_one_or_none()
|
|
|
|
async def get_multi_by_owner(
|
|
self,
|
|
db: Session,
|
|
*,
|
|
owner_id: int,
|
|
skip: int = 0,
|
|
limit: int = 100
|
|
) -> List[Post]:
|
|
|
|
q = (
|
|
select(self.model)
|
|
.where(self.model.owner_id == owner_id)
|
|
.offset(skip)
|
|
.limit(limit)
|
|
)
|
|
|
|
objs = await db.execute(q)
|
|
|
|
return objs.scalars()
|
|
|
|
def create(self):
|
|
raise DeprecationWarning("Use create_with_owner instead")
|
|
|
|
async def remove_by_slug(self, db: Session, *, slug: str) -> Post:
|
|
q = select(self.model).where(self.model.slug == slug)
|
|
obj = await db.execute(q)
|
|
obj = obj.scalar_one()
|
|
await db.delete(obj)
|
|
await db.commit()
|
|
|
|
return obj
|
|
|
|
|
|
post = CRUDPost(Post)
|