22from uuid import uuid4
33
44from fastapi import FastAPI , Request
5+ from returns .maybe import Maybe
6+ from returns .result import Failure , Result , Success
57
68from stapi_fastapi .backends .product_backend import ProductBackend
79from stapi_fastapi .backends .root_backend import RootBackend
8- from stapi_fastapi .exceptions import NotFoundException
910from stapi_fastapi .models .conformance import CORE
1011from stapi_fastapi .models .opportunity import (
1112 Opportunity ,
@@ -37,20 +38,20 @@ class MockRootBackend(RootBackend):
3738 def __init__ (self , orders : MockOrderDB ) -> None :
3839 self ._orders : MockOrderDB = orders
3940
40- async def get_orders (self , request : Request ) -> OrderCollection :
41+ async def get_orders (self , request : Request ) -> Result [ OrderCollection , Exception ] :
4142 """
4243 Show all orders.
4344 """
44- return OrderCollection (features = list (self ._orders .values ()))
45+ return Success ( OrderCollection (features = list (self ._orders .values () )))
4546
46- async def get_order (self , order_id : str , request : Request ) -> Order :
47+ async def get_order (
48+ self , order_id : str , request : Request
49+ ) -> Result [Maybe [Order ], Exception ]:
4750 """
4851 Show details for order with `order_id`.
4952 """
50- try :
51- return self ._orders [order_id ]
52- except KeyError :
53- raise NotFoundException ()
53+
54+ return Success (Maybe .from_optional (self ._orders .get (order_id )))
5455
5556
5657class MockProductBackend (ProductBackend ):
@@ -64,41 +65,49 @@ async def search_opportunities(
6465 product_router : ProductRouter ,
6566 search : OpportunityRequest ,
6667 request : Request ,
67- ) -> list [Opportunity ]:
68- return [o .model_copy (update = search .model_dump ()) for o in self ._opportunities ]
68+ ) -> Result [list [Opportunity ], Exception ]:
69+ try :
70+ return Success (
71+ [o .model_copy (update = search .model_dump ()) for o in self ._opportunities ]
72+ )
73+ except Exception as e :
74+ return Failure (e )
6975
7076 async def create_order (
7177 self , product_router : ProductRouter , payload : OrderRequest , request : Request
72- ) -> Order :
78+ ) -> Result [ Order , Exception ] :
7379 """
7480 Create a new order.
7581 """
76- order = Order (
77- id = str (uuid4 ()),
78- geometry = payload .geometry ,
79- properties = {
80- "product_id" : product_router .product .id ,
81- "created" : datetime .now (timezone .utc ),
82- "status" : OrderStatus (
83- timestamp = datetime .now (timezone .utc ),
84- status_code = OrderStatusCode .accepted ,
85- ),
86- "search_parameters" : {
87- "geometry" : payload .geometry ,
88- "datetime" : payload .datetime ,
89- "filter" : payload .filter ,
90- },
91- "order_parameters" : payload .order_parameters .model_dump (),
92- "opportunity_properties" : {
93- "datetime" : "2024-01-29T12:00:00Z/2024-01-30T12:00:00Z" ,
94- "off_nadir" : 10 ,
82+ try :
83+ order = Order (
84+ id = str (uuid4 ()),
85+ geometry = payload .geometry ,
86+ properties = {
87+ "product_id" : product_router .product .id ,
88+ "created" : datetime .now (timezone .utc ),
89+ "status" : OrderStatus (
90+ timestamp = datetime .now (timezone .utc ),
91+ status_code = OrderStatusCode .accepted ,
92+ ),
93+ "search_parameters" : {
94+ "geometry" : payload .geometry ,
95+ "datetime" : payload .datetime ,
96+ "filter" : payload .filter ,
97+ },
98+ "order_parameters" : payload .order_parameters .model_dump (),
99+ "opportunity_properties" : {
100+ "datetime" : "2024-01-29T12:00:00Z/2024-01-30T12:00:00Z" ,
101+ "off_nadir" : 10 ,
102+ },
95103 },
96- },
97- links = [],
98- )
104+ links = [],
105+ )
99106
100- self ._orders [order .id ] = order
101- return order
107+ self ._orders [order .id ] = order
108+ return Success (order )
109+ except Exception as e :
110+ return Failure (e )
102111
103112
104113class MyOpportunityProperties (OpportunityProperties ):
0 commit comments