2 chained application designed and new stage inited
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
from typing import Any
|
||||
from typing import Optional, Any
|
||||
from fastapi import APIRouter, Depends
|
||||
|
||||
from index import endpoints_index
|
||||
@@ -7,11 +7,27 @@ from events.building_parts.cluster import PartsRouterCluster
|
||||
from Validations.defaults.validations import CommonHeaders
|
||||
from Validations.response.pagination import PaginateOnly
|
||||
from Extensions.Middlewares.token_provider import TokenProvider
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
parts_endpoint_route = APIRouter(prefix="/parts", tags=["Parts Cluster"])
|
||||
|
||||
|
||||
class PartsListRequest(BaseModel):
|
||||
address_gov_code: str
|
||||
build_uu_id: str = None
|
||||
part_no: int
|
||||
part_level: int
|
||||
part_code: str
|
||||
part_gross_size: int
|
||||
part_net_size: int
|
||||
default_accessory: str
|
||||
human_livable: bool
|
||||
due_part_key: Optional[str] = None
|
||||
part_direction_uu_id: Optional[str] = None
|
||||
part_type_uu_id: Optional[str] = None
|
||||
|
||||
|
||||
parts_list = "PartsList"
|
||||
@parts_endpoint_route.post(
|
||||
path="/list",
|
||||
@@ -22,7 +38,7 @@ def parts_list_route(data: PaginateOnly, headers: CommonHeaders = Depends(Common
|
||||
token_object = TokenProvider.get_dict_from_redis(token=headers.token)
|
||||
event_founder_dict = dict(endpoint_code=headers.operation_id, token=token_object)
|
||||
event_key = TokenProvider.retrieve_event_codes(**event_founder_dict)
|
||||
FoundCluster = PartsRouterCluster.get_event_cluster(parts_list)
|
||||
FoundCluster = PartsRouterCluster.get_event_cluster("PartsListEventCluster")
|
||||
event_cluster_matched = FoundCluster.match_event(event_key=event_key)
|
||||
return event_cluster_matched.event_callable(list_options=data, headers=headers)
|
||||
|
||||
@@ -33,11 +49,11 @@ parts_create = "PartsCreate"
|
||||
description="Create part endpoint",
|
||||
operation_id=endpoints_index[parts_create],
|
||||
)
|
||||
def parts_create_route(data, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)):
|
||||
def parts_create_route(data: PartsListRequest, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)):
|
||||
token_object = TokenProvider.get_dict_from_redis(token=headers.token)
|
||||
event_founder_dict = dict(endpoint_code=headers.operation_id, token=token_object)
|
||||
event_key = TokenProvider.retrieve_event_codes(**event_founder_dict)
|
||||
FoundCluster = PartsRouterCluster.get_event_cluster(parts_create)
|
||||
FoundCluster = PartsRouterCluster.get_event_cluster("PartsCreateEventCluster")
|
||||
event_cluster_matched = FoundCluster.match_event(event_key=event_key)
|
||||
return event_cluster_matched.event_callable(data=data, headers=headers)
|
||||
|
||||
@@ -48,11 +64,11 @@ parts_update = "PartsUpdate"
|
||||
description="Update part endpoint",
|
||||
operation_id=endpoints_index[parts_update],
|
||||
)
|
||||
def parts_update_route(uu_id: str, data, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)):
|
||||
def parts_update_route(uu_id: str, data: PartsListRequest, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)):
|
||||
token_object = TokenProvider.get_dict_from_redis(token=headers.token)
|
||||
event_founder_dict = dict(endpoint_code=headers.operation_id, token=token_object)
|
||||
event_key = TokenProvider.retrieve_event_codes(**event_founder_dict)
|
||||
FoundCluster = PartsRouterCluster.get_event_cluster(parts_update)
|
||||
FoundCluster = PartsRouterCluster.get_event_cluster("PartsUpdateEventCluster")
|
||||
event_cluster_matched = FoundCluster.match_event(event_key=event_key)
|
||||
return event_cluster_matched.event_callable(uu_id=uu_id, data=data, headers=headers)
|
||||
|
||||
@@ -67,6 +83,6 @@ def parts_delete_route(uu_id: str, headers: CommonHeaders = Depends(CommonHeader
|
||||
token_object = TokenProvider.get_dict_from_redis(token=headers.token)
|
||||
event_founder_dict = dict(endpoint_code=headers.operation_id, token=token_object)
|
||||
event_key = TokenProvider.retrieve_event_codes(**event_founder_dict)
|
||||
FoundCluster = PartsRouterCluster.get_event_cluster(parts_delete)
|
||||
FoundCluster = PartsRouterCluster.get_event_cluster("PartsDeleteEventCluster")
|
||||
event_cluster_matched = FoundCluster.match_event(event_key=event_key)
|
||||
return event_cluster_matched.event_callable(uu_id=uu_id, headers=headers)
|
||||
@@ -1,5 +1,6 @@
|
||||
from typing import Any
|
||||
from typing import Any, Optional
|
||||
from fastapi import APIRouter, Depends
|
||||
from pydantic import BaseModel
|
||||
|
||||
from index import endpoints_index
|
||||
from events.builds.cluster import BuildRouterCluster
|
||||
@@ -9,6 +10,31 @@ from Validations.response.pagination import PaginateOnly
|
||||
from Extensions.Middlewares.token_provider import TokenProvider
|
||||
|
||||
|
||||
# Pydantic model for build update validation
|
||||
class BuildFormModel(BaseModel):
|
||||
gov_address_code: str
|
||||
build_name: str
|
||||
build_no: str
|
||||
max_floor: int
|
||||
underground_floor: int
|
||||
build_date: str
|
||||
decision_period_date: str
|
||||
tax_no: str
|
||||
lift_count: int
|
||||
heating_system: bool
|
||||
cooling_system: bool
|
||||
hot_water_system: bool
|
||||
block_service_man_count: int
|
||||
security_service_man_count: int
|
||||
garage_count: int
|
||||
site_uu_id: Optional[str] = None
|
||||
address_uu_id: str
|
||||
build_types_uu_id: str
|
||||
|
||||
class Config:
|
||||
extra = "allow"
|
||||
|
||||
|
||||
build_endpoint_route = APIRouter(prefix="/builds", tags=["Builds Cluster"])
|
||||
|
||||
build_list = "BuildList"
|
||||
@@ -21,7 +47,7 @@ def build_list_route(data: PaginateOnly, headers: CommonHeaders = Depends(Common
|
||||
token_object = TokenProvider.get_dict_from_redis(token=headers.token)
|
||||
event_founder_dict = dict(endpoint_code=headers.operation_id, token=token_object)
|
||||
event_key = TokenProvider.retrieve_event_codes(**event_founder_dict)
|
||||
FoundCluster = BuildRouterCluster.get_event_cluster(build_list)
|
||||
FoundCluster = BuildRouterCluster.get_event_cluster("BuildListEventCluster")
|
||||
event_cluster_matched = FoundCluster.match_event(event_key=event_key)
|
||||
return event_cluster_matched.event_callable(list_options=data, headers=headers)
|
||||
|
||||
@@ -32,11 +58,11 @@ build_create = "BuildCreate"
|
||||
description="Create build endpoint",
|
||||
operation_id=endpoints_index[build_create],
|
||||
)
|
||||
def build_create_route(data, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)):
|
||||
def build_create_route(data: BuildFormModel, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)):
|
||||
token_object = TokenProvider.get_dict_from_redis(token=headers.token)
|
||||
event_founder_dict = dict(endpoint_code=headers.operation_id, token=token_object)
|
||||
event_key = TokenProvider.retrieve_event_codes(**event_founder_dict)
|
||||
FoundCluster = BuildRouterCluster.get_event_cluster(build_create)
|
||||
FoundCluster = BuildRouterCluster.get_event_cluster("BuildCreateEventCluster")
|
||||
event_cluster_matched = FoundCluster.match_event(event_key=event_key)
|
||||
return event_cluster_matched.event_callable(data=data, headers=headers)
|
||||
|
||||
@@ -47,11 +73,11 @@ build_update = "BuildUpdate"
|
||||
description="Update build endpoint",
|
||||
operation_id=endpoints_index[build_update],
|
||||
)
|
||||
def build_update_route(uu_id: str, data, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)):
|
||||
def build_update_route(uu_id: str, data: BuildFormModel, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)):
|
||||
token_object = TokenProvider.get_dict_from_redis(token=headers.token)
|
||||
event_founder_dict = dict(endpoint_code=headers.operation_id, token=token_object)
|
||||
event_key = TokenProvider.retrieve_event_codes(**event_founder_dict)
|
||||
FoundCluster = BuildRouterCluster.get_event_cluster(build_update)
|
||||
FoundCluster = BuildRouterCluster.get_event_cluster("BuildUpdateEventCluster")
|
||||
event_cluster_matched = FoundCluster.match_event(event_key=event_key)
|
||||
return event_cluster_matched.event_callable(uu_id=uu_id, data=data, headers=headers)
|
||||
|
||||
|
||||
@@ -13,6 +13,9 @@ from Validations.defaults.validations import CommonHeaders
|
||||
from Schemas import (
|
||||
Build,
|
||||
BuildParts,
|
||||
ApiEnumDropdown,
|
||||
BuildTypes,
|
||||
BuildParts,
|
||||
AccountRecords,
|
||||
)
|
||||
|
||||
@@ -55,17 +58,43 @@ SuperPartsDeleteEvent = Event(
|
||||
|
||||
|
||||
def super_parts_list_callable(list_options: PaginateOnly, headers: CommonHeaders):
|
||||
return {
|
||||
"message": "MSG0003-LIST",
|
||||
"data": None,
|
||||
"completed": True,
|
||||
}
|
||||
list_options = PaginateOnly(**list_options.model_dump())
|
||||
# TODO: Pydantic Model must be implemnted for list_options.query
|
||||
with Build.new_session() as db_session:
|
||||
BuildParts.set_session(db_session)
|
||||
base_query = BuildParts.query.filter()
|
||||
build_parts_records_query = base_query
|
||||
if list_options.query:
|
||||
build_parts_records_query = BuildParts.query.filter(*BuildParts.convert(list_options.query))
|
||||
pagination = Pagination(data=build_parts_records_query, base_query=base_query)
|
||||
pagination.change(**list_options.model_dump())
|
||||
pagination_result = PaginationResult(data=build_parts_records_query, pagination=pagination, response_model=None)
|
||||
return EndpointResponse(message="MSG0003-LIST", pagination_result=pagination_result).response
|
||||
|
||||
|
||||
SuperPartsListEvent.event_callable = super_parts_list_callable
|
||||
|
||||
|
||||
def super_parts_create_callable(data, headers: CommonHeaders):
|
||||
|
||||
with Build.new_session() as db_session:
|
||||
|
||||
Build.set_session(db_session)
|
||||
BuildParts.set_session(db_session)
|
||||
BuildTypes.set_session(db_session)
|
||||
ApiEnumDropdown.set_session(db_session)
|
||||
|
||||
build = Build.query.filter(Build.uu_id == data.build_uu_id).first()
|
||||
part_direction = ApiEnumDropdown.query.filter(ApiEnumDropdown.uu_id == data.part_direction_uu_id).first()
|
||||
part_type = BuildTypes.query.filter(BuildTypes.uu_id == data.part_type_uu_id).first()
|
||||
|
||||
build_parts_created = BuildParts.create(
|
||||
**data.model_dump(),
|
||||
build_id=getattr(build, "id", None),
|
||||
part_direction_id=getattr(part_direction, "id", None),
|
||||
part_type_id=getattr(part_type, "id", None)
|
||||
)
|
||||
build_parts_created.save()
|
||||
return {
|
||||
"message": "MSG0001-INSERT",
|
||||
"data": None,
|
||||
@@ -77,6 +106,25 @@ SuperPartsCreateEvent.event_callable = super_parts_create_callable
|
||||
|
||||
|
||||
def super_parts_update_callable(data, headers: CommonHeaders):
|
||||
with Build.new_session() as db_session:
|
||||
|
||||
Build.set_session(db_session)
|
||||
BuildParts.set_session(db_session)
|
||||
BuildTypes.set_session(db_session)
|
||||
ApiEnumDropdown.set_session(db_session)
|
||||
|
||||
build = Build.query.filter(Build.uu_id == data.build_uu_id).first()
|
||||
part_direction = ApiEnumDropdown.query.filter(ApiEnumDropdown.uu_id == data.part_direction_uu_id).first()
|
||||
part_type = BuildTypes.query.filter(BuildTypes.uu_id == data.part_type_uu_id).first()
|
||||
|
||||
build_parts_updated = BuildParts.query.filter(BuildParts.uu_id == data.uu_id).first()
|
||||
build_parts_updated.update(
|
||||
**data.model_dump(exclude_unset=True, exclude_none=True),
|
||||
build_id=getattr(build, "id", None),
|
||||
part_direction_id=getattr(part_direction, "id", None),
|
||||
part_type_id=getattr(part_type, "id", None)
|
||||
)
|
||||
build_parts_updated.save()
|
||||
return {
|
||||
"message": "MSG0002-UPDATE",
|
||||
"data": None,
|
||||
|
||||
@@ -11,9 +11,13 @@ from Validations.response import (
|
||||
)
|
||||
from Validations.defaults.validations import CommonHeaders
|
||||
from Schemas import (
|
||||
Addresses,
|
||||
BuildTypes,
|
||||
Build,
|
||||
BuildSites,
|
||||
BuildParts,
|
||||
AccountRecords,
|
||||
Companies,
|
||||
# AccountRecords,
|
||||
)
|
||||
|
||||
|
||||
@@ -53,32 +57,16 @@ SuperBuildDeleteEvent = Event(
|
||||
|
||||
def super_build_list_callable(list_options: PaginateOnly, headers: CommonHeaders):
|
||||
list_options = PaginateOnly(**list_options.model_dump())
|
||||
if token.is_employee:
|
||||
raise Exception("Forbidden for employees")
|
||||
|
||||
# TODO: Pydantic Model must be implemnted for list_options.query
|
||||
with AccountRecords.new_session() as db_session:
|
||||
AccountRecords.set_session(db_session)
|
||||
list_of_fields = [
|
||||
AccountRecords.iban,
|
||||
AccountRecords.bank_date,
|
||||
AccountRecords.currency,
|
||||
AccountRecords.currency_value,
|
||||
AccountRecords.process_comment,
|
||||
AccountRecords.add_comment_note,
|
||||
AccountRecords.receive_debit,
|
||||
AccountRecords.is_email_send,
|
||||
AccountRecords.is_notification_send,
|
||||
]
|
||||
account_records_query = db_session.query(*list_of_fields
|
||||
).join(BuildParts, BuildParts.id == AccountRecords.build_parts_id
|
||||
).filter(BuildParts.id == token.selected_occupant.build_part_id)
|
||||
with Build.new_session() as db_session:
|
||||
Build.set_session(db_session)
|
||||
base_query = Build.query.filter()
|
||||
build_records_query = base_query
|
||||
if list_options.query:
|
||||
account_records_query = account_records_query.filter(*AccountRecords.convert(list_options.query))
|
||||
|
||||
pagination = Pagination(data=account_records_query)
|
||||
build_records_query = Build.query.filter(*Build.convert(list_options.query))
|
||||
pagination = Pagination(data=build_records_query, base_query=base_query)
|
||||
pagination.change(**list_options.model_dump())
|
||||
pagination_result = PaginationResult(data=account_records_query, pagination=pagination)
|
||||
pagination_result = PaginationResult(data=build_records_query, pagination=pagination, response_model=None)
|
||||
return EndpointResponse(message="MSG0003-LIST", pagination_result=pagination_result).response
|
||||
|
||||
|
||||
@@ -86,6 +74,19 @@ SuperBuildListEvent.event_callable = super_build_list_callable
|
||||
|
||||
|
||||
def super_build_create_callable(data, headers: CommonHeaders):
|
||||
|
||||
with Build.new_session() as db_session:
|
||||
|
||||
Build.set_session(db_session)
|
||||
Addresses.set_session(db_session)
|
||||
BuildTypes.set_session(db_session)
|
||||
BuildSites.set_session(db_session)
|
||||
|
||||
address_id = Addresses.query.filter(Addresses.uu_id == data.address_uu_id).first()
|
||||
build_types_id = BuildTypes.query.filter(BuildTypes.uu_id == data.build_types_uu_id).first()
|
||||
sites_id = BuildSites.query.filter(BuildSites.uu_id == data.site_uu_id).first()
|
||||
build = Build.create(**data.model_dump(), address_id=getattr(address_id, "id", None), build_types_id=getattr(build_types_id, "id", None), site_id=getattr(sites_id, "id", None))
|
||||
build.save()
|
||||
return {
|
||||
"message": "MSG0001-INSERT",
|
||||
"data": None,
|
||||
@@ -96,7 +97,23 @@ def super_build_create_callable(data, headers: CommonHeaders):
|
||||
SuperBuildCreateEvent.event_callable = super_build_create_callable
|
||||
|
||||
|
||||
def super_build_update_callable(data, headers: CommonHeaders):
|
||||
def super_build_update_callable(uu_id: str, data, headers: CommonHeaders):
|
||||
data_dict = data.model_dump(exclude_unset=True, exclude_none=True)
|
||||
data_dict.pop("uu_id", None)
|
||||
data_dict.pop("uuid", None)
|
||||
with Build.new_session() as db_session:
|
||||
Build.set_session(db_session)
|
||||
Addresses.set_session(db_session)
|
||||
BuildTypes.set_session(db_session)
|
||||
BuildSites.set_session(db_session)
|
||||
|
||||
address_id = Addresses.query.filter(Addresses.uu_id == data.address_uu_id).first()
|
||||
build_types_id = BuildTypes.query.filter(BuildTypes.uu_id == data.build_types_uu_id).first()
|
||||
sites_id = BuildSites.query.filter(BuildSites.uu_id == data.site_uu_id).first()
|
||||
|
||||
build = Build.query.filter(Build.uu_id == uu_id).first()
|
||||
build.update(**data_dict, address_id=getattr(address_id, "id", None), build_types_id=getattr(build_types_id, "id", None), site_id=getattr(sites_id, "id", None))
|
||||
build.save()
|
||||
return {
|
||||
"message": "MSG0002-UPDATE",
|
||||
"data": None,
|
||||
@@ -108,6 +125,10 @@ SuperBuildUpdateEvent.event_callable = super_build_update_callable
|
||||
|
||||
|
||||
def super_build_delete_callable(uu_id: str, headers: CommonHeaders):
|
||||
with Build.new_session() as db_session:
|
||||
Build.set_session(db_session)
|
||||
build = Build.query.filter(Build.uu_id == uu_id).first()
|
||||
build.delete()
|
||||
return {
|
||||
"message": "MSG0003-DELETE",
|
||||
"data": None,
|
||||
|
||||
Reference in New Issue
Block a user