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 )