68 lines
2.6 KiB
Python
68 lines
2.6 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
|
|
}})
|
|
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)
|
|
class DesignProgressRecordRepository(BaseRepository[RecordModel]):
|
|
def __int__(self):
|
|
super().__init__(collection='design_progress_record', model=RecordModel)
|
|
|
|
|