"""Product schemas.""" from pydantic import BaseModel, ConfigDict, Field from contributor.api.schemas.contributors import ContributorKey from contributor.api.schemas.display_artists import DisplayArtist from contributor.api.schemas.schema_examples import with_example class ProductKey(BaseModel): model_config = ConfigDict(title="Key identifying a product.") product_id: int = Field(description="The product's internal ID.") class ProductDataloaderRequest(BaseModel): model_config = ConfigDict( title="Request body for loading multiple products by key.", json_schema_extra=with_example("product_dataloader_request"), ) products: list[ProductKey] = Field(description="List of product keys to load.") class ProductParticipation(BaseModel): model_config = ConfigDict(title="A product participation for a contributor.") contributor: ContributorKey = Field( description="The contributor associated with this participation." ) participated_as: str = Field( description="The role the contributor played on the product." ) product: ProductKey = Field(description="The product's internal ID.") release_artist_id: int = Field(description="The release artist's internal ID.") class ProductContributor(BaseModel): model_config = ConfigDict(title="A contributor credited on a product.") contributor: ContributorKey = Field( description="The contributor credited on the product.", ) participated_as: str = Field( description="The role the contributor played on the product." ) product: ProductKey = Field(description="The product's internal ID.") release_artist_id: int = Field(description="The release artist's internal ID.") class ProductParticipationsResponse(BaseModel): model_config = ConfigDict( title="Product participations for a contributor.", json_schema_extra=with_example("product_participations_response"), ) contributor: ContributorKey = Field(description="UUID of the contributor.") participations: list[ProductParticipation] = Field( default=[], description="List of product participations." ) class ProductContributors(BaseModel): model_config = ConfigDict( title="Contributors credited on a product.", json_schema_extra=with_example("product_contributors"), ) product: ProductKey = Field(description="The product's internal ID.") contributors: list[ProductContributor] = Field( default=[], description="List of contributors credited on the product." ) display_artists: list[DisplayArtist] = Field( default=[], description="List of display artists." )