53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
import graphene
|
|
from graphene import List
|
|
|
|
from backend.core.repositories import AccountRepository
|
|
from backend.graphql_api.types import AccountType
|
|
from backend.graphql_api.inputs import AccountFilterInput
|
|
|
|
|
|
class AccountQueries(graphene.ObjectType):
|
|
"""Account query operations"""
|
|
|
|
account = graphene.Field(
|
|
AccountType,
|
|
id=graphene.ID(required=True)
|
|
)
|
|
|
|
accounts = graphene.Field(
|
|
List(AccountType),
|
|
filter=AccountFilterInput()
|
|
)
|
|
|
|
def resolve_account(self, info, id):
|
|
return AccountRepository.get_by_id(id)
|
|
|
|
def resolve_accounts(self, info, filter=None):
|
|
if not filter:
|
|
return AccountRepository.get_all()
|
|
|
|
# Apply filters based on input
|
|
if filter.customer_id:
|
|
return AccountRepository.get_by_customer(filter.customer_id)
|
|
|
|
if filter.name:
|
|
return AccountRepository.search(filter.name)
|
|
|
|
if filter.is_active is not None:
|
|
return AccountRepository.get_active() if filter.is_active else AccountRepository.get_inactive()
|
|
|
|
if filter.has_services is not None:
|
|
return AccountRepository.get_with_services() if filter.has_services else AccountRepository.get_without_services()
|
|
|
|
if filter.has_projects is not None:
|
|
return AccountRepository.get_with_projects() if filter.has_projects else AccountRepository.get_without_projects()
|
|
|
|
return AccountRepository.filter_accounts(
|
|
city=filter.city,
|
|
state=filter.state,
|
|
zip_code=filter.zip_code,
|
|
start_date_after=filter.start_date_after,
|
|
start_date_before=filter.start_date_before,
|
|
contact_email=filter.contact_email
|
|
)
|