testcase_ceoec/db/dals.py

48 lines
1.5 KiB
Python
Raw Normal View History

2024-07-05 00:24:49 +03:00
from datetime import datetime
from sqlalchemy import and_, desc, func, select
from sqlalchemy.ext.asyncio import AsyncSession
from db.models import Metrics, MetricsQuery, Query, Url
###########################################################
# BLOCK FOR INTERACTION WITH DATABASE IN BUSINESS CONTEXT #
###########################################################
class UrlDAL:
"""Data Access Layer for operating user info"""
def __init__(self, db_session: AsyncSession):
self.db_session = db_session
async def add_new_urls(self, add_values: list[Url]):
for new_url in add_values:
query = select(Url).where(Url.url == new_url.url)
res = await self.db_session.execute(query)
if res.scalar_one_or_none() is None:
self.db_session.add(new_url)
else:
# If nessessary we can update data here
pass
await self.db_session.flush()
return
class MetricDAL:
"""Data Access Layer for operating user info"""
def __init__(self, db_session: AsyncSession):
self.db_session = db_session
async def get_last_metrics_date(self) -> datetime | None:
query = (
select(Metrics.date).group_by(Metrics.date).order_by(Metrics.date.desc())
)
result = await self.db_session.execute(query)
if result is None:
return None
last_date = result.scalars().first()
return last_date