refactor: extract handle_order_paid
This commit is contained in:
parent
c0c737378b
commit
6c6cd861ce
2 changed files with 28 additions and 20 deletions
25
services.py
25
services.py
|
|
@ -1,18 +1,23 @@
|
||||||
|
import json
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
from loguru import logger
|
||||||
|
|
||||||
from lnbits.core import create_invoice
|
from lnbits.core import create_invoice
|
||||||
|
|
||||||
from .crud import (
|
from .crud import (
|
||||||
|
get_merchant_by_pubkey,
|
||||||
get_merchant_for_user,
|
get_merchant_for_user,
|
||||||
get_order,
|
get_order,
|
||||||
get_order_by_event_id,
|
get_order_by_event_id,
|
||||||
get_products_by_ids,
|
get_products_by_ids,
|
||||||
get_wallet_for_product,
|
get_wallet_for_product,
|
||||||
|
update_order_paid_status,
|
||||||
)
|
)
|
||||||
from .models import (
|
from .models import (
|
||||||
Nostrable,
|
Nostrable,
|
||||||
Order,
|
Order,
|
||||||
OrderExtra,
|
OrderExtra,
|
||||||
|
OrderStatusUpdate,
|
||||||
PartialOrder,
|
PartialOrder,
|
||||||
PaymentOption,
|
PaymentOption,
|
||||||
PaymentRequest,
|
PaymentRequest,
|
||||||
|
|
@ -78,3 +83,23 @@ async def sign_and_send_to_nostr(
|
||||||
await publish_nostr_event(event)
|
await publish_nostr_event(event)
|
||||||
|
|
||||||
return event
|
return event
|
||||||
|
|
||||||
|
|
||||||
|
async def handle_order_paid(order_id: str, merchant_pubkey: str):
|
||||||
|
try:
|
||||||
|
order = await update_order_paid_status(order_id, True)
|
||||||
|
assert order, f"Paid order cannot be found. Order id: {order_id}"
|
||||||
|
order_status = OrderStatusUpdate(
|
||||||
|
id=order_id, message="Payment received.", paid=True, shipped=order.shipped
|
||||||
|
)
|
||||||
|
|
||||||
|
merchant = await get_merchant_by_pubkey(merchant_pubkey)
|
||||||
|
assert merchant, f"Merchant cannot be found for order {order_id}"
|
||||||
|
dm_content = json.dumps(
|
||||||
|
order_status.dict(), separators=(",", ":"), ensure_ascii=False
|
||||||
|
)
|
||||||
|
|
||||||
|
dm_event = merchant.build_dm_event(dm_content, order.pubkey)
|
||||||
|
await publish_nostr_event(dm_event)
|
||||||
|
except Exception as ex:
|
||||||
|
logger.warning(ex)
|
||||||
23
tasks.py
23
tasks.py
|
|
@ -3,6 +3,7 @@ import json
|
||||||
from asyncio import Queue
|
from asyncio import Queue
|
||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
|
|
||||||
import websocket
|
import websocket
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
from websocket import WebSocketApp
|
from websocket import WebSocketApp
|
||||||
|
|
@ -17,13 +18,12 @@ from .crud import (
|
||||||
get_merchant_by_pubkey,
|
get_merchant_by_pubkey,
|
||||||
get_public_keys_for_merchants,
|
get_public_keys_for_merchants,
|
||||||
get_wallet_for_product,
|
get_wallet_for_product,
|
||||||
update_order_paid_status,
|
|
||||||
)
|
)
|
||||||
from .helpers import order_from_json
|
from .helpers import order_from_json
|
||||||
from .models import OrderStatusUpdate, PartialDirectMessage, PartialOrder
|
from .models import PartialDirectMessage, PartialOrder
|
||||||
from .nostr.event import NostrEvent
|
from .nostr.event import NostrEvent
|
||||||
from .nostr.nostr_client import connect_to_nostrclient_ws, publish_nostr_event
|
from .nostr.nostr_client import connect_to_nostrclient_ws, publish_nostr_event
|
||||||
|
from .services import handle_order_paid
|
||||||
|
|
||||||
async def wait_for_paid_invoices():
|
async def wait_for_paid_invoices():
|
||||||
invoice_queue = Queue()
|
invoice_queue = Queue()
|
||||||
|
|
@ -46,24 +46,7 @@ async def on_invoice_paid(payment: Payment) -> None:
|
||||||
await handle_order_paid(order_id, merchant_pubkey)
|
await handle_order_paid(order_id, merchant_pubkey)
|
||||||
|
|
||||||
|
|
||||||
async def handle_order_paid(order_id: str, merchant_pubkey: str):
|
|
||||||
try:
|
|
||||||
order = await update_order_paid_status(order_id, True)
|
|
||||||
assert order, f"Paid order cannot be found. Order id: {order_id}"
|
|
||||||
order_status = OrderStatusUpdate(
|
|
||||||
id=order_id, message="Payment received.", paid=True, shipped=order.shipped
|
|
||||||
)
|
|
||||||
|
|
||||||
merchant = await get_merchant_by_pubkey(merchant_pubkey)
|
|
||||||
assert merchant, f"Merchant cannot be found for order {order_id}"
|
|
||||||
dm_content = json.dumps(
|
|
||||||
order_status.dict(), separators=(",", ":"), ensure_ascii=False
|
|
||||||
)
|
|
||||||
|
|
||||||
dm_event = merchant.build_dm_event(dm_content, order.pubkey)
|
|
||||||
await publish_nostr_event(dm_event)
|
|
||||||
except Exception as ex:
|
|
||||||
logger.warning(ex)
|
|
||||||
|
|
||||||
|
|
||||||
async def subscribe_to_nostr_client(recieve_event_queue: Queue, send_req_queue: Queue):
|
async def subscribe_to_nostr_client(recieve_event_queue: Queue, send_req_queue: Queue):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue