Skip to content

Commit 2970931

Browse files
committed
Add /products/id/opportunities
1 parent d608075 commit 2970931

2 files changed

Lines changed: 25 additions & 2 deletions

File tree

demo/api/api_types.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from stac_pydantic.links import Link
1818
from stac_pydantic.shared import Provider
1919

20+
2021
Geometry = Union[
2122
Point,
2223
MultiPoint,
@@ -106,8 +107,7 @@ def to_json(self, **kwargs: Any) -> str:
106107
class Search(BaseModel):
107108
geometry: Optional[Geometry]
108109

109-
# Slash separated date time range
110-
datetime: str
110+
datetime: str = Field(description="Slash separated datetime range.")
111111
product_id: Optional[str]
112112
constraints: Optional[Dict[str, Any]] = None
113113
limit: int = 10

demo/api/main.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,29 @@ async def get_products(
4646
)
4747

4848

49+
50+
@app.get("/products/{id}/opportunities", response_model=OpportunityCollection)
51+
async def get_product_opportunities(
52+
id: str,
53+
request: Request,
54+
search: Search | None = None,
55+
):
56+
"""Get opportunities for a given product
57+
58+
Example: /products/landsat-c2-l2/opportunities
59+
"""
60+
if search is None:
61+
start_datetime = datetime.now()
62+
end_datetime = start_datetime + timedelta(days=40)
63+
search = Search(
64+
geometry=Point(coordinates=(45, 45)),
65+
datetime=f"{start_datetime.isoformat()}/{end_datetime.isoformat()}",
66+
limit=10,
67+
)
68+
search.product_id = id
69+
70+
return await post_opportunities(request, search)
71+
4972
@app.get("/opportunities", response_model=OpportunityCollection)
5073
async def get_opportunities(
5174
request: Request,

0 commit comments

Comments
 (0)