Files
api/src/graphql_schema/entities/copilot.py
T

52 lines
2.1 KiB
Python

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)