fix(design_project)

This commit is contained in:
shahzeydyfah
2024-03-11 00:32:57 +03:30
parent 061bdec516
commit 0e78e3ef08
3 changed files with 93 additions and 116 deletions
+39 -78
View File
@@ -5,7 +5,8 @@ from uuid import UUID
from fastapi import HTTPException
from app.models.design_progress import DesignProgressModel, CreateDesignProgress, RecordModel, GetRecord
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
@@ -14,46 +15,27 @@ COLLECTION = "design_progress"
class DesignProgressRepository(BaseRepository[CreateDesignProgress]):
def __int__(self):
super().__init__(collection=COLLECTION, model=CreateDesignProgress)
def create_progress_model(self,_inp:CreateDesignProgress, type_create='create')->DesignProgressModel:
if _inp.complete_at and _inp.records:
_inp.start_at = _inp.records[0].send.date_at
progress = DesignProgressModel(
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,
parent_id=_inp.parent_id,
sub_type=_inp.sub_type,
start_at= _inp.start_at,
complete_at= _inp.complete_at
)
if type_create == 'create':
progress.init_id().cu_at()
else:
progress.u_at()
return progress
def create_record(self,_inp:CreateDesignProgress,_id:uuid.UUID=None):
records = []
for record in _inp.records:
save_record = RecordModel(
design_progress_id=_id,
title=record.title,
send=record.send,
receive=record.receive
).init_id().cu_at()
records.append(save_record)
return records
async def create(self,create:CreateDesignProgress):
progress = self.create_progress_model(create)
await use_collection(COLLECTION).insert_one(progress.mongo_dict())
if create.records:
list_records = []
records = self.create_record(create, progress.id)
for record in records:
list_records.append(record.mongo_dict())
await use_collection('design_progress_record').insert_many(list_records)
get_record = GetRecord(
project_id=create.project_id,
type=create.type,
sub_type=create.sub_type
sub_type=_inp.sub_type
)
return await self.get(get_record)
@@ -63,44 +45,23 @@ class DesignProgressRepository(BaseRepository[CreateDesignProgress]):
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, update: CreateDesignProgress):
progress = self.create_progress_model(update,'update')
print(progress)
print(_id)
await use_collection(COLLECTION).update_one({"_id":_id},{"$set":progress.mongo_dict()})
if update.records:
before_records = await use_collection('design_progress_record').distinct("_id",{"design_progress_id":_id})
update_records = []
update_record_ids = []
create_records = []
delete_records = list(before_records).copy()
for record in update.records:
if record.id:
save_record = {
"_id":record.id,
"title":record.title,
"design_progress_id":_id,
"send":record.send.dict(),
"receive":record.receive.dict()
}
update_records.append(save_record)
update_record_ids.append(record.id)
delete_records.remove(record.id)
else:
save_record = RecordModel(
design_progress_id=_id,
title=record.title,
send=record.send,
receive=record.receive
).init_id().cu_at()
create_records.append(save_record.mongo_dict())
if update_records:
print("111111111",update_record_ids)
await use_collection('design_progress_record').update_many({"_id": {"$in":update_record_ids}},{"$set":update_records})
if create_records:
await use_collection('design_progress_record').insert_many(create_records)
if delete_records:
await mongo_soft_deleter({"_id":{"$in":delete_records}},'design_progress_record')
return await self.get(progress.id)
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)