fix(design_project)
This commit is contained in:
@@ -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='کد شناسایی پروژ')
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user