|
1 | 1 | from __future__ import annotations |
2 | 2 |
|
3 | | -from typing import Protocol |
| 3 | +from typing import Any, Callable, Coroutine |
4 | 4 |
|
5 | 5 | from fastapi import Request |
6 | 6 | from returns.maybe import Maybe |
|
10 | 10 | from stapi_fastapi.models.order import Order, OrderPayload |
11 | 11 | from stapi_fastapi.routers.product_router import ProductRouter |
12 | 12 |
|
13 | | - |
14 | | -class ProductBackend(Protocol): # pragma: nocover |
15 | | - async def search_opportunities( |
16 | | - self, |
17 | | - product_router: ProductRouter, |
18 | | - search: OpportunityRequest, |
19 | | - request: Request, |
20 | | - next: str | None, |
21 | | - limit: int, |
22 | | - ) -> ResultE[tuple[list[Opportunity], Maybe[str]]]: |
23 | | - """ |
24 | | - Search for ordering opportunities for the given search parameters and return pagination token if applicable. |
25 | | -
|
26 | | - Backends must validate search constraints and return |
27 | | - `stapi_fastapi.exceptions.ConstraintsException` if not valid. |
28 | | - """ |
29 | | - |
30 | | - async def create_order( |
31 | | - self, |
32 | | - product_router: ProductRouter, |
33 | | - search: OrderPayload, |
34 | | - request: Request, |
35 | | - ) -> ResultE[Order]: |
36 | | - """ |
37 | | - Create a new order. |
38 | | -
|
39 | | - Backends must validate order payload and return |
40 | | - `stapi_fastapi.exceptions.ConstraintsException` if not valid. |
41 | | - """ |
| 13 | +SearchOpportunities = Callable[ |
| 14 | + [ProductRouter, OpportunityRequest, Request, str | None, int], |
| 15 | + Coroutine[Any, Any, ResultE[tuple[list[Opportunity], Maybe[str]]]], |
| 16 | +] |
| 17 | +""" |
| 18 | +Type alias for an async function that searches for ordering opportunities for the given |
| 19 | +search parameters. |
| 20 | +
|
| 21 | +Args: |
| 22 | + product_router (ProductRouter): The product router. |
| 23 | + search (OpportunityRequest): The search parameters. |
| 24 | + request (Request): FastAPI's Request object. |
| 25 | + next (str | None): A pagination token. |
| 26 | + limit (int): The maximum number of opportunities to return in a page. |
| 27 | +
|
| 28 | +Returns: |
| 29 | + A tuple containing a list of opportunities and a pagination token. |
| 30 | +
|
| 31 | + - Should return returns.result.Success[tuple[list[Opportunity], returns.maybe.Some[str]]] if including a pagination token |
| 32 | + - Should return returns.result.Success[tuple[list[Opportunity], returns.maybe.Nothing]] if not including a pagination token |
| 33 | + - Returning returns.result.Failure[Exception] will result in a 500. |
| 34 | +
|
| 35 | +Note: |
| 36 | + Backends must validate search constraints and return |
| 37 | + returns.result.Failure[stapi_fastapi.exceptions.ConstraintsException] if not valid. |
| 38 | +""" |
| 39 | + |
| 40 | +CreateOrder = Callable[ |
| 41 | + [ProductRouter, OrderPayload, Request], Coroutine[Any, Any, ResultE[Order]] |
| 42 | +] |
| 43 | +""" |
| 44 | +Type alias for an async function that creates a new order. |
| 45 | +
|
| 46 | +Args: |
| 47 | + product_router (ProductRouter): The product router. |
| 48 | + payload (OrderPayload): The order payload. |
| 49 | + request (Request): FastAPI's Request object. |
| 50 | +
|
| 51 | +Returns: |
| 52 | + - Should return returns.result.Success[Order] |
| 53 | + - Returning returns.result.Failure[Exception] will result in a 500. |
| 54 | +
|
| 55 | +Note: |
| 56 | + Backends must validate order payload and return |
| 57 | + returns.result.Failure[stapi_fastapi.exceptions.ConstraintsException] if not valid. |
| 58 | +""" |
0 commit comments