lnbits-legend/lnbits/extensions/satspay/models.py

92 lines
2.4 KiB
Python
Raw Normal View History

import json
from datetime import datetime, timedelta
2021-10-14 10:02:02 +01:00
from sqlite3 import Row
2021-10-14 22:30:29 +01:00
from typing import Optional
2021-12-30 16:21:44 +00:00
2021-10-14 11:45:56 +01:00
from fastapi.param_functions import Query
from pydantic import BaseModel
2021-10-14 10:02:02 +01:00
DEFAULT_MEMPOOL_CONFIG = (
'{"mempool_endpoint": "https://mempool.space", "network": "Mainnet"}'
)
2021-10-17 18:33:29 +01:00
2021-10-14 11:45:56 +01:00
class CreateCharge(BaseModel):
onchainwallet: str = Query(None)
lnbitswallet: str = Query(None)
description: str = Query(...)
webhook: str = Query(None)
completelink: str = Query(None)
completelinktext: str = Query(None)
2022-11-24 14:54:19 +00:00
custom_css: Optional[str]
2021-10-14 11:45:56 +01:00
time: int = Query(..., ge=1)
amount: int = Query(..., ge=1)
extra: str = DEFAULT_MEMPOOL_CONFIG
2021-10-14 10:02:02 +01:00
2021-10-17 18:33:29 +01:00
2022-11-25 14:12:13 +02:00
class ChargeConfig(BaseModel):
mempool_endpoint: Optional[str]
network: Optional[str]
webhook_success: Optional[bool] = False
webhook_message: Optional[str]
2021-10-14 11:45:56 +01:00
class Charges(BaseModel):
2021-10-14 10:02:02 +01:00
id: str
2021-10-14 22:30:29 +01:00
description: Optional[str]
onchainwallet: Optional[str]
onchainaddress: Optional[str]
lnbitswallet: Optional[str]
2021-12-30 16:21:44 +00:00
payment_request: Optional[str]
payment_hash: Optional[str]
2021-10-14 22:30:29 +01:00
webhook: Optional[str]
completelink: Optional[str]
completelinktext: Optional[str] = "Back to Merchant"
2022-11-24 14:54:19 +00:00
custom_css: Optional[str]
extra: str = DEFAULT_MEMPOOL_CONFIG
2021-10-14 10:02:02 +01:00
time: int
amount: int
balance: int
timestamp: int
@classmethod
def from_row(cls, row: Row) -> "Charges":
return cls(**dict(row))
@property
def time_left(self):
now = datetime.utcnow().timestamp()
start = datetime.fromtimestamp(self.timestamp)
expiration = (start + timedelta(minutes=self.time)).timestamp()
return (expiration - now) / 60
2021-10-14 10:02:02 +01:00
@property
def time_elapsed(self):
return self.time_left < 0
2021-10-14 10:02:02 +01:00
@property
def paid(self):
if self.balance >= self.amount:
return True
else:
return False
@property
2022-11-25 14:12:13 +02:00
def config(self) -> ChargeConfig:
charge_config = json.loads(self.extra)
return ChargeConfig(**charge_config)
def must_call_webhook(self):
return self.webhook and self.paid and self.config.webhook_success == False
2022-11-26 02:11:59 +00:00
2022-11-24 14:54:19 +00:00
class SatsPayThemes(BaseModel):
css_id: str = Query(None)
title: str = Query(None)
custom_css: str = Query(None)
2022-11-24 14:54:19 +00:00
user: Optional[str]
@classmethod
2022-11-24 14:54:19 +00:00
def from_row(cls, row: Row) -> "SatsPayThemes":
return cls(**dict(row))