首次提交by MimoCode
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
from typing import Optional, List
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.models.category import Category
|
||||
|
||||
|
||||
class CategoryRepository:
|
||||
def __init__(self, db: AsyncSession):
|
||||
self.db = db
|
||||
|
||||
async def get_by_id(self, category_id: int) -> Optional[Category]:
|
||||
result = await self.db.execute(select(Category).where(Category.id == category_id))
|
||||
return result.scalar_one_or_none()
|
||||
|
||||
async def get_all(self, level: Optional[int] = None, parent_id: Optional[int] = None) -> List[Category]:
|
||||
query = select(Category)
|
||||
if level:
|
||||
query = query.where(Category.level == level)
|
||||
if parent_id:
|
||||
query = query.where(Category.parent_id == parent_id)
|
||||
query = query.order_by(Category.sort_order)
|
||||
result = await self.db.execute(query)
|
||||
return list(result.scalars().all())
|
||||
|
||||
async def get_children(self, parent_id: int) -> List[Category]:
|
||||
result = await self.db.execute(
|
||||
select(Category)
|
||||
.where(Category.parent_id == parent_id)
|
||||
.order_by(Category.sort_order)
|
||||
)
|
||||
return list(result.scalars().all())
|
||||
|
||||
async def create(self, data: dict) -> Category:
|
||||
category = Category(**data)
|
||||
self.db.add(category)
|
||||
await self.db.flush()
|
||||
return category
|
||||
|
||||
async def update(self, category_id: int, data: dict) -> Optional[Category]:
|
||||
category = await self.get_by_id(category_id)
|
||||
if not category:
|
||||
return None
|
||||
for key, value in data.items():
|
||||
setattr(category, key, value)
|
||||
await self.db.flush()
|
||||
return category
|
||||
|
||||
async def delete(self, category_id: int) -> bool:
|
||||
category = await self.get_by_id(category_id)
|
||||
if not category:
|
||||
return False
|
||||
await self.db.delete(category)
|
||||
return True
|
||||
Reference in New Issue
Block a user