diff --git a/app/models/design_progress.py b/app/models/design_progress.py index 15bd68f..ecb8481 100644 --- a/app/models/design_progress.py +++ b/app/models/design_progress.py @@ -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='کد شناسایی پروژ') diff --git a/app/repositories/design_progress.py b/app/repositories/design_progress.py index a0a88d2..e9f6841 100644 --- a/app/repositories/design_progress.py +++ b/app/repositories/design_progress.py @@ -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) diff --git a/app/urls/design_progress.py b/app/urls/design_progress.py index 1b09e79..bf7fa16 100644 --- a/app/urls/design_progress.py +++ b/app/urls/design_progress.py @@ -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