-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpython
More file actions
78 lines (64 loc) · 1.53 KB
/
python
File metadata and controls
78 lines (64 loc) · 1.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
from fastapi import FastAPI
from pydantic import BaseModel
import stripe
# --------------------
# APP CONFIG
# --------------------
app = FastAPI()
stripe.api_key = "sk_test_your_key_here"
# --------------------
# MODELS
# --------------------
class Product(BaseModel):
id: int
name: str
price: int # cents
stock: int
class CartItem(BaseModel):
product_id: int
quantity: int
class Order(BaseModel):
items: list[CartItem]
# --------------------
# FAKE DATABASE
# --------------------
products = {
1: {"name": "Laptop", "price": 100000, "stock": 5},
2: {"name": "Phone", "price": 50000, "stock": 10}
}
cart = []
# --------------------
# PRODUCT APIs
# --------------------
@app.get("/products")
def get_products():
return products
# --------------------
# CART APIs
# --------------------
@app.post("/cart/add")
def add_to_cart(item: CartItem):
cart.append(item)
return {"message": "Item added to cart"}
@app.get("/cart")
def view_cart():
return cart
# --------------------
# ORDER + PAYMENT
# --------------------
@app.post("/order")
def create_order(order: Order):
total_amount = 0
for item in order.items:
product = products[item.product_id]
total_amount += product["price"] * item.quantity
payment = stripe.PaymentIntent.create(
amount=total_amount,
currency="usd",
payment_method_types=["card"]
)
return {
"message": "Order created",
"total_amount": total_amount,
"payment_client_secret": payment.client_secret
}