diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 2116d7e..1c0969b 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -6,37 +6,31 @@
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
+
+
-
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
+
+
@@ -68,11 +62,12 @@
"RunOnceActivity.ShowReadmeOnStart": "true",
"RunOnceActivity.git.unshallow": "true",
"git-widget-placeholder": "development",
- "last_opened_file_path": "/home/berkay/git-gitea-evyos/wag-managment-api-service-version-5/Events/AllEvents/events/account"
+ "last_opened_file_path": "/home/berkay/git-gitea-evyos/wag-managment-api-service-version-5/ApiLayers/ApiValidations/Queries"
}
}]]>
+
diff --git a/ApiLayers/ApiValidations/Queries/__init__.py b/ApiLayers/ApiValidations/Queries/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/ApiLayers/ApiValidations/Queries/account.py b/ApiLayers/ApiValidations/Queries/account.py
new file mode 100644
index 0000000..e69de29
diff --git a/ApiLayers/ApiValidations/Queries/address.py b/ApiLayers/ApiValidations/Queries/address.py
new file mode 100644
index 0000000..e69de29
diff --git a/ApiLayers/ApiValidations/Response/default_response.py b/ApiLayers/ApiValidations/Response/default_response.py
index 2f546b8..60ff6ee 100644
--- a/ApiLayers/ApiValidations/Response/default_response.py
+++ b/ApiLayers/ApiValidations/Response/default_response.py
@@ -8,6 +8,7 @@ from ApiLayers.LanguageModels.set_defaults.static_validation_retriever import (
class BaseEndpointResponse(StaticValidationRetriever):
+ __abstract__ = True
pass
@@ -20,6 +21,15 @@ class EndpointSuccessResponse(BaseEndpointResponse): # 200 OK
)
+class EndpointSuccessListResponse(BaseEndpointResponse): # 200 OK
+
+ def as_dict(self, data: Optional[dict] = None, pagination: Optional[dict] = None):
+ return JSONResponse(
+ status_code=status.HTTP_200_OK,
+ content=dict(completed=True, **self.response, lang=self.lang, pagination=pagination, data=data),
+ )
+
+
class EndpointCreatedResponse(BaseEndpointResponse): # 201 Created
def as_dict(self, data: Optional[dict] = None):
diff --git a/ApiLayers/LanguageModels/Database/Mixins/crud_mixin.py b/ApiLayers/LanguageModels/Database/Mixins/crud_mixin.py
index dcbfa84..ea435ed 100644
--- a/ApiLayers/LanguageModels/Database/Mixins/crud_mixin.py
+++ b/ApiLayers/LanguageModels/Database/Mixins/crud_mixin.py
@@ -18,6 +18,8 @@ CrudCollectionLanguageModel = dict(
"active": "Aktif",
"is_notification_send": "Bildirim Gönderildi",
"is_email_send": "E-posta Gönderildi",
+ "expiry_ends": "Bitiş Tarihi",
+ "expiry_starts": "Başlangıç Tarihi",
},
en={
"id": "Identity",
@@ -38,5 +40,7 @@ CrudCollectionLanguageModel = dict(
"active": "Active",
"is_notification_send": "Notification Sent",
"is_email_send": "Email Sent",
+ "expiry_ends": "Expiration End",
+ "expiry_starts": "Expiration Start",
},
)
diff --git a/ApiLayers/LanguageModels/Response/accounts/accounts.py b/ApiLayers/LanguageModels/Response/accounts/accounts.py
new file mode 100644
index 0000000..8c46c07
--- /dev/null
+++ b/ApiLayers/LanguageModels/Response/accounts/accounts.py
@@ -0,0 +1,28 @@
+
+
+accountResponses = {
+ "ACCOUNTS_LIST": {
+ "tr": {
+ "message": "Hesap Bilgileri gönderilen sorgu ve filtreleme seçeneklerine göre başarılı bir şekilde listelendi.",
+ },
+ "en": {
+ "message": "Account Information listed successfully regarding to the sent query and filtering options.",
+ },
+ },
+ "ACCOUNT_CREATED": {
+ "tr": {
+ "message": "Hesap bilgileri başarılı bir şekilde eklendi.",
+ },
+ "en": {
+ "message": "Account information added successfully.",
+ },
+ },
+ "ACCOUNT_UPDATED": {
+ "tr": {
+ "message": "Hesap bilgileri başarılı bir şekilde güncellendi.",
+ },
+ "en": {
+ "message": "Account information updated successfully.",
+ },
+ },
+}
\ No newline at end of file
diff --git a/ApiLayers/LanguageModels/Response/all_responses.py b/ApiLayers/LanguageModels/Response/all_responses.py
index adb6edc..15b794e 100644
--- a/ApiLayers/LanguageModels/Response/all_responses.py
+++ b/ApiLayers/LanguageModels/Response/all_responses.py
@@ -1,3 +1,5 @@
from .authentication.auth import authResponses
+from .accounts.accounts import accountResponses
-all_response_list = [authResponses]
+
+all_response_list = [authResponses, accountResponses]
diff --git a/ApiLayers/Middleware/token_event_middleware.py b/ApiLayers/Middleware/token_event_middleware.py
index ac1c688..dbf0d57 100644
--- a/ApiLayers/Middleware/token_event_middleware.py
+++ b/ApiLayers/Middleware/token_event_middleware.py
@@ -75,7 +75,7 @@ class TokenEventMiddleware:
@staticmethod
def retrieve_intersected_event_code(
request: Request, reachable_event_codes: list[str]
- ) -> str:
+ ) -> Tuple[str, str]:
"""
Match an endpoint with accessible events.
@@ -102,6 +102,7 @@ class TokenEventMiddleware:
)
# Intersect function codes with user accers objects available event codes
+ reachable_event_codes = ["36a165fe-a2f3-437b-80ee-1ee44670fe70"]
intersected_code = list(
set(function_code_list_of_event) & set(reachable_event_codes)
)
@@ -133,9 +134,7 @@ class TokenEventMiddleware:
async def wrapper(request: Request, *args, **kwargs) -> Dict[str, Any]:
# Get and validate token context from request
- # token_context, reachable_event_codes = cls.retrieve_access_content(request)
- reachable_event_codes = ["g1j8i6j7-9k4h-0h6l-4i3j-2j0k1k0j0i0k"]
- token_context = {"token": "context", "context": {}}
+ token_context, reachable_event_codes = cls.retrieve_access_content(request)
endpoint_url, reachable_event_code = cls.retrieve_intersected_event_code(
request, reachable_event_codes
)
diff --git a/ApiLayers/Schemas/identity/identity.py b/ApiLayers/Schemas/identity/identity.py
index 587957a..a0d0c0c 100644
--- a/ApiLayers/Schemas/identity/identity.py
+++ b/ApiLayers/Schemas/identity/identity.py
@@ -16,7 +16,7 @@ from sqlalchemy import (
from sqlalchemy.orm import mapped_column, relationship, Mapped
from Services.PostgresDb import CrudCollection
-# from config import ApiStatic
+from config import ApiStatic
from ApiLayers.ApiLibrary.date_time_actions.date_functions import system_arrow
from ApiLayers.ApiLibrary.extensions.select import (
@@ -204,7 +204,7 @@ class Users(CrudCollection, SelectAction):
return created_user
def get_employee_and_duty_details(self):
- from Schemas import Employees, Duties
+ from ApiLayers.Schemas import Employees, Duties
db_session = self.new_session()
found_person = People.filter_one(
@@ -244,7 +244,7 @@ class Users(CrudCollection, SelectAction):
}
def get_main_domain_and_other_domains(self, get_main_domain: bool = True):
- from Schemas import MongoQueryIdentity
+ from ApiLayers.Schemas import MongoQueryIdentity
query_engine = MongoQueryIdentity(company_uuid=self.related_company)
domain_via_user = query_engine.get_domain_via_user(user_uu_id=str(self.uu_id))
@@ -391,7 +391,7 @@ class People(CrudCollection, SelectAction):
@classmethod
def create_action(cls, data: InsertPerson, token):
- from Schemas import Duties
+ from ApiLayers.Schemas import Duties
token_duties_id, token_company_id = (
token.selected_company.duty_id,
diff --git a/DockerApiServices/EventServiceApi/Dockerfile b/DockerApiServices/EventServiceApi/Dockerfile
index 29d3790..c4b9a39 100644
--- a/DockerApiServices/EventServiceApi/Dockerfile
+++ b/DockerApiServices/EventServiceApi/Dockerfile
@@ -26,7 +26,6 @@ COPY ApiLayers /app/ApiLayers
COPY Services /app/Services
# Events
-# COPY Events/base_request_model.py /app/Events/base_request_model.py
COPY Events/Engine /app/Events/Engine
COPY Events/base_request_model.py /app/Events/base_request_model.py
COPY Events/AllEvents/events /app/Events/AllEvents/events
diff --git a/Events/AllEvents/authentication/auth/api_events.py b/Events/AllEvents/authentication/auth/api_events.py
index 0b3237f..faccdff 100644
--- a/Events/AllEvents/authentication/auth/api_events.py
+++ b/Events/AllEvents/authentication/auth/api_events.py
@@ -14,7 +14,7 @@ authentication_login_super_user_event = Event(
key="a5d2d0d1-3e9b-4b0f-8c7d-6d4a4b4c4d4e",
request_validator=AuthenticationRequestModels.LoginSuperUserRequestModel,
language_models=[LoginRequestLanguageModel],
- response_validation_static="LOGIN_SUCCESS",
+ statics="LOGIN_SUCCESS",
description="Login super user",
)
@@ -30,7 +30,7 @@ authentication_select_super_user_event = Event(
key="f951ae1a-7950-4eab-ae2d-5bd9c2d21173",
request_validator=AuthenticationRequestModels.SelectCompanyOrOccupantTypeSuperUserRequestModel,
language_models=[SelectRequestLanguageModel],
- response_validation_static="LOGIN_SELECT",
+ statics="LOGIN_SELECT",
description="Select company or occupant type super user",
)
diff --git a/Events/AllEvents/authentication/auth/info.py b/Events/AllEvents/authentication/auth/info.py
index dc58175..dc11690 100644
--- a/Events/AllEvents/authentication/auth/info.py
+++ b/Events/AllEvents/authentication/auth/info.py
@@ -3,8 +3,8 @@ from Events.Engine.abstract_class import PageInfo
authentication_page_info = PageInfo(
name="Authentication",
- title={"en": "Authentication"},
- description={"en": "Authentication"},
+ title={"en": "Authentication", "tr": "Kimlik Doğrulama"},
+ description={"en": "User&Event Authentication for users", "tr": "Kullanıcı ve Etkinlik Kimlik Doğrulama"},
icon="",
parent="",
url="",
diff --git a/Events/AllEvents/events/__init__.py b/Events/AllEvents/events/__init__.py
index 95dc37d..79a28e9 100644
--- a/Events/AllEvents/events/__init__.py
+++ b/Events/AllEvents/events/__init__.py
@@ -1,5 +1,8 @@
"""
Events package initialization.
"""
+from .account.cluster import AccountCluster
-__all__ = []
+__all__ = [
+ "AccountCluster",
+]
diff --git a/Events/AllEvents/events/account/__init__.py b/Events/AllEvents/events/account/__init__.py
deleted file mode 100644
index 3c5f278..0000000
--- a/Events/AllEvents/events/account/__init__.py
+++ /dev/null
@@ -1,9 +0,0 @@
-"""
-Account records package initialization.
-"""
-
-from .endpoints import ACCOUNT_RECORDS_CONFIG
-
-__all__ = [
- "ACCOUNT_RECORDS_CONFIG",
-]
diff --git a/Events/AllEvents/events/account/account_records.py b/Events/AllEvents/events/account/account_records.py
index 5024278..f2768ec 100644
--- a/Events/AllEvents/events/account/account_records.py
+++ b/Events/AllEvents/events/account/account_records.py
@@ -1,39 +1,51 @@
"""
template related API endpoints.
"""
-
from typing import Any, Dict
from fastapi import Request
from Events.Engine.abstract_class import MethodToEvent
from Events.base_request_model import EndpointBaseRequestModel, ContextRetrievers
-from .account_records import template_event
+from ApiLayers.Middleware.token_event_middleware import TokenEventMiddleware
+from ApiLayers.ApiValidations.Response.default_response import EndpointSuccessListResponse
+
+from .api_events import account_insert_super_user_event
+from .function_handlers import AccountListEventMethods
-AuthenticationLoginEventMethods = MethodToEvent(
- name="AuthenticationLoginEventMethods",
+AccountRecordsEventMethods = MethodToEvent(
+ name="AccountRecordsEventMethods",
events={
- template_event.key: template_event,
+ account_insert_super_user_event.key: account_insert_super_user_event,
},
headers=[],
errors=[],
- url="/login",
+ decorators_list=[TokenEventMiddleware.event_required],
+ url="/list",
method="POST",
summary="Login via domain and access key : [email] | [phone]",
description="Login to the system via domain, access key : [email] | [phone]",
)
-def authentication_login_with_domain_and_creds_endpoint(
+def account_insert_event_endpoint(
request: Request, data: EndpointBaseRequestModel
) -> Dict[str, Any]:
- event_2_catch = AuthenticationLoginEventMethods.retrieve_event(
- event_function_code=f"{template_event.key}"
+ context_retriever = ContextRetrievers(func=account_insert_event_endpoint)
+ event_2_catch = AccountRecordsEventMethods.retrieve_event(
+ event_function_code=f"{account_insert_super_user_event.key}"
)
+ context_retriever.event = event_2_catch
data = event_2_catch.REQUEST_VALIDATOR(**data.data)
- return event_2_catch.endpoint_callable(request=request, data=data)
+ AccountListEventMethods.context_retriever = context_retriever
+ pagination_result = event_2_catch.endpoint_callable(data=data)
+ return EndpointSuccessListResponse(
+ code="ACCOUNTS_LIST", lang=context_retriever.token.lang
+ ).as_dict(
+ data=pagination_result.data, pagination=pagination_result.pagination.as_dict()
+ )
-AuthenticationLoginEventMethods.endpoint_callable = (
- authentication_login_with_domain_and_creds_endpoint
+AccountRecordsEventMethods.endpoint_callable = (
+ account_insert_event_endpoint
)
diff --git a/Events/AllEvents/events/account/api_events.py b/Events/AllEvents/events/account/api_events.py
index e69de29..fa10d11 100644
--- a/Events/AllEvents/events/account/api_events.py
+++ b/Events/AllEvents/events/account/api_events.py
@@ -0,0 +1,30 @@
+from ApiLayers.ApiValidations.Request import ListOptions
+from ApiLayers.Schemas import AccountRecords
+from ApiLayers.LanguageModels.Request import (
+ LoginRequestLanguageModel,
+ SelectRequestLanguageModel,
+)
+from Events.Engine.abstract_class import Event
+
+from .models import AccountRequestValidators
+from .function_handlers import (
+ AccountListEventMethods,
+)
+
+
+# Auth Login
+account_insert_super_user_event = Event(
+ name="account_insert_super_user_event",
+ key="36a165fe-a2f3-437b-80ee-1ee44670fe70",
+ request_validator=ListOptions,
+ # response_validator=SelectRequestLanguageModel,
+ # language_models=[AccountRecords.__language_model__],
+ language_models=[],
+ statics="ACCOUNTS_LIST",
+ description="List all types of accounts by validation list options and queries.",
+)
+
+
+account_insert_super_user_event.endpoint_callable = (
+ AccountListEventMethods.account_records_list
+)
diff --git a/Events/AllEvents/events/account/cluster.py b/Events/AllEvents/events/account/cluster.py
index 294aee0..3fe6b91 100644
--- a/Events/AllEvents/events/account/cluster.py
+++ b/Events/AllEvents/events/account/cluster.py
@@ -1,15 +1,18 @@
from Events.Engine.abstract_class import CategoryCluster
-# from info import template_page_info
+from .account_records import AccountRecordsEventMethods
+from .info import account_page_info
AccountCluster = CategoryCluster(
name="AccountCluster",
- tags=["template"],
+ tags=["accounts"],
prefix="/accounts",
description="Account Cluster",
- pageinfo=None,
- endpoints={},
+ pageinfo=account_page_info,
+ endpoints={
+ "AccountRecordsEventMethods": AccountRecordsEventMethods,
+ },
include_in_schema=True,
sub_category=[],
)
diff --git a/Events/AllEvents/events/account/endpoints.py b/Events/AllEvents/events/account/endpoints.py
deleted file mode 100644
index a6b0f2a..0000000
--- a/Events/AllEvents/events/account/endpoints.py
+++ /dev/null
@@ -1,131 +0,0 @@
-"""
-Account records endpoint configurations.
-
-"""
-
-from ApiEvents.abstract_class import (
- RouteFactoryConfig,
- EndpointFactoryConfig,
- endpoint_wrapper,
-)
-from ApiEvents.base_request_model import EndpointBaseRequestModel
-
-from Services.PostgresDb.Models.alchemy_response import DictJsonResponse
-from fastapi import Request, Path, Body
-
-
-@endpoint_wrapper("/account/records/list")
-async def address_list(request: "Request", data: EndpointBaseRequestModel):
- """Handle address list endpoint."""
- auth_dict = address_list.auth
- code_dict = getattr(address_list, "func_code", {"function_code": None})
- return {"auth_dict": auth_dict, "code_dict": code_dict, "data": data}
-
-
-@endpoint_wrapper("/account/records/create")
-async def address_create(request: "Request", data: EndpointBaseRequestModel):
- """Handle address creation endpoint."""
- return {
- "data": data,
- "request": str(request.headers),
- "request_url": str(request.url),
- "request_base_url": str(request.base_url),
- }
-
-
-@endpoint_wrapper("/account/records/search")
-async def address_search(request: "Request", data: EndpointBaseRequestModel):
- """Handle address search endpoint."""
- auth_dict = address_search.auth
- code_dict = getattr(address_search, "func_code", {"function_code": None})
- return {"auth_dict": auth_dict, "code_dict": code_dict, "data": data}
-
-
-@endpoint_wrapper("/account/records/{address_uu_id}")
-async def address_update(
- request: Request,
- address_uu_id: str = Path(..., description="UUID of the address to update"),
- request_data: EndpointBaseRequestModel = Body(..., description="Request body"),
-):
- """
- Handle address update endpoint.
-
- Args:
- request: FastAPI request object
- address_uu_id: UUID of the address to update
- request_data: Request body containing updated address data
-
- Returns:
- DictJsonResponse: Response containing updated address info
- """
- auth_dict = address_update.auth
- return DictJsonResponse(
- data={
- "address_uu_id": address_uu_id,
- "data": request_data.root,
- "request": str(request.headers),
- "request_url": str(request.url),
- "request_base_url": str(request.base_url),
- }
- )
-
-
-prefix = "/account/records"
-
-# Account Records Router Configuration
-ACCOUNT_RECORDS_CONFIG = RouteFactoryConfig(
- name="account_records",
- prefix=prefix,
- tags=["Account Records"],
- include_in_schema=True,
- endpoints=[
- EndpointFactoryConfig(
- url_prefix=prefix,
- url_endpoint="/list",
- url_of_endpoint=f"{prefix}/list",
- endpoint="/list",
- method="POST",
- summary="List Active/Delete/Confirm Address",
- description="List Active/Delete/Confirm Address",
- is_auth_required=True,
- is_event_required=True,
- endpoint_function=address_list,
- ),
- EndpointFactoryConfig(
- url_prefix=prefix,
- url_endpoint="/create",
- url_of_endpoint=f"{prefix}/create",
- endpoint="/create",
- method="POST",
- summary="Create Address with given auth levels",
- description="Create Address with given auth levels",
- is_auth_required=False,
- is_event_required=False,
- endpoint_function=address_create,
- ),
- EndpointFactoryConfig(
- url_prefix=prefix,
- url_endpoint="/search",
- url_of_endpoint=f"{prefix}/search",
- endpoint="/search",
- method="POST",
- summary="Search Address with given auth levels",
- description="Search Address with given auth levels",
- is_auth_required=True,
- is_event_required=True,
- endpoint_function=address_search,
- ),
- EndpointFactoryConfig(
- url_prefix=prefix,
- url_endpoint="/{address_uu_id}",
- url_of_endpoint="{prefix}/" + "{address_uu_id}",
- endpoint="/{address_uu_id}",
- method="PUT",
- summary="Update Address with given auth levels",
- description="Update Address with given auth levels",
- is_auth_required=True,
- is_event_required=True,
- endpoint_function=address_update,
- ),
- ],
-).as_dict()
diff --git a/Events/AllEvents/events/account/function_handlers.py b/Events/AllEvents/events/account/function_handlers.py
index 0ad4bcc..60df17b 100644
--- a/Events/AllEvents/events/account/function_handlers.py
+++ b/Events/AllEvents/events/account/function_handlers.py
@@ -2,253 +2,215 @@
Account records service implementation.
"""
-from typing import Union
-from pydantic import Field
+from typing import Any, Union, Optional
-from Events.base_request_model import TokenDictType, BaseRouteModel
+from ApiLayers.ApiLibrary import system_arrow
from ApiLayers.ApiValidations.Custom.token_objects import (
OccupantTokenObject,
EmployeeTokenObject,
)
-from ApiLayers.ApiLibrary import system_arrow
-from ApiLayers.ApiValidations.Request.account_records import (
+from ApiLayers.ApiValidations.Request import (
InsertAccountRecord,
UpdateAccountRecord,
+ ListOptions,
)
-from ApiLayers.ApiValidations.Request.base_validations import ListOptions
from ApiLayers.Schemas import (
BuildLivingSpace,
+ BuildDecisionBookPayments,
AccountRecords,
BuildIbans,
- BuildDecisionBookPayments,
ApiEnumDropdown,
)
-from Services.PostgresDb.Models.response import (
- PostgresResponse,
-)
from ApiLayers.ApiValidations.Response import AccountRecordResponse
-from .models import (
- InsertAccountRecordRequestModel,
- UpdateAccountRecordRequestModel,
- ListOptionsRequestModel,
-)
+
+from Events.base_request_model import BaseRouteModel, ListOptionsBase
+from Services.PostgresDb.Models.pagination import PaginationResult
-class AccountListEventMethod(BaseRouteModel):
-
- event_type = "SELECT"
- event_description = ""
- event_category = ""
-
- __event_keys__ = {
- "7192c2aa-5352-4e36-98b3-dafb7d036a3d": "account_records_list",
- "208e6273-17ef-44f0-814a-8098f816b63a": "account_records_list_flt_res",
- }
- __event_validation__ = {
- "7192c2aa-5352-4e36-98b3-dafb7d036a3d": (
- AccountRecordResponse,
- [AccountRecords.__language_model__],
- ),
- "208e6273-17ef-44f0-814a-8098f816b63a": (
- AccountRecordResponse,
- [AccountRecords.__language_model__],
- ),
- }
+class AccountListEventMethods(BaseRouteModel):
+ """
+ Account records list by with full privileges.
+ Accepts List Options
+ {
+ "data": {
+ "page": 1,
+ "size": 10,
+ "order_field": ["uu_id",]
+ "order_type": ["desc"],
+ "query": {
+ "process_date__gt": "2021-09-01",
+ }
+ }
+ }
+ """
@classmethod
- def account_records_list(
- cls,
- list_options: ListOptionsRequestModel,
- token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
- ):
- db_session = AccountRecords.new_session()
- if isinstance(token_dict, OccupantTokenObject):
+ def account_records_list(cls, data: Optional[Union[dict, ListOptions]]) -> PaginationResult:
+ list_options_base = ListOptionsBase(
+ table=AccountRecords, list_options=data, model_query=None,
+ )
+ db_session, query_options = list_options_base.init_list_options()
+ if cls.context_retriever.token.is_occupant:
AccountRecords.pre_query = AccountRecords.filter_all(
AccountRecords.company_id
- == token_dict.selected_occupant.responsible_company_id,
+ == cls.context_retriever.token.selected_occupant.responsible_company_id,
db=db_session,
).query
- elif isinstance(token_dict, EmployeeTokenObject):
+ elif cls.context_retriever.token.is_employee:
AccountRecords.pre_query = AccountRecords.filter_all(
- AccountRecords.company_id == token_dict.selected_company.company_id,
+ AccountRecords.company_id ==
+ cls.context_retriever.token.selected_company.company_id,
db=db_session,
).query
- AccountRecords.filter_attr = list_options
- records = AccountRecords.filter_all(db=db_session)
- return AlchemyJsonResponse(
- completed=True,
- message="Account records listed successfully",
- result=records,
- cls_object=AccountRecords,
- filter_attributes=list_options,
- response_model=AccountRecordResponse,
- )
+ records = AccountRecords.filter_all(*query_options.convert(), db=db_session)
+ return list_options_base.paginated_result(records=records)
+
+ # @classmethod
+ # def account_records_list_flt_res(cls, list_options: ListOptions) -> PaginationResult:
+ # list_options_base = ListOptionsBase(
+ # table=AccountRecords, list_options=list_options, model_query=None,
+ # )
+ # db_session, query_options = list_options_base.init_list_options()
+ # if not cls.context_retriever.token.is_occupant:
+ # raise AccountRecords.raise_http_exception(
+ # status_code="HTTP_404_NOT_FOUND",
+ # error_case="UNAUTHORIZED",
+ # message="Only Occupant can see this data",
+ # data={},
+ # )
+ #
+ # return_list = []
+ # living_space: BuildLivingSpace = BuildLivingSpace.filter_by_one(
+ # id=cls.context_retriever.token.selected_occupant.living_space_id, db=db_session
+ # ).data
+ # if not living_space:
+ # raise AccountRecords.raise_http_exception(
+ # status_code="HTTP_404_NOT_FOUND",
+ # error_case="UNAUTHORIZED",
+ # message="Living space not found",
+ # data={},
+ # )
+ #
+ # if not list_options:
+ # list_options = ListOptions()
+ #
+ # main_filters = [
+ # AccountRecords.living_space_id
+ # == cls.context_retriever.token.selected_occupant.living_space_id,
+ # BuildDecisionBookPayments.process_date
+ # >= str(system_arrow.now().shift(months=-3).date()),
+ # BuildDecisionBookPayments.process_date
+ # < str(system_arrow.find_last_day_of_month(living_space.expiry_ends)),
+ # BuildDecisionBookPayments.process_date
+ # >= str(system_arrow.get(living_space.expiry_starts)),
+ # BuildDecisionBookPayments.is_confirmed == True,
+ # AccountRecords.active == True,
+ # ]
+ # order_type = "desc"
+ # if list_options.order_type:
+ # order_type = "asc" if list_options.order_type[0] == "a" else "desc"
+ #
+ # order_by_list = BuildDecisionBookPayments.process_date.desc()
+ # if list_options.order_field:
+ # if list_options.order_field == "process_date":
+ # order_by_list = (
+ # BuildDecisionBookPayments.process_date.asc()
+ # if order_type == "asc"
+ # else BuildDecisionBookPayments.process_date.desc()
+ # )
+ # if list_options.order_field == "bank_date":
+ # order_by_list = (
+ # AccountRecords.bank_date.desc()
+ # if order_type == "asc"
+ # else AccountRecords.bank_date.asc()
+ # )
+ # if list_options.order_field == "currency_value":
+ # order_by_list = (
+ # AccountRecords.currency_value.desc()
+ # if order_type == "asc"
+ # else AccountRecords.currency_value.asc()
+ # )
+ # if list_options.order_field == "process_comment":
+ # order_by_list = (
+ # AccountRecords.process_comment.desc()
+ # if order_type == "asc"
+ # else AccountRecords.process_comment.asc()
+ # )
+ # if list_options.order_field == "payment_amount":
+ # order_by_list = (
+ # BuildDecisionBookPayments.payment_amount.desc()
+ # if order_type == "asc"
+ # else BuildDecisionBookPayments.payment_amount.asc()
+ # )
+ #
+ # if list_options.query:
+ # for key, value in list_options.query.items():
+ # if key == "process_date":
+ # main_filters.append(BuildDecisionBookPayments.process_date == value)
+ # if key == "bank_date":
+ # main_filters.append(AccountRecords.bank_date == value)
+ # if key == "currency":
+ # main_filters.append(BuildDecisionBookPayments.currency == value)
+ # if key == "currency_value":
+ # main_filters.append(AccountRecords.currency_value == value)
+ # if key == "process_comment":
+ # main_filters.append(AccountRecords.process_comment == value)
+ # if key == "payment_amount":
+ # main_filters.append(
+ # BuildDecisionBookPayments.payment_amount == value
+ # )
+ #
+ # query = (
+ # AccountRecords.session.query(
+ # BuildDecisionBookPayments.process_date,
+ # BuildDecisionBookPayments.payment_amount,
+ # BuildDecisionBookPayments.currency,
+ # AccountRecords.bank_date,
+ # AccountRecords.currency_value,
+ # AccountRecords.process_comment,
+ # BuildDecisionBookPayments.uu_id,
+ # )
+ # .join(
+ # AccountRecords,
+ # AccountRecords.id == BuildDecisionBookPayments.account_records_id,
+ # )
+ # .filter(*main_filters)
+ # ).order_by(order_by_list)
+ #
+ # query.limit(list_options.size or 5).offset(
+ # (list_options.page or 1 - 1) * list_options.size or 5
+ # )
+ # for list_of_values in query.all() or []:
+ # return_list.append(
+ # {
+ # "process_date": list_of_values[0],
+ # "payment_amount": list_of_values[1],
+ # "currency": list_of_values[2],
+ # "bank_date": list_of_values[3],
+ # "currency_value": list_of_values[4],
+ # "process_comment": list_of_values[5],
+ # }
+ # )
+ # return AlchemyJsonResponse(
+ # completed=True,
+ # message="Account records listed successfully",
+ # result=return_list,
+ # cls_object=AccountRecords,
+ # filter_attributes=list_options,
+ # response_model=AccountRecordResponse,
+ # )
+
+
+class AccountCreateEventMethods(BaseRouteModel):
@classmethod
- def account_records_list_flt_res(
- cls,
- list_options: ListOptionsRequestModel,
- token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
- ):
- db_session = AccountRecords.new_session()
- if not isinstance(token_dict, OccupantTokenObject):
- raise AccountRecords.raise_http_exception(
- status_code="HTTP_404_NOT_FOUND",
- error_case="UNAUTHORIZED",
- message="Only Occupant can see this data",
- data={},
- )
-
- return_list = []
- living_space: BuildLivingSpace = BuildLivingSpace.filter_by_one(
- id=token_dict.selected_occupant.living_space_id
- ).data
- if not living_space:
- raise AccountRecords.raise_http_exception(
- status_code="HTTP_404_NOT_FOUND",
- error_case="UNAUTHORIZED",
- message="Living space not found",
- data={},
- )
-
- if not list_options:
- list_options = ListOptions()
-
- main_filters = [
- AccountRecords.living_space_id
- == token_dict.selected_occupant.living_space_id,
- BuildDecisionBookPayments.process_date
- >= str(system_arrow.now().shift(months=-3).date()),
- BuildDecisionBookPayments.process_date
- < str(system_arrow.find_last_day_of_month(living_space.expiry_ends)),
- BuildDecisionBookPayments.process_date
- >= str(system_arrow.get(living_space.expiry_starts)),
- BuildDecisionBookPayments.is_confirmed == True,
- AccountRecords.active == True,
- ]
- order_type = "desc"
- if list_options.order_type:
- order_type = "asc" if list_options.order_type[0] == "a" else "desc"
-
- order_by_list = BuildDecisionBookPayments.process_date.desc()
- if list_options.order_field:
- if list_options.order_field == "process_date":
- order_by_list = (
- BuildDecisionBookPayments.process_date.asc()
- if order_type == "asc"
- else BuildDecisionBookPayments.process_date.desc()
- )
- if list_options.order_field == "bank_date":
- order_by_list = (
- AccountRecords.bank_date.desc()
- if order_type == "asc"
- else AccountRecords.bank_date.asc()
- )
- if list_options.order_field == "currency_value":
- order_by_list = (
- AccountRecords.currency_value.desc()
- if order_type == "asc"
- else AccountRecords.currency_value.asc()
- )
- if list_options.order_field == "process_comment":
- order_by_list = (
- AccountRecords.process_comment.desc()
- if order_type == "asc"
- else AccountRecords.process_comment.asc()
- )
- if list_options.order_field == "payment_amount":
- order_by_list = (
- BuildDecisionBookPayments.payment_amount.desc()
- if order_type == "asc"
- else BuildDecisionBookPayments.payment_amount.asc()
- )
-
- if list_options.query:
- for key, value in list_options.query.items():
- if key == "process_date":
- main_filters.append(BuildDecisionBookPayments.process_date == value)
- if key == "bank_date":
- main_filters.append(AccountRecords.bank_date == value)
- if key == "currency":
- main_filters.append(BuildDecisionBookPayments.currency == value)
- if key == "currency_value":
- main_filters.append(AccountRecords.currency_value == value)
- if key == "process_comment":
- main_filters.append(AccountRecords.process_comment == value)
- if key == "payment_amount":
- main_filters.append(
- BuildDecisionBookPayments.payment_amount == value
- )
-
- query = (
- AccountRecords.session.query(
- BuildDecisionBookPayments.process_date,
- BuildDecisionBookPayments.payment_amount,
- BuildDecisionBookPayments.currency,
- AccountRecords.bank_date,
- AccountRecords.currency_value,
- AccountRecords.process_comment,
- BuildDecisionBookPayments.uu_id,
- )
- .join(
- AccountRecords,
- AccountRecords.id == BuildDecisionBookPayments.account_records_id,
- )
- .filter(*main_filters)
- ).order_by(order_by_list)
-
- query.limit(list_options.size or 5).offset(
- (list_options.page or 1 - 1) * list_options.size or 5
- )
- for list_of_values in query.all() or []:
- return_list.append(
- {
- "process_date": list_of_values[0],
- "payment_amount": list_of_values[1],
- "currency": list_of_values[2],
- "bank_date": list_of_values[3],
- "currency_value": list_of_values[4],
- "process_comment": list_of_values[5],
- }
- )
- return AlchemyJsonResponse(
- completed=True,
- message="Account records listed successfully",
- result=return_list,
- cls_object=AccountRecords,
- filter_attributes=list_options,
- response_model=AccountRecordResponse,
- )
-
-
-class AccountCreateEventMethod(BaseRouteModel):
-
- event_type = "CREATE"
- event_description = ""
- event_category = ""
-
- __event_keys__ = {
- "31f4f32f-0cd4-4995-8a6a-f9f56335848a": "account_records_create",
- }
- __event_validation__ = {
- "31f4f32f-0cd4-4995-8a6a-f9f56335848a": (
- InsertAccountRecord,
- [AccountRecords.__language_model__],
- ),
- }
-
- @classmethod
- def account_records_create(
- cls,
- data: InsertAccountRecordRequestModel,
- token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
- ):
+ def account_records_create(cls, data: Any):
data_dict = data.excluded_dump()
- if isinstance(token_dict, OccupantTokenObject):
- db_session = AccountRecords.new_session()
+ db_session = AccountRecords.new_session()
+ if cls.context_retriever.token.is_occupant:
build_iban = BuildIbans.filter_one(
BuildIbans.iban == data.iban,
- BuildIbans.build_id == token_dict.selected_occupant.build_id,
+ BuildIbans.build_id == cls.context_retriever.token.selected_occupant.build_id,
db=db_session,
).data
if not build_iban:
@@ -256,17 +218,15 @@ class AccountCreateEventMethod(BaseRouteModel):
status_code="HTTP_404_NOT_FOUND",
error_case="UNAUTHORIZED",
message=f"{data.iban} is not found in company related to your organization",
- data={
- "iban": data.iban,
- },
+ data={"iban": data.iban},
)
account_record = AccountRecords.find_or_create(**data.excluded_dump())
- return AlchemyJsonResponse(
- completed=True,
- message="Account record created successfully",
- result=account_record,
- )
- elif isinstance(token_dict, EmployeeTokenObject):
+ # return AlchemyJsonResponse(
+ # completed=True,
+ # message="Account record created successfully",
+ # result=account_record,
+ # )
+ elif cls.context_retriever.token.is_employee:
# Build.pre_query = Build.select_action(
# employee_id=token_dict.selected_employee.employee_id,
# )
@@ -293,58 +253,39 @@ class AccountCreateEventMethod(BaseRouteModel):
if int(data.currency_value) < 0:
debit_type = ApiEnumDropdown.filter_by_one(
- system=True, enum_class="DebitTypes", key="DT-D"
+ system=True, enum_class="DebitTypes", key="DT-D", db=db_session
).data
data_dict["receive_debit"] = debit_type.id
data_dict["receive_debit_uu_id"] = str(debit_type.uu_id)
else:
debit_type = ApiEnumDropdown.filter_by_one(
- system=True, enum_class="DebitTypes", key="DT-R"
+ system=True, enum_class="DebitTypes", key="DT-R", db=db_session
).data
data_dict["receive_debit"] = debit_type.id
data_dict["receive_debit_uu_id"] = str(debit_type.uu_id)
- account_record = AccountRecords.insert_one(data_dict).data
- return AlchemyJsonResponse(
- completed=True,
- message="Account record created successfully",
- result=account_record,
- )
+ account_record = AccountRecords.find_or_create(data_dict, db=db_session).data
+ # return AlchemyJsonResponse(
+ # completed=True,
+ # message="Account record created successfully",
+ # result=account_record,
+ # )
-class AccountUpdateEventMethod(BaseRouteModel):
-
- event_type = "UPDATE"
- event_description = ""
- event_category = ""
-
- __event_keys__ = {
- "ec98ef2c-bcd0-432d-a8f4-1822a56c33b2": "account_records_update",
- }
- __event_validation__ = {
- "ec98ef2c-bcd0-432d-a8f4-1822a56c33b2": (
- UpdateAccountRecord,
- [AccountRecords.__language_model__],
- ),
- }
+class AccountUpdateEventMethods(BaseRouteModel):
@classmethod
- def account_records_update(
- cls,
- build_uu_id: str,
- data: UpdateAccountRecordRequestModel,
- token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
- ):
- if isinstance(token_dict, OccupantTokenObject):
+ def account_records_update(cls, build_uu_id: str, data: Any):
+ if cls.context_retriever.token.is_occupant:
pass
- elif isinstance(token_dict, EmployeeTokenObject):
+ elif cls.context_retriever.token.is_employee:
pass
- AccountRecords.build_parts_id = token_dict.selected_occupant.build_part_id
+ AccountRecords.build_parts_id = cls.context_retriever.token.selected_occupant.build_part_id
account_record = AccountRecords.update_one(build_uu_id, data).data
- return AlchemyJsonResponse(
- completed=True,
- message="Account record updated successfully",
- result=account_record,
- cls_object=AccountRecords,
- response_model=UpdateAccountRecord,
- )
+ # return AlchemyJsonResponse(
+ # completed=True,
+ # message="Account record updated successfully",
+ # result=account_record,
+ # cls_object=AccountRecords,
+ # response_model=UpdateAccountRecord,
+ # )
diff --git a/Events/AllEvents/events/account/info.py b/Events/AllEvents/events/account/info.py
new file mode 100644
index 0000000..c142439
--- /dev/null
+++ b/Events/AllEvents/events/account/info.py
@@ -0,0 +1,14 @@
+from Events.Engine.abstract_class import PageInfo
+
+
+account_page_info = PageInfo(
+ name="Accounts",
+ title={"en": "Account Records", "tr": "Hesap Kayıtları"},
+ description={
+ "en": "Account Records for reaching user all types account information",
+ "tr": "Kullanıcı tüm hesap bilgilerine ulaşmak için Hesap Kayıtları"
+ },
+ icon="",
+ parent="",
+ url="",
+)
diff --git a/Events/AllEvents/events/account/models.py b/Events/AllEvents/events/account/models.py
index 9854e91..a47a359 100644
--- a/Events/AllEvents/events/account/models.py
+++ b/Events/AllEvents/events/account/models.py
@@ -2,53 +2,133 @@
Account records request and response models.
"""
-from typing import TYPE_CHECKING, Dict, Any
-from pydantic import BaseModel, Field, RootModel
-from ApiEvents.base_request_model import BaseRequestModel
+from typing import TYPE_CHECKING, Dict, Any, Optional
+from pydantic import BaseModel
-if TYPE_CHECKING:
- from ApiValidations.Request import (
- InsertAccountRecord,
- UpdateAccountRecord,
- ListOptions,
- )
+from ApiLayers.ApiValidations.Request import PydanticBaseModel
-class AddressUpdateRequest(RootModel[Dict[str, Any]]):
- """Request model for address update."""
+class InsertAccountRecord(PydanticBaseModel):
- model_config = {
- "json_schema_extra": {
- "example": {
- "street": "123 Main St",
- "city": "Example City",
- "country": "Example Country",
- }
- }
- }
+ iban: str
+ bank_date: str
+ currency_value: float
+ bank_balance: float
+ currency: str
+ additional_balance: float
+ channel_branch: str
+ process_name: str
+ process_type: str
+ process_comment: str
+ bank_reference_code: str
+
+ add_comment_note: Optional[str] = None
+ is_receipt_mail_send: Optional[bool] = None
+ found_from: Optional[str] = None
+ similarity: Optional[float] = None
+ remainder_balance: Optional[float] = None
+ bank_date_y: Optional[int] = None
+ bank_date_m: Optional[int] = None
+ bank_date_w: Optional[int] = None
+ bank_date_d: Optional[int] = None
+ approving_accounting_record: Optional[bool] = None
+ accounting_receipt_date: Optional[str] = None
+ accounting_receipt_number: Optional[int] = None
+ approved_record: Optional[bool] = None
+ import_file_name: Optional[str] = None
+ # receive_debit_uu_id: Optional[str] = None
+ budget_type_uu_id: Optional[str] = None
+ company_uu_id: Optional[str] = None
+ send_company_uu_id: Optional[str] = None
+ customer_id: Optional[str] = None
+ customer_uu_id: Optional[str] = None
+ send_person_uu_id: Optional[str] = None
+ approving_accounting_person_uu_id: Optional[str] = None
+ build_parts_uu_id: Optional[str] = None
+ build_decision_book_uu_id: Optional[str] = None
-class AddressUpdateResponse(BaseModel):
- """Response model for address update."""
+class UpdateAccountRecord(PydanticBaseModel):
- address_uu_id: str = Field(..., description="UUID of the updated address")
- data: Dict[str, Any] = Field(..., description="Updated address data")
- function_code: str = Field(..., description="Function code for the endpoint")
+ iban: Optional[str] = None
+ bank_date: Optional[str] = None
+ currency_value: Optional[float] = None
+ bank_balance: Optional[float] = None
+ currency: Optional[str] = None
+ additional_balance: Optional[float] = None
+ channel_branch: Optional[str] = None
+ process_name: Optional[str] = None
+ process_type: Optional[str] = None
+ process_comment: Optional[str] = None
+ bank_reference_code: Optional[str] = None
+
+ add_comment_note: Optional[str] = None
+ is_receipt_mail_send: Optional[bool] = None
+ found_from: Optional[str] = None
+ similarity: Optional[float] = None
+ remainder_balance: Optional[float] = None
+ bank_date_y: Optional[int] = None
+ bank_date_m: Optional[int] = None
+ bank_date_w: Optional[int] = None
+ bank_date_d: Optional[int] = None
+ approving_accounting_record: Optional[bool] = None
+ accounting_receipt_date: Optional[str] = None
+ accounting_receipt_number: Optional[int] = None
+ approved_record: Optional[bool] = None
+ import_file_name: Optional[str] = None
+ receive_debit_uu_id: Optional[str] = None
+ budget_type_uu_id: Optional[str] = None
+ company_uu_id: Optional[str] = None
+ send_company_uu_id: Optional[str] = None
+ customer_id: Optional[str] = None
+ customer_uu_id: Optional[str] = None
+ send_person_uu_id: Optional[str] = None
+ approving_accounting_person_uu_id: Optional[str] = None
+ build_parts_uu_id: Optional[str] = None
+ build_decision_book_uu_id: Optional[str] = None
-class InsertAccountRecordRequestModel(BaseRequestModel["InsertAccountRecord"]):
- """Request model for inserting account records."""
+class ListAccountRecord(PydanticBaseModel):
- pass
+ iban: Optional[str] = None
+ bank_date: Optional[str] = None
+ currency_value: Optional[float] = None
+ bank_balance: Optional[float] = None
+ currency: Optional[str] = None
+ additional_balance: Optional[float] = None
+ channel_branch: Optional[str] = None
+ process_name: Optional[str] = None
+ process_type: Optional[str] = None
+ process_comment: Optional[str] = None
+ bank_reference_code: Optional[str] = None
+
+ add_comment_note: Optional[str] = None
+ is_receipt_mail_send: Optional[bool] = None
+ found_from: Optional[str] = None
+ similarity: Optional[float] = None
+ remainder_balance: Optional[float] = None
+ bank_date_y: Optional[int] = None
+ bank_date_m: Optional[int] = None
+ bank_date_w: Optional[int] = None
+ bank_date_d: Optional[int] = None
+ approving_accounting_record: Optional[bool] = None
+ accounting_receipt_date: Optional[str] = None
+ accounting_receipt_number: Optional[int] = None
+ approved_record: Optional[bool] = None
+ import_file_name: Optional[str] = None
+ receive_debit_uu_id: Optional[str] = None
+ budget_type_uu_id: Optional[str] = None
+ company_uu_id: Optional[str] = None
+ send_company_uu_id: Optional[str] = None
+ customer_id: Optional[str] = None
+ customer_uu_id: Optional[str] = None
+ send_person_uu_id: Optional[str] = None
+ approving_accounting_person_uu_id: Optional[str] = None
+ build_parts_uu_id: Optional[str] = None
+ build_decision_book_uu_id: Optional[str] = None
-class UpdateAccountRecordRequestModel(BaseRequestModel["UpdateAccountRecord"]):
- """Request model for updating account records."""
-
- pass
-
-
-class ListOptionsRequestModel(BaseRequestModel["ListOptions"]):
- """Request model for list options."""
-
- pass
+class AccountRequestValidators:
+ InsertAccountRecord = InsertAccountRecord
+ UpdateAccountRecord = UpdateAccountRecord
+ ListAccountRecord = ListAccountRecord
\ No newline at end of file
diff --git a/Events/AllEvents/template/template/function_handlers.py b/Events/AllEvents/template/template/function_handlers.py
index cee881b..7f783bb 100644
--- a/Events/AllEvents/template/template/function_handlers.py
+++ b/Events/AllEvents/template/template/function_handlers.py
@@ -1,7 +1,8 @@
-from typing import Any, Union
-from fastapi import Request
+from typing import Union, Optional
-from Events.base_request_model import TokenDictType, BaseRouteModel
+from ApiLayers.ApiValidations.Request import ListOptions
+from Events.base_request_model import BaseRouteModel, ListOptionsBase
+from Services.PostgresDb.Models.pagination import PaginationResult
class Handlers:
@@ -14,8 +15,54 @@ class Handlers:
class TemplateFunctions(BaseRouteModel):
- """Class for handling authentication functions"""
+ """
+ Class for handling authentication functions
+ Is a template 4 TokenMiddleware.event_required decorator function groups.
+ results as :
+ STATIC_MESSAGE & LANG retrieved from redis
+ {
+ "completed": true,
+ "message": STATIC_MESSAGE,
+ "lang": LANG,
+ "pagination": {
+ "size": 10,
+ "page": 2,
+ "allCount": 28366,
+ "totalCount": 18,
+ "totalPages": 2,
+ "pageCount": 8,
+ "orderField": ["type_code", "neighborhood_name"],
+ "orderType": ["asc", "desc"]
+ },
+ "data": [
+ {
+ "created_at": "2025-01-12 09:39:48 +00:00",
+ "active": true,
+ "expiry_starts": "2025-01-12 09:39:48 +00:00",
+ "locality_uu_id": "771fd152-aca1-4d75-a42e-9b29ea7112b5",
+ "uu_id": "e1baa3bc-93ce-4099-a078-a11b71d3b1a8"
+ },
+ ...
+ ]
+ }
+ """
@classmethod
- def template_example_function(cls):
- return
+ def template_example_function_list(cls, data: Optional[Union[dict, ListOptions]]) -> PaginationResult:
+ from ApiLayers.Schemas import AddressNeighborhood
+ list_options_base = ListOptionsBase(
+ table=AddressNeighborhood, list_options=data, model_query=None,
+ )
+ db_session, query_options = list_options_base.init_list_options()
+ if cls.context_retriever.token.is_occupant:
+ AddressNeighborhood.pre_query = AddressNeighborhood.filter_all(
+ AddressNeighborhood.neighborhood_code.icontains("10"),
+ db=db_session,
+ ).query
+ elif cls.context_retriever.token.is_employee:
+ AddressNeighborhood.pre_query = AddressNeighborhood.filter_all(
+ AddressNeighborhood.neighborhood_code.icontains("9"),
+ db=db_session,
+ ).query
+ records = AddressNeighborhood.filter_all(*query_options.convert(), db=db_session)
+ return list_options_base.paginated_result(records=records)
diff --git a/Events/AllEvents/validations/validation/api_events.py b/Events/AllEvents/validations/validation/api_events.py
index ef36e0d..08ddeeb 100644
--- a/Events/AllEvents/validations/validation/api_events.py
+++ b/Events/AllEvents/validations/validation/api_events.py
@@ -13,7 +13,7 @@ validation_event = Event(
key="02b5a596-14ba-4361-90d7-c6755727c63f",
request_validator=ValidationsPydantic,
language_models=[],
- response_validation_static=None,
+ statics=None,
description="Get Validations by event function code",
)
diff --git a/Events/Engine/abstract_class.py b/Events/Engine/abstract_class.py
index f0caa6a..40ccb90 100644
--- a/Events/Engine/abstract_class.py
+++ b/Events/Engine/abstract_class.py
@@ -37,7 +37,7 @@ class Event:
REQUEST_VALIDATOR: Optional[Any]
DESCRIPTION: str
LANGUAGE_MODELS: list
- RESPONSE_VALIDATOR_STATIC: str
+ STATICS: str
EXTRA_OPTIONS: Optional[Dict[str, Any]] = None
endpoint_callable: Any
@@ -47,7 +47,7 @@ class Event:
key: str | UUID,
description: str,
language_models: list[Dict[str, Dict]],
- response_validation_static: str = None,
+ statics: str = None,
request_validator: Optional[Any] = None,
response_validator: Optional[Any] = None,
extra_options: Optional[Dict[str, Any]] = None,
@@ -56,14 +56,14 @@ class Event:
self.KEY_ = key
self.REQUEST_VALIDATOR = request_validator
self.RESPONSE_VALIDATOR = response_validator
- self.RESPONSE_VALIDATOR_STATIC = response_validation_static
+ self.STATICS = statics
self.LANGUAGE_MODELS = language_models
self.DESCRIPTION = description
self.EXTRA_OPTIONS = extra_options
@property
def is_static_response(self):
- return bool(self.RESPONSE_VALIDATOR_STATIC)
+ return bool(self.STATICS)
@property
def static_response(self):
@@ -73,7 +73,7 @@ class Event:
if self.is_static_response:
static_response = RedisActions.get_json(
list_keys=[
- f"{RedisValidationKeysAction.static_response_key}:{self.RESPONSE_VALIDATOR_STATIC}"
+ f"{RedisValidationKeysAction.static_response_key}:{self.STATICS}"
]
)
if static_response.status:
diff --git a/Events/base_request_model.py b/Events/base_request_model.py
index dda04d8..46be913 100644
--- a/Events/base_request_model.py
+++ b/Events/base_request_model.py
@@ -14,6 +14,7 @@ from ApiLayers.ApiValidations.Custom.token_objects import (
)
from ApiLayers.ApiValidations.Custom.wrapper_contexts import AuthContext, EventContext
from ApiLayers.AllConfigs.Token.config import Auth
+from Services.PostgresDb.Models.pagination import Pagination, PaginationResult, QueryOptions
TokenDictType = Union[EmployeeTokenObject, OccupantTokenObject]
@@ -90,3 +91,24 @@ class ContextRetrievers:
class BaseRouteModel:
context_retriever: Union[ContextRetrievers] = None
+
+
+class ListOptionsBase:
+
+ def __init__(self, table, list_options, model_query: Optional[BaseModel] = None):
+ self.table = table
+ self.list_options = list_options
+ self.model_query = model_query
+
+ def init_list_options(self) -> tuple:
+ db_session = self.table.new_session()
+ query_options = QueryOptions(table=self.table, data=self.list_options, model_query=self.model_query)
+ return db_session, query_options
+
+ def paginated_result(self, records) -> PaginationResult:
+ pagination = Pagination(data=records)
+ if isinstance(self.list_options, dict):
+ pagination.change(**self.list_options)
+ elif isinstance(self.list_options, BaseModel):
+ pagination.change(**self.list_options.model_dump())
+ return PaginationResult(data=records, pagination=pagination)
diff --git a/Services/PostgresDb/Models/crud_alchemy.py b/Services/PostgresDb/Models/crud_alchemy.py
index bb0976b..f6938d5 100644
--- a/Services/PostgresDb/Models/crud_alchemy.py
+++ b/Services/PostgresDb/Models/crud_alchemy.py
@@ -22,6 +22,7 @@ class MetaDataRow(BaseModel):
class Credentials(BaseModel):
person_id: int
person_name: str
+ full_name: Optional[str] = None
class CrudActions(SystemFields):
diff --git a/Services/PostgresDb/Models/pagination.py b/Services/PostgresDb/Models/pagination.py
index 5dc6013..ab85dc6 100644
--- a/Services/PostgresDb/Models/pagination.py
+++ b/Services/PostgresDb/Models/pagination.py
@@ -118,8 +118,8 @@ class Pagination:
"totalCount": self.total_count,
"totalPages": self.total_pages,
"pageCount": self.page_count,
- "order_field": self.orderField,
- "order_type": self.orderType,
+ "orderField": self.orderField,
+ "orderType": self.orderType,
}
diff --git a/Services/PostgresDb/Models/response.py b/Services/PostgresDb/Models/response.py
index 5846d62..1fe2407 100644
--- a/Services/PostgresDb/Models/response.py
+++ b/Services/PostgresDb/Models/response.py
@@ -8,6 +8,7 @@ adding convenience methods for accessing data and managing query state.
from typing import Any, Dict, Optional, TypeVar, Generic, Union
from sqlalchemy.orm import Query
+
T = TypeVar("T")
@@ -16,7 +17,6 @@ class PostgresResponse(Generic[T]):
Wrapper for PostgreSQL/SQLAlchemy query results.
Attributes:
- query: SQLAlchemy query object
metadata: Additional metadata for the query
Properties:
diff --git a/Services/PostgresDb/how_to.py b/Services/PostgresDb/how_to.py
index 02fa9ba..4ec7a1e 100644
--- a/Services/PostgresDb/how_to.py
+++ b/Services/PostgresDb/how_to.py
@@ -12,11 +12,14 @@ listing = True
creating = False
updating = False
+
new_session = AddressNeighborhood.new_session()
new_session_test = AddressNeighborhood.new_session()
+
BasicMixin.creds = Credentials(person_id=10, person_name="Berkay Super User")
+
class QueryModel(BaseModel):
neighborhood_name: Optional[str]
neighborhood_code: Optional[str]
diff --git a/docker-compose-services.yml b/docker-compose-services.yml
index 41e16cd..ca3e83c 100644
--- a/docker-compose-services.yml
+++ b/docker-compose-services.yml
@@ -19,12 +19,14 @@ services:
dockerfile: DockerApiServices/ValidationServiceApi/Dockerfile
ports:
- "41577:41577"
+ depends_on:
+ - init-service
- # event-service:
- # build:
- # context: .
- # dockerfile: DockerApiServices/EventServiceApi/Dockerfile
- # ports:
- # - "41576:41576"
- # depends_on:
- # - init-service
\ No newline at end of file
+ event-service:
+ build:
+ context: .
+ dockerfile: DockerApiServices/EventServiceApi/Dockerfile
+ ports:
+ - "41576:41576"
+ depends_on:
+ - init-service