import datetime import uuid from app.config import TaskEnv from app.models.monitor_physical_secondary_progress import SecondaryProgressModel, SubSecondaryProgressModel, LastRecord from app.repositories.monitor_physical_progress import PhysicalProgressRepository from core.repositories.base import BaseRepository from core.service.mongo_db import use_collection class SecondaryProgressRepository(BaseRepository): def __init__(self): super().__init__(collection=TaskEnv.CLN_MONITOR_SECONDARY, model=SecondaryProgressModel) async def get_list(self,project_id:uuid.UUID): get_list = await use_collection(TaskEnv.CLN_MONITOR_SECONDARY).find({'project_id':project_id}).to_list(None) ids = [i["_id"] for i in get_list] get_subs = await use_collection(TaskEnv.CLN_MONITOR_SUB_SECONDARY).aggregate([ {"$match":{'parent_id':{"$in":ids}}}, {"$group":{"_id":"$parent_id",'subs': {"$push": "$$ROOT"}}} ]).to_list(None) for i in get_list: for j in get_subs: if i["_id"] == j["_id"]: i['subs'] = j["subs"] return get_list class SubSecondaryProgressRepository(BaseRepository): def __init__(self): super().__init__(collection=TaskEnv.CLN_MONITOR_SUB_SECONDARY, model=SubSecondaryProgressModel) async def get_list_by_parent_id(self,parent_id:uuid.UUID): get_subs = await use_collection(TaskEnv.CLN_MONITOR_SUB_SECONDARY).find({"parent_id":parent_id}).to_list(None) return get_subs async def last_record(self, _inp: LastRecord): m_first = _inp.date_at - datetime.timedelta(days=35) print(m_first) m_end = _inp.date_at - datetime.timedelta(days=25) print(m_end) last = await use_collection(TaskEnv.CLN_MONITOR_SUB_SECONDARY).find({ 'parent_id': _inp.parent_id, 'date_at': {'$gte': m_first, '$lte': m_end} }).sort("$natural", -1).to_list(None) if last: return last[0] else: return {}