import uuid from pymongo import ReturnDocument from app.config import TaskEnv from app.models.contract import ContractModel, AddendumModel, ExtensionModel from core.repositories.base import BaseRepository from core.service.mongo_db import use_collection from core.utils import get_time class ContractRepository(BaseRepository): def __init__(self): super().__init__(collection=TaskEnv.CLN_CONTRACT, model=ContractModel) async def create_add(self,_id:uuid.UUID,_inp:AddendumModel): _inp.id = uuid.uuid4() _inp.created_at = get_time() _inp.updated_at = get_time() contract = await use_collection(TaskEnv.CLN_CONTRACT).find_one_and_update( {"_id":_id}, {"$push":{"addendum":_inp.dict()}},return_document=ReturnDocument.AFTER ) return contract async def update_add(self,_id:uuid.UUID,_inp:AddendumModel): _inp.updated_at = get_time() result = await use_collection(TaskEnv.CLN_CONTRACT).find_one_and_update( {"_id": _id,'addendum.id':_inp.id}, { "$set":{ 'addendum.$.number':_inp.number, 'addendum.$.amount':_inp.amount, 'addendum.$.description':_inp.description, 'addendum.$.end_date':_inp.end_date, 'addendum.$.updated_at':_inp.updated_at, } },return_document=ReturnDocument.AFTER) return result async def create_extension(self, _id: uuid.UUID, _inp:ExtensionModel): _inp.id = uuid.uuid4() _inp.created_at = get_time() _inp.updated_at = get_time() contract = await use_collection(TaskEnv.CLN_CONTRACT).find_one_and_update( {"_id": _id}, {"$push": {"extension": _inp.dict()}}, return_document=ReturnDocument.AFTER ) return contract async def update_extention(self, _id: uuid.UUID, _inp:ExtensionModel): _inp.updated_at = get_time() result = await use_collection(TaskEnv.CLN_CONTRACT).find_one_and_update( {"_id": _id,'extension.id':_inp.id}, { "$set":{ 'extension.$.updated_at':_inp.updated_at, 'extension.$.day_to_end':_inp.day_to_end, 'extension.$.description':_inp.description, 'extension.$.status':_inp.status } },return_document=ReturnDocument.AFTER) return result async def get_list(self,project_id:uuid.UUID): contract = await use_collection(TaskEnv.CLN_CONTRACT).find( {"project_id": project_id} ).to_list(None) return contract