from delivery_metadata.api.app import app from delivery_metadata.models import Model class ProductTimedReleaseByStore(Model): """Main response model for GET /product/{product_id}/timed_release/store/{store_id}.""" timed: dict[str, str] | None staggered: dict[str, str] | None class StaggeredTimedRelease(Model): sale_date: str store_id: int class TimedTimedRelease(Model): sale_date_time: str store_id: int class UnsupportedTimedRelease(Model): sale_date_time: str time_offset: str store_id: int class TimedRelease(Model): staggered: list[StaggeredTimedRelease] | None timed: list[TimedTimedRelease] | None unsupported_timed: list[UnsupportedTimedRelease] | None async def get_timed_release(release_id: int) -> TimedRelease: response = await app.state.ows_connector.get( service_name="ows-timed-release", path=f"/timedrelease/{release_id}", ) response.raise_for_status() timed_releases = response.json() return TimedRelease( staggered=[ StaggeredTimedRelease( sale_date=staggered["sale_date"], store_id=staggered["delivery_store"]["id"], ) for staggered in timed_releases["staggered"] ], timed=[ TimedTimedRelease( sale_date_time=timed["sale_date_time"], store_id=timed["delivery_store"]["id"], ) for timed in timed_releases["timed"] ], unsupported_timed=[ UnsupportedTimedRelease( sale_date_time=unsupported["sale_date_time"], time_offset=unsupported["time_offset"], store_id=unsupported["delivery_store"]["id"], ) for unsupported in timed_releases["unsupported_timed"] ], ) async def get_product_timed_release_by_store_id( product_id: int, store_id: int ) -> ProductTimedReleaseByStore | None: """ Get timed release details for a given product and store. This function consumes GET /product/{product_id}/timed_release/store/{store_id} from ows-timed-release service. Args: product_id (int): Product ID to get timed release for. store_id (int): Store ID to get timed release for. Returns: ProductTimedReleaseByStore: Timed release details for the product and store. """ response = await app.state.ows_connector.get( service_name="ows-timed-release", path=f"/product/{product_id}/timed_release/store/{store_id}", ) if response.status_code == 404: return None response.raise_for_status() timed_release_data = response.json() return ProductTimedReleaseByStore(**timed_release_data)