codebookly / src /app /services /agencies.py
aymie-oh's picture
initial commit
55d0d9e
from sqlalchemy import select, cast, Integer
from sqlalchemy import select, or_
from sqlalchemy.ext.asyncio import AsyncSession
from app.models.models import Agencies, AgencyStandards, MapCodeStandard, CodesTable
import logging
class AgencyService:
def __init__(self):
self.logger = logging.getLogger(__name__)
async def get_agencies(self, session: AsyncSession):
query = select(Agencies).order_by(Agencies.agency.asc())
result = await session.execute(query)
return result.scalars().all()
async def get_agency_standards(self, session: AsyncSession):
query = select(AgencyStandards).order_by(AgencyStandards.agency.asc())
result = await session.execute(query)
return result.scalars().all()
async def list_codes_with_standards(self, session: AsyncSession, limit: int):
query = (
select(Agencies, AgencyStandards, MapCodeStandard)
.join(AgencyStandards, MapCodeStandard.standard_id == AgencyStandards.standard_id)
.join(Agencies, AgencyStandards.agency == Agencies.agency)
.limit(limit)
)
result = await session.execute(query)
return result.all()
async def get_codes_by_agency(self, session: AsyncSession, agency_name: str, limit: int):
query = (
select(CodesTable)
.join(MapCodeStandard, CodesTable.code == MapCodeStandard.code)
.join(AgencyStandards, MapCodeStandard.standard_id == AgencyStandards.standard_id)
.where(AgencyStandards.agency == agency_name.upper())
.distinct()
.order_by(CodesTable.sort_index.asc())
.limit(limit)
)
result = await session.execute(query)
return result.scalars().all()
async def get_standards_by_code(self, session: AsyncSession, code: str):
query = (
select(
MapCodeStandard.standard_id,
AgencyStandards.agency,
AgencyStandards.definition,
AgencyStandards.codes,
AgencyStandards.tables,
AgencyStandards.images,
AgencyStandards.raw_references,
Agencies.agency_info
)
.distinct()
.join(AgencyStandards, AgencyStandards.standard_id == MapCodeStandard.standard_id)
.outerjoin(Agencies, Agencies.agency == AgencyStandards.agency)
.where(MapCodeStandard.code == code)
.order_by(MapCodeStandard.standard_id.asc())
)
result = await session.execute(query)
return result.mappings().all()
agency_service = AgencyService()