updated postgres and mongo updated
This commit is contained in:
@@ -24,10 +24,12 @@ from Schemas import (
|
||||
Duties,
|
||||
Departments,
|
||||
Event2Employee,
|
||||
Application2Occupant,
|
||||
Event2Occupant,
|
||||
Application2Employee,
|
||||
RelationshipEmployee2Build,
|
||||
)
|
||||
from Modules.Token.password_module import PasswordModule
|
||||
from Schemas.building.build import RelationshipEmployee2Build
|
||||
from Schemas.event.event import Event2Occupant, Application2Employee
|
||||
from Controllers.Redis.database import RedisActions
|
||||
from Controllers.Mongo.database import mongo_handler
|
||||
|
||||
@@ -151,7 +153,11 @@ class LoginHandler:
|
||||
|
||||
@classmethod
|
||||
def do_employee_login(
|
||||
cls, request: Any, data: Any, extra_dict: Optional[Dict[str, Any]] = None
|
||||
cls,
|
||||
request: Any,
|
||||
data: Any,
|
||||
db_session,
|
||||
extra_dict: Optional[Dict[str, Any]] = None,
|
||||
):
|
||||
"""
|
||||
Handle employee login.
|
||||
@@ -161,109 +167,113 @@ class LoginHandler:
|
||||
timezone = extra_dict.get("tz", None) or "GMT+3"
|
||||
|
||||
user_handler = UserHandlers()
|
||||
with Users.new_session() as db_session:
|
||||
found_user = user_handler.check_user_exists(
|
||||
access_key=data.access_key, db_session=db_session
|
||||
)
|
||||
found_user = user_handler.check_user_exists(
|
||||
access_key=data.access_key, db_session=db_session
|
||||
)
|
||||
|
||||
if not user_handler.check_password_valid(
|
||||
domain=domain or "",
|
||||
id_=str(found_user.uu_id),
|
||||
password=data.password,
|
||||
password_hashed=found_user.hash_password,
|
||||
):
|
||||
raise ValueError("EYS_0005")
|
||||
if not user_handler.check_password_valid(
|
||||
domain=domain or "",
|
||||
id_=str(found_user.uu_id),
|
||||
password=data.password,
|
||||
password_hashed=found_user.hash_password,
|
||||
):
|
||||
raise ValueError("EYS_0005")
|
||||
|
||||
list_employee = Employees.filter_all(
|
||||
Employees.people_id == found_user.person_id, db=db_session
|
||||
list_employee = Employees.filter_all(
|
||||
Employees.people_id == found_user.person_id, db=db_session
|
||||
).data
|
||||
|
||||
companies_uu_id_list: list = []
|
||||
companies_id_list: list = []
|
||||
companies_list: list = []
|
||||
duty_uu_id_list: list = []
|
||||
duty_id_list: list = []
|
||||
|
||||
for employee in list_employee:
|
||||
duty_found = None
|
||||
staff = Staff.filter_one(Staff.id == employee.staff_id, db=db_session).data
|
||||
if duties := Duties.filter_one(
|
||||
Duties.id == staff.duties_id, db=db_session
|
||||
).data:
|
||||
if duty_found := Duty.filter_by_one(
|
||||
id=duties.duties_id, db=db_session
|
||||
).data:
|
||||
duty_uu_id_list.append(str(duty_found.uu_id))
|
||||
duty_id_list.append(duty_found.id)
|
||||
duty_found = duty_found.duty_name
|
||||
|
||||
department = Departments.filter_one(
|
||||
Departments.id == duties.department_id, db=db_session
|
||||
).data
|
||||
|
||||
companies_uu_id_list: list = []
|
||||
companies_id_list: list = []
|
||||
companies_list: list = []
|
||||
duty_uu_id_list: list = []
|
||||
duty_id_list: list = []
|
||||
|
||||
for employee in list_employee:
|
||||
staff = Staff.filter_one(
|
||||
Staff.id == employee.staff_id, db=db_session
|
||||
if company := Companies.filter_one(
|
||||
Companies.id == department.company_id, db=db_session
|
||||
).data:
|
||||
companies_uu_id_list.append(str(company.uu_id))
|
||||
companies_id_list.append(company.id)
|
||||
company_address = Addresses.filter_by_one(
|
||||
id=company.official_address_id, db=db_session
|
||||
).data
|
||||
if duties := Duties.filter_one(
|
||||
Duties.id == staff.duties_id, db=db_session
|
||||
).data:
|
||||
if duty_found := Duty.filter_by_one(
|
||||
id=duties.duties_id, db=db_session
|
||||
).data:
|
||||
duty_uu_id_list.append(str(duty_found.uu_id))
|
||||
duty_id_list.append(duty_found.id)
|
||||
companies_list.append(
|
||||
{
|
||||
"uu_id": str(company.uu_id),
|
||||
"public_name": company.public_name,
|
||||
"company_type": company.company_type,
|
||||
"company_address": company_address,
|
||||
"duty": duty_found,
|
||||
}
|
||||
)
|
||||
person = People.filter_one(
|
||||
People.id == found_user.person_id, db=db_session
|
||||
).data
|
||||
model_value = EmployeeTokenObject(
|
||||
user_type=UserType.employee.value,
|
||||
user_uu_id=str(found_user.uu_id),
|
||||
user_id=found_user.id,
|
||||
person_id=found_user.person_id,
|
||||
person_uu_id=str(person.uu_id),
|
||||
request=dict(request.headers),
|
||||
companies_uu_id_list=companies_uu_id_list,
|
||||
companies_id_list=companies_id_list,
|
||||
duty_uu_id_list=duty_uu_id_list,
|
||||
duty_id_list=duty_id_list,
|
||||
).model_dump()
|
||||
|
||||
department = Departments.filter_one(
|
||||
Departments.id == duties.department_id, db=db_session
|
||||
).data
|
||||
|
||||
if company := Companies.filter_one(
|
||||
Companies.id == department.company_id, db=db_session
|
||||
).data:
|
||||
companies_uu_id_list.append(str(company.uu_id))
|
||||
companies_id_list.append(company.id)
|
||||
company_address = Addresses.filter_by_one(
|
||||
id=company.official_address_id, db=db_session
|
||||
).data
|
||||
companies_list.append(
|
||||
{
|
||||
"uu_id": str(company.uu_id),
|
||||
"public_name": company.public_name,
|
||||
"company_type": company.company_type,
|
||||
"company_address": company_address,
|
||||
}
|
||||
)
|
||||
person = People.filter_one(
|
||||
People.id == found_user.person_id, db=db_session
|
||||
).data
|
||||
model_value = EmployeeTokenObject(
|
||||
user_type=UserType.employee.value,
|
||||
user_uu_id=str(found_user.uu_id),
|
||||
user_id=found_user.id,
|
||||
person_id=found_user.person_id,
|
||||
person_uu_id=str(person.uu_id),
|
||||
request=dict(request.headers),
|
||||
companies_uu_id_list=companies_uu_id_list,
|
||||
companies_id_list=companies_id_list,
|
||||
duty_uu_id_list=duty_uu_id_list,
|
||||
duty_id_list=duty_id_list,
|
||||
).model_dump()
|
||||
|
||||
set_to_redis_dict = dict(
|
||||
user=found_user,
|
||||
token=model_value,
|
||||
header_info=dict(language=language, domain=domain, timezone=timezone),
|
||||
)
|
||||
redis_handler = RedisHandlers()
|
||||
if access_token := redis_handler.set_object_to_redis(**set_to_redis_dict):
|
||||
return {
|
||||
"access_token": access_token,
|
||||
"user_type": UserType.employee.name,
|
||||
"user": found_user.get_dict(
|
||||
exclude_list=[
|
||||
Users.hash_password,
|
||||
Users.cryp_uu_id,
|
||||
Users.password_token,
|
||||
Users.created_credentials_token,
|
||||
Users.updated_credentials_token,
|
||||
Users.confirmed_credentials_token,
|
||||
Users.is_confirmed,
|
||||
Users.is_notification_send,
|
||||
Users.is_email_send,
|
||||
Users.remember_me,
|
||||
]
|
||||
),
|
||||
"selection_list": companies_list,
|
||||
}
|
||||
set_to_redis_dict = dict(
|
||||
user=found_user,
|
||||
token=model_value,
|
||||
header_info=dict(language=language, domain=domain, timezone=timezone),
|
||||
)
|
||||
redis_handler = RedisHandlers()
|
||||
if access_token := redis_handler.set_object_to_redis(**set_to_redis_dict):
|
||||
return {
|
||||
"access_token": access_token,
|
||||
"user_type": UserType.employee.name,
|
||||
"user": found_user.get_dict(
|
||||
exclude_list=[
|
||||
Users.hash_password,
|
||||
Users.cryp_uu_id,
|
||||
Users.password_token,
|
||||
Users.created_credentials_token,
|
||||
Users.updated_credentials_token,
|
||||
Users.confirmed_credentials_token,
|
||||
Users.is_confirmed,
|
||||
Users.is_notification_send,
|
||||
Users.is_email_send,
|
||||
Users.remember_me,
|
||||
]
|
||||
),
|
||||
"selection_list": companies_list,
|
||||
}
|
||||
raise ValueError("Something went wrong")
|
||||
|
||||
@classmethod
|
||||
def do_employee_occupant(
|
||||
cls, request: Any, data: Any, extra_dict: Optional[Dict[str, Any]] = None
|
||||
def do_occupant_login(
|
||||
cls,
|
||||
request: Any,
|
||||
data: Any,
|
||||
db_session,
|
||||
extra_dict: Optional[Dict[str, Any]] = None,
|
||||
):
|
||||
"""
|
||||
Handle occupant login.
|
||||
@@ -273,63 +283,58 @@ class LoginHandler:
|
||||
timezone = extra_dict.get("tz", None) or "GMT+3"
|
||||
|
||||
user_handler = UserHandlers()
|
||||
with Users.new_session() as db_session:
|
||||
found_user = user_handler.check_user_exists(
|
||||
access_key=data.access_key, db_session=db_session
|
||||
)
|
||||
if not user_handler.check_password_valid(
|
||||
domain=data.domain,
|
||||
id_=str(found_user.uu_id),
|
||||
password=data.password,
|
||||
password_hashed=found_user.hash_password,
|
||||
):
|
||||
raise ValueError("EYS_0005")
|
||||
found_user = user_handler.check_user_exists(
|
||||
access_key=data.access_key, db_session=db_session
|
||||
)
|
||||
if not user_handler.check_password_valid(
|
||||
domain=domain,
|
||||
id_=str(found_user.uu_id),
|
||||
password=data.password,
|
||||
password_hashed=found_user.hash_password,
|
||||
):
|
||||
raise ValueError("EYS_0005")
|
||||
|
||||
occupants_selection_dict: Dict[str, Any] = {}
|
||||
living_spaces: list[BuildLivingSpace] = BuildLivingSpace.filter_all(
|
||||
BuildLivingSpace.person_id == found_user.person_id, db=db_session
|
||||
occupants_selection_dict: Dict[str, Any] = {}
|
||||
living_spaces: list[BuildLivingSpace] = BuildLivingSpace.filter_all(
|
||||
BuildLivingSpace.person_id == found_user.person_id, db=db_session
|
||||
).data
|
||||
|
||||
if not living_spaces:
|
||||
raise ValueError("EYS_0006")
|
||||
for living_space in living_spaces:
|
||||
build_part = BuildParts.filter_one(
|
||||
BuildParts.id == living_space.build_parts_id,
|
||||
db=db_session,
|
||||
).data
|
||||
if not build_part:
|
||||
raise ValueError("EYS_0007")
|
||||
|
||||
if not living_spaces:
|
||||
raise ValueError("EYS_0006")
|
||||
for living_space in living_spaces:
|
||||
build_parts_selection = BuildParts.filter_all(
|
||||
BuildParts.id == living_space.build_parts_id,
|
||||
db=db_session,
|
||||
).data
|
||||
if not build_parts_selection:
|
||||
raise ValueError("EYS_0007")
|
||||
build = build_part.buildings
|
||||
occupant_type = OccupantTypes.filter_by_one(
|
||||
id=living_space.occupant_type_id,
|
||||
db=db_session,
|
||||
system=True,
|
||||
).data
|
||||
occupant_data = {
|
||||
"build_living_space_uu_id": str(living_space.uu_id),
|
||||
"part_uu_id": str(build_part.uu_id),
|
||||
"part_name": build_part.part_name(db=db_session),
|
||||
"part_level": build_part.part_level,
|
||||
"occupant_uu_id": str(occupant_type.uu_id),
|
||||
"description": occupant_type.occupant_description,
|
||||
"code": occupant_type.occupant_code,
|
||||
}
|
||||
|
||||
build_part = build_parts_selection[0]
|
||||
|
||||
build = build_part.buildings
|
||||
occupant_type = OccupantTypes.filter_by_one(
|
||||
id=living_space.occupant_type,
|
||||
db=db_session,
|
||||
system=True,
|
||||
).data
|
||||
|
||||
occupant_data = {
|
||||
"part_uu_id": str(build_part.uu_id),
|
||||
"part_name": build_part.part_name,
|
||||
"part_level": build_part.part_level,
|
||||
"uu_id": str(occupant_type.uu_id),
|
||||
"description": occupant_type.occupant_description,
|
||||
"code": occupant_type.occupant_code,
|
||||
build_key = str(build.uu_id)
|
||||
if build_key not in occupants_selection_dict:
|
||||
occupants_selection_dict[build_key] = {
|
||||
"build_uu_id": build_key,
|
||||
"build_name": build.build_name,
|
||||
"build_no": build.build_no,
|
||||
"occupants": [occupant_data],
|
||||
}
|
||||
|
||||
build_key = str(build.uu_id)
|
||||
if build_key not in occupants_selection_dict:
|
||||
occupants_selection_dict[build_key] = {
|
||||
"build_uu_id": build_key,
|
||||
"build_name": build.build_name,
|
||||
"build_no": build.build_no,
|
||||
"occupants": [occupant_data],
|
||||
}
|
||||
else:
|
||||
occupants_selection_dict[build_key]["occupants"].append(
|
||||
occupant_data
|
||||
)
|
||||
else:
|
||||
occupants_selection_dict[build_key]["occupants"].append(occupant_data)
|
||||
|
||||
person = found_user.person
|
||||
model_value = OccupantTokenObject(
|
||||
@@ -363,7 +368,6 @@ class LoginHandler:
|
||||
request: FastAPI request object
|
||||
data: Request body containing login credentials
|
||||
{
|
||||
"domain": "evyos.com.tr",
|
||||
"access_key": "karatay.berkay.sup@evyos.com.tr",
|
||||
"password": "string",
|
||||
"remember_me": false
|
||||
@@ -374,29 +378,31 @@ class LoginHandler:
|
||||
language = request.headers.get("language", "tr")
|
||||
domain = request.headers.get("domain", None)
|
||||
timezone = request.headers.get("tz", None) or "GMT+3"
|
||||
|
||||
if cls.is_employee(data.access_key):
|
||||
return cls.do_employee_login(
|
||||
request=request,
|
||||
data=data,
|
||||
extra_dict=dict(
|
||||
language=language,
|
||||
domain=domain,
|
||||
timezone=timezone,
|
||||
),
|
||||
)
|
||||
elif cls.is_occupant(data.access_key):
|
||||
return cls.do_employee_login(
|
||||
request=request,
|
||||
data=data,
|
||||
extra_dict=dict(
|
||||
language=language,
|
||||
domain=domain,
|
||||
timezone=timezone,
|
||||
),
|
||||
)
|
||||
else:
|
||||
raise ValueError("Invalid email format")
|
||||
with Users.new_session() as db_session:
|
||||
if cls.is_employee(data.access_key):
|
||||
return cls.do_employee_login(
|
||||
request=request,
|
||||
data=data,
|
||||
extra_dict=dict(
|
||||
language=language,
|
||||
domain=domain,
|
||||
timezone=timezone,
|
||||
),
|
||||
db_session=db_session,
|
||||
)
|
||||
elif cls.is_occupant(data.access_key):
|
||||
return cls.do_occupant_login(
|
||||
request=request,
|
||||
data=data,
|
||||
extra_dict=dict(
|
||||
language=language,
|
||||
domain=domain,
|
||||
timezone=timezone,
|
||||
),
|
||||
db_session=db_session,
|
||||
)
|
||||
else:
|
||||
raise ValueError("Invalid email format")
|
||||
|
||||
@classmethod
|
||||
def raise_error_if_request_has_no_token(cls, request: Any) -> None:
|
||||
@@ -525,23 +531,23 @@ class LoginHandler:
|
||||
BuildParts.id == selected_build_living_space.build_parts_id,
|
||||
db=db,
|
||||
).data
|
||||
build = BuildParts.filter_one(
|
||||
BuildParts.id == build_part.build_id,
|
||||
db=db,
|
||||
).data
|
||||
responsible_employee = Employees.filter_one(
|
||||
Employees.id == build_part.responsible_employee_id,
|
||||
db=db,
|
||||
).data
|
||||
related_company = RelationshipEmployee2Build.filter_one(
|
||||
RelationshipEmployee2Build.member_id == build.id,
|
||||
db=db,
|
||||
).data
|
||||
build = build_part.buildings
|
||||
reachable_app_codes = Application2Occupant.get_application_codes(
|
||||
build_living_space_id=selected_build_living_space.id, db=db
|
||||
)
|
||||
# responsible_employee = Employees.filter_one(
|
||||
# Employees.id == build_part.responsible_employee_id,
|
||||
# db=db,
|
||||
# ).data
|
||||
# related_company = RelationshipEmployee2Build.filter_one(
|
||||
# RelationshipEmployee2Build.member_id == build.id,
|
||||
# db=db,
|
||||
# ).data
|
||||
# Get company
|
||||
company_related = Companies.filter_one(
|
||||
Companies.id == related_company.company_id,
|
||||
db=db,
|
||||
).data
|
||||
# company_related = Companies.filter_one(
|
||||
# Companies.id == related_company.company_id,
|
||||
# db=db,
|
||||
# ).data
|
||||
|
||||
# Create occupant token
|
||||
occupant_token = OccupantToken(
|
||||
@@ -554,18 +560,19 @@ class LoginHandler:
|
||||
build_uuid=build.uu_id.__str__(),
|
||||
build_part_id=build_part.id,
|
||||
build_part_uuid=build_part.uu_id.__str__(),
|
||||
responsible_employee_id=responsible_employee.id,
|
||||
responsible_employee_uuid=responsible_employee.uu_id.__str__(),
|
||||
responsible_company_id=company_related.id,
|
||||
responsible_company_uuid=company_related.uu_id.__str__(),
|
||||
# responsible_employee_id=responsible_employee.id,
|
||||
# responsible_employee_uuid=responsible_employee.uu_id.__str__(),
|
||||
# responsible_company_id=company_related.id,
|
||||
# responsible_company_uuid=company_related.uu_id.__str__(),
|
||||
reachable_event_codes=reachable_event_codes,
|
||||
reachable_app_codes=reachable_app_codes,
|
||||
)
|
||||
redis_handler = RedisHandlers()
|
||||
redis_handler.update_token_at_redis(
|
||||
token=access_token, add_payload=occupant_token
|
||||
)
|
||||
return {
|
||||
"selected_uu_id": data.company_uu_id,
|
||||
"selected_uu_id": occupant_token.living_space_uu_id,
|
||||
}
|
||||
|
||||
@classmethod # Requires auth context
|
||||
@@ -715,15 +722,23 @@ class PageHandlers:
|
||||
"""
|
||||
if result := RedisHandlers.get_object_from_redis(access_token=access_token):
|
||||
if result.is_employee:
|
||||
if application := result.selected_company.reachable_app_codes.get(
|
||||
page_url, None
|
||||
if (
|
||||
result.selected_company
|
||||
and result.selected_company.reachable_app_codes
|
||||
):
|
||||
return application
|
||||
if application := result.selected_company.reachable_app_codes.get(
|
||||
page_url, None
|
||||
):
|
||||
return application
|
||||
elif result.is_occupant:
|
||||
if application := result.selected_company.reachable_app_codes.get(
|
||||
page_url, None
|
||||
if (
|
||||
result.selected_occupant
|
||||
and result.selected_occupant.reachable_app_codes
|
||||
):
|
||||
return application
|
||||
if application := result.selected_occupant.reachable_app_codes.get(
|
||||
page_url, None
|
||||
):
|
||||
return application
|
||||
raise ValueError("EYS_0013")
|
||||
|
||||
@classmethod
|
||||
@@ -737,9 +752,17 @@ class PageHandlers:
|
||||
"""
|
||||
if result := RedisHandlers.get_object_from_redis(access_token=access_token):
|
||||
if result.is_employee:
|
||||
return result.selected_company.reachable_app_codes.keys()
|
||||
if (
|
||||
result.selected_company
|
||||
and result.selected_company.reachable_app_codes
|
||||
):
|
||||
return result.selected_company.reachable_app_codes.keys()
|
||||
elif result.is_occupant:
|
||||
return result.selected_company.reachable_app_codes.keys()
|
||||
if (
|
||||
result.selected_occupant
|
||||
and result.selected_occupant.reachable_app_codes
|
||||
):
|
||||
return result.selected_occupant.reachable_app_codes.keys()
|
||||
raise ValueError("EYS_0013")
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user