from __future__ import annotations from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from src.storage.postgres.models_business import Skill from src.utils.datetime_utils import utc_now_naive class SkillRepository: def __init__(self, db_session: AsyncSession): self.db = db_session async def list_all(self) -> list[Skill]: result = await self.db.execute(select(Skill).order_by(Skill.updated_at.desc(), Skill.id.desc())) return list(result.scalars().all()) async def get_by_slug(self, slug: str) -> Skill | None: result = await self.db.execute(select(Skill).where(Skill.slug == slug)) return result.scalar_one_or_none() async def exists_slug(self, slug: str) -> bool: return (await self.get_by_slug(slug)) is not None async def create( self, *, slug: str, name: str, description: str, dir_path: str, created_by: str | None, ) -> Skill: now = utc_now_naive() item = Skill( slug=slug, name=name, description=description, dir_path=dir_path, created_by=created_by, updated_by=created_by, created_at=now, updated_at=now, ) self.db.add(item) await self.db.commit() await self.db.refresh(item) return item async def update_metadata( self, item: Skill, *, name: str, description: str, updated_by: str | None, ) -> Skill: item.name = name item.description = description item.updated_by = updated_by item.updated_at = utc_now_naive() await self.db.commit() await self.db.refresh(item) return item async def delete(self, item: Skill) -> None: await self.db.delete(item) await self.db.commit()