testcase stage2
This commit is contained in:
47
db/dals.py
Normal file
47
db/dals.py
Normal file
@@ -0,0 +1,47 @@
|
||||
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
|
Reference in New Issue
Block a user