22from uuid import uuid4
33
44from fastapi import FastAPI , Request
5+ from returns .maybe import Maybe
6+ from returns .result import Failure , ResultE , 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,18 @@ 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 ) -> ResultE [ OrderCollection ] :
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 (self , order_id : str , request : Request ) -> ResultE [ Maybe [ Order ]] :
4748 """
4849 Show details for order with `order_id`.
4950 """
50- try :
51- return self ._orders [order_id ]
52- except KeyError :
53- raise NotFoundException ()
51+
52+ return Success (Maybe .from_optional (self ._orders .get (order_id )))
5453
5554
5655class MockProductBackend (ProductBackend ):
@@ -64,41 +63,49 @@ async def search_opportunities(
6463 product_router : ProductRouter ,
6564 search : OpportunityRequest ,
6665 request : Request ,
67- ) -> list [Opportunity ]:
68- return [o .model_copy (update = search .model_dump ()) for o in self ._opportunities ]
66+ ) -> ResultE [list [Opportunity ]]:
67+ try :
68+ return Success (
69+ [o .model_copy (update = search .model_dump ()) for o in self ._opportunities ]
70+ )
71+ except Exception as e :
72+ return Failure (e )
6973
7074 async def create_order (
7175 self , product_router : ProductRouter , payload : OrderRequest , request : Request
72- ) -> Order :
76+ ) -> ResultE [ Order ] :
7377 """
7478 Create a new order.
7579 """
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 ,
80+ try :
81+ order = Order (
82+ id = str (uuid4 ()),
83+ geometry = payload .geometry ,
84+ properties = {
85+ "product_id" : product_router .product .id ,
86+ "created" : datetime .now (timezone .utc ),
87+ "status" : OrderStatus (
88+ timestamp = datetime .now (timezone .utc ),
89+ status_code = OrderStatusCode .accepted ,
90+ ),
91+ "search_parameters" : {
92+ "geometry" : payload .geometry ,
93+ "datetime" : payload .datetime ,
94+ "filter" : payload .filter ,
95+ },
96+ "order_parameters" : payload .order_parameters .model_dump (),
97+ "opportunity_properties" : {
98+ "datetime" : "2024-01-29T12:00:00Z/2024-01-30T12:00:00Z" ,
99+ "off_nadir" : 10 ,
100+ },
95101 },
96- },
97- links = [],
98- )
102+ links = [],
103+ )
99104
100- self ._orders [order .id ] = order
101- return order
105+ self ._orders [order .id ] = order
106+ return Success (order )
107+ except Exception as e :
108+ return Failure (e )
102109
103110
104111class MyOpportunityProperties (OpportunityProperties ):
0 commit comments