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
+29 -23
View File
@@ -8,31 +8,37 @@ from pydantic import Field
from core.models.base import BaseModel
class DesignProgressModel(BaseModel):
id: Optional[uuid.UUID] = Field(alias='_id')
start_at: Optional[datetime.datetime] = Field(description='تاریخ اولین درخواست در این فیلد قرار می گیرد')
class CreateDesignProgress(pydantic.BaseModel):
project_id: uuid.UUID = Field(description='کد شناسایی پروژه در این فیلد ذخیره می شود')
complete_at: Optional[datetime.datetime] = Field(description='تاریخ تکمیل مدارک')
user_complete: Optional[int] = Field(description='کاربری که اطلاعات را تکمیل می کند در این فیلد قرار می گیرد')
type: Literal[1, 2, 3, 4, 5, 6, 7] = Field(description="""
1. تکمیل مدارک و مستندات
.2 فاز صفر
.3 فاز یک
.4 طراحی شبکه و دوربین و برق اضطراری
.5 فاز دو
.6 متر برآورد
.7 اسناد مناقصه
""")
1. تکمیل مدارک و مستندات
.2 فاز صفر
.3 فاز یک
.4 طراحی شبکه و دوربین و برق اضطراری
.5 فاز دو
.6 متر برآورد
.7 اسناد مناقصه
""")
parent_id: Optional[uuid.UUID] = Field(description='زیر مجموعه کدام نوع اصلی است')
sub_type: Optional[Literal[1, 2, 3, 4, 5, 6, 7]] = Field(description="""
1. برنامه فیزیکی
2. گزارش فاز صفر کلیه رشته ها
3. آلترناتیک لکه گذاری جا نمایی در سایت
4. آلترناتیک لکه گذاری معماری طبقات
5. فاز یک معماری
6.تائید دانشگاه علوم پزشکی
7.گزارش های کلیه رشته ها
""")
1. برنامه فیزیکی
2. گزارش فاز صفر کلیه رشته ها
3. آلترناتیک لکه گذاری جا نمایی در سایت
4. آلترناتیک لکه گذاری معماری طبقات
5. فاز یک معماری
6.تائید دانشگاه علوم پزشکی
7.گزارش های کلیه رشته ها
""")
class UpdateDesignProgress(pydantic.BaseModel):
complete_at: Optional[datetime.datetime] = Field(description='تاریخ تکمیل مدارک')
class DesignProgressModel(BaseModel,CreateDesignProgress):
id: Optional[uuid.UUID] = Field(alias='_id')
start_at: Optional[datetime.datetime] = Field(description='تاریخ اولین درخواست در این فیلد قرار می گیرد')
complete_at: Optional[datetime.datetime] = Field(description='تاریخ تکمیل مدارک')
user_complete: Optional[int] = Field(description='کاربری که اطلاعات را تکمیل می کند در این فیلد قرار می گیرد')
class SubRecord(pydantic.BaseModel):
@@ -49,8 +55,8 @@ class Record(BaseModel):
class RecordModel(Record):
design_progress_id: uuid.UUID = Field(description='کد شناسایی فیلد پیشرفت طراحی در این فیلد قرار می گیرد')
class CreateDesignProgress(DesignProgressModel):
records:Optional[List[Record]]=Field(description='لیست رکوردها د این فیلد قرار میگیرد')
# class CreateDesignProgress(DesignProgressModel):
# records:Optional[List[Record]]=Field(description='لیست رکوردها د این فیلد قرار میگیرد')
class GetRecord(pydantic.BaseModel):
project_id:uuid.UUID = Field(description='کد شناسایی پروژ')
+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)
+25 -15
View File
@@ -2,8 +2,9 @@ from uuid import UUID
from fastapi import Body
from app.models.design_progress import DesignProgressModel, CreateDesignProgress, GetRecord
from app.repositories.design_progress import DesignProgressRepository
from app.models.design_progress import DesignProgressModel, CreateDesignProgress, GetRecord, RecordModel, \
UpdateDesignProgress
from app.repositories.design_progress import DesignProgressRepository, DesignProgressRecordRepository
from core.app import app
from core.utils.router import generate_router, shrink
from core.utils.table_engine import TableEngineExport, TableEngineRequestType
@@ -15,33 +16,42 @@ router = generate_router(router_base_url, auth_dependencies=False, version='v2')
repo = DesignProgressRepository(collection='design_progress')
repo_record = DesignProgressRecordRepository(collection='design_progress_record')
@router.post('/create', response_model=ThisModel, tags=_tag_base)
@router.post('/create', response_model=DesignProgressModel, tags=_tag_base)
@shrink(repo.create)
def create(coding: ThisModel = Body(...)):
pass
@router.put('/{_id}', response_model=ThisModel, tags=_tag_base)
@router.put('/{_id}', response_model=DesignProgressModel, tags=_tag_base)
@shrink(repo.update)
def update(_id: UUID, coding: ThisModel = Body(...)):
def update(_id: UUID, coding: UpdateDesignProgress = Body(...)):
pass
@router.delete('/{_id}', response_model=bool, tags=_tag_base)
@shrink(repo.delete)
def delete(_id: UUID):
pass
@router.post('/get', response_model=ThisModel, tags=_tag_base)
@router.post('/get', response_model=DesignProgressModel, tags=_tag_base)
@shrink(repo.get)
def get(get_record:GetRecord = Body(...)):
pass
@router.post('/record/create', response_model=RecordModel, tags=_tag_base)
@shrink(repo_record.create)
def create_record(coding: RecordModel = Body(...)):
pass
@router.post('', response_model=TableEngineExport[ThisModel], tags=_tag_base)
@shrink(repo.fetch)
def fetch(body: TableEngineRequestType = Body(...)):
@router.put('/record/{_id}', response_model=RecordModel, tags=_tag_base)
@shrink(repo_record.update)
def update_record(_id: UUID, coding: RecordModel = Body(...)):
pass
@router.delete('/record/{_id}', response_model=bool, tags=_tag_base)
@shrink(repo_record.delete)
def delete_record(_id: UUID):
pass
@router.get('/record/{_id}', response_model=RecordModel, tags=_tag_base)
@shrink(repo_record.get)
def get_record(_id: UUID):
pass