from typing import Any from Initializer.event_clusters import Event from Validations.response import ( PaginateOnly, Pagination, PaginationResult, PostgresResponseSingle, PostgresResponse, EndpointResponse ) from Validations.defaults.validations import CommonHeaders from Schemas import ( Addresses, BuildTypes, Build, BuildSites, BuildParts, Companies, # AccountRecords, ) # List all endpoint FL-REP SuperBuildListEvent = Event( name="build_list", key="e8586858-db39-4520-bb1a-338ab9c5f043", request_validator=None, # TODO: Add request validator response_validator=None, # TODO: Add response validator description="Super Build List all endpoint", ) SuperBuildCreateEvent = Event( name="build_create", key="79519e0f-c4a6-4afc-a494-d0e547ba39bc", request_validator=None, # TODO: Add request validator response_validator=None, # TODO: Add response validator description="Super Build Create endpoint", ) SuperBuildUpdateEvent = Event( name="build_update", key="ca51080e-11f2-46f7-a1ba-caa1c40b3fd6", request_validator=None, # TODO: Add request validator response_validator=None, # TODO: Add response validator description="Super Build Update endpoint", ) SuperBuildDeleteEvent = Event( name="build_delete", key="a30d32cc-c931-41d6-8a66-d6c04479098f", request_validator=None, # TODO: Add request validator response_validator=None, # TODO: Add response validator description="Super Build Delete endpoint", ) def super_build_list_callable(list_options: PaginateOnly, headers: CommonHeaders): list_options = PaginateOnly(**list_options.model_dump()) # TODO: Pydantic Model must be implemnted for list_options.query 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: 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=build_records_query, pagination=pagination, response_model=None) return EndpointResponse(message="MSG0003-LIST", pagination_result=pagination_result).response 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, "completed": True, } SuperBuildCreateEvent.event_callable = super_build_create_callable 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, "completed": True, } 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, "completed": True, } SuperBuildDeleteEvent.event_callable = super_build_delete_callable