Files
sakhteman/app/repositories/design_progress.py
T
2024-03-14 16:50:14 +03:30

85 lines
3.4 KiB
Python

import copy
import uuid
from typing import List
from uuid import UUID
from fastapi import HTTPException
from app.models.design_progress import DesignProgressModel, CreateDesignProgress, RecordModel, GetRecord, \
UpdateDesignProgress
from core.repositories.base import BaseRepository
from core.service.mongo_db import use_collection
from core.utils.crudify import mongo_soft_deleter
COLLECTION = "design_progress"
class DesignProgressRepository(BaseRepository[CreateDesignProgress]):
def __int__(self):
super().__init__(collection=COLLECTION, model=CreateDesignProgress)
async def create(self,_inp:CreateDesignProgress):
exist = await use_collection(COLLECTION).find_one({
"project_id":_inp.project_id,
"type":_inp.type,
"sub_type":_inp.sub_type
})
if not exist:
progress = DesignProgressModel(
project_id=_inp.project_id,
type=_inp.type,
parent_id=_inp.parent_id,
sub_type=_inp.sub_type,
)
progress.init_id().cu_at()
await use_collection(COLLECTION).insert_one(progress.mongo_dict())
get_record = GetRecord(
project_id=_inp.project_id,
type=_inp.type,
sub_type=_inp.sub_type
)
return await self.get(get_record)
async def get(self,get_record:GetRecord):
progress = await use_collection(COLLECTION).find_one({"project_id":get_record.project_id,"type":get_record.type,"sub_type":get_record.sub_type})
if progress:
progress['records'] = await use_collection('design_progress_record').find({"design_progress_id":progress["_id"]}).to_list(None)
return progress
async def update(self, _id: UUID, _inp: UpdateDesignProgress):
design_progress = await use_collection(COLLECTION).find_one({"_id":_id})
design_progress = DesignProgressModel(**design_progress)
records = await use_collection('design_progress_record').find_one(
{"design_progress_id": _id})
start_at = records['send']['date_at']
await use_collection(COLLECTION).update_one({"_id":_id},{"$set": {
"start_at":start_at,"complete_at":_inp.complete_at
}})
if design_progress.type == 1:
await use_collection('project').update_one({"_id":design_progress.project_id},{"$set":{"sts":2}})
elif design_progress.type == 7:
await use_collection('project').update_one({"_id": design_progress.project_id}, {"$set": {"sts": 4}})
get_record = GetRecord(
project_id=design_progress.project_id,
type=design_progress.type,
sub_type=design_progress.sub_type
)
return await self.get(get_record)
async def check_complete(self,get_record:GetRecord):
result = False
if get_record.type and get_record.type < 7:
progress = await use_collection(COLLECTION).find_one(
{"project_id": get_record.project_id, "type": int(get_record.type)+1})
if progress:
records = await use_collection('design_progress_record').find_one(
{"design_progress_id": progress["_id"]})
if records:
result=True
return result
class DesignProgressRecordRepository(BaseRepository[RecordModel]):
def __int__(self):
super().__init__(collection='design_progress_record', model=RecordModel)