"""Generate delivery metadata endpoints.""" from fastapi import APIRouter, Depends, Query, Response from delivery_metadata.constants import ( DeliveryType, MetadataFormat, MetadataFormatVersion, ) from delivery_metadata.exceptions import ( InvalidDeliveryFormatVersion, ) from delivery_metadata.logic import delivery_metadata as delivery_metadata_logic router = APIRouter(tags=["delivery_metadata"]) def get_delivery_format_version( format_: MetadataFormat = Query(..., alias="format"), version: str = Query(...), ) -> MetadataFormatVersion: delivery_format_versions = MetadataFormatVersion.get_supported_versions(format_) if version in delivery_format_versions: return MetadataFormatVersion(format_, version) raise InvalidDeliveryFormatVersion( f"The available versions of format: '{format_.value}' are: {delivery_format_versions}", ) @router.get( "/products/{upc}/stores/{store_id}/delivery_metadata", operation_id="get_delivery_metadata", ) async def delivery_metadata( upc: int, store_id: int, delivery_type: DeliveryType, delivery_format_version: MetadataFormatVersion = Depends( get_delivery_format_version ), ) -> Response: """Generate delivery metadata.""" return await delivery_metadata_logic.generate( upc=upc, store_id=store_id, delivery_type=delivery_type, delivery_format_version=delivery_format_version, )