eventcally/project/services/verification.py
2023-09-30 12:04:35 +02:00

71 lines
2.4 KiB
Python

from sqlalchemy import and_
from sqlalchemy.orm import load_only
from project.models import (
AdminUnitVerificationRequest,
AdminUnitVerificationRequestReviewStatus,
)
from project.models.admin_unit import AdminUnit
from project.services.search_params import AdminUnitVerificationRequestSearchParams
def admin_unit_can_verify_admin_unit(
source_admin_unit: AdminUnit, target_admin_unit: AdminUnit
):
return (
target_admin_unit.id != source_admin_unit.id
and target_admin_unit.can_verify_other
and target_admin_unit.incoming_verification_requests_allowed
and (
len(target_admin_unit.incoming_verification_requests_postal_codes) == 0
or source_admin_unit.location.postalCode
in target_admin_unit.incoming_verification_requests_postal_codes
)
)
def get_verification_requests_incoming_query(
params: AdminUnitVerificationRequestSearchParams,
):
result = AdminUnitVerificationRequest.query
if params.target_admin_unit_id:
result = result.filter(
AdminUnitVerificationRequest.target_admin_unit_id
== params.target_admin_unit_id
)
result = params.get_trackable_query(result, AdminUnitVerificationRequest)
result = params.get_trackable_order_by(result, AdminUnitVerificationRequest)
result = result.order_by(AdminUnitVerificationRequest.created_at.desc())
return result
def get_verification_requests_outgoing_query(
params: AdminUnitVerificationRequestSearchParams,
):
result = AdminUnitVerificationRequest.query
if params.source_admin_unit_id:
result = result.filter(
AdminUnitVerificationRequest.source_admin_unit_id
== params.source_admin_unit_id
)
result = params.get_trackable_query(result, AdminUnitVerificationRequest)
result = params.get_trackable_order_by(result, AdminUnitVerificationRequest)
result = result.order_by(AdminUnitVerificationRequest.created_at.desc())
return result
def get_verification_requests_incoming_badge_query(admin_unit):
return AdminUnitVerificationRequest.query.options(
load_only(AdminUnitVerificationRequest.id)
).filter(
and_(
AdminUnitVerificationRequest.review_status
== AdminUnitVerificationRequestReviewStatus.inbox,
AdminUnitVerificationRequest.target_admin_unit_id == admin_unit.id,
)
)