import strawberry from graphql import GraphQLError from strawberry.types import Info from database import models from graphql_schema.entities.helpers.filters import get_filters from graphql_schema.entities.resolvers.base import BaseMutationResolver from graphql_schema.entities.resolvers.copilot import CopilotQueryResolver from graphql_schema.entities.types.mutation_input import CreateCopilotInput, EditCopilotInput from graphql_schema.entities.types.types import Copilot from graphql_schema.extensions.field.auth import AllowPublicAccess, AuthenticatedOnly @strawberry.type class CopilotQueries: @strawberry.field(extensions=[AuthenticatedOnly()]) async def copilots(root, info: Info) -> list[Copilot]: return await CopilotQueryResolver().get_list(info.context.user_id) @strawberry.field(extensions=[AllowPublicAccess()]) async def copilot( root, info: Info, id: int | None = None, url_slug: str | None = None, pilot_username: str | None = None, upload_token: str | None = None, upload_flight_slug: str | None = None, public: bool | None = False ) -> Copilot: filter_params = get_filters( object_id=id, url_slug=url_slug, pilot_username=pilot_username, upload_token=upload_token, upload_flight_slug=upload_flight_slug, ) if not filter_params: raise GraphQLError(f"Invalid identification supplied: {filter_params}") return await CopilotQueryResolver().get_one( user_id=info.context.user_id, only_public=public, **filter_params ) @strawberry.type class CopilotMutation: @strawberry.mutation(extensions=[AuthenticatedOnly()]) async def create_copilot(root, info: Info, input: CreateCopilotInput) -> Copilot: return await BaseMutationResolver(Copilot, models.Copilot).create(info.context, data=input) @strawberry.mutation(extensions=[AuthenticatedOnly()]) async def edit_copilot(root, info: Info, id: int, input: EditCopilotInput) -> Copilot: return await BaseMutationResolver(Copilot, models.Copilot).update(info.context, id, input, info.context.user_id)