feat: refresh merchant from nostr (#85)
This commit is contained in:
parent
656723ed5e
commit
2dc5c5479f
6 changed files with 55 additions and 5 deletions
2
crud.py
2
crud.py
|
|
@ -205,7 +205,7 @@ async def create_stall(merchant_id: str, data: PartialStall) -> Stall:
|
||||||
)
|
)
|
||||||
|
|
||||||
stall = await get_stall(merchant_id, stall_id)
|
stall = await get_stall(merchant_id, stall_id)
|
||||||
assert stall, "Newly created stall couldn't be retrieved"
|
assert stall, f"Newly created stall couldn't be retrieved. Id: {stall_id}"
|
||||||
return stall
|
return stall
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@ class NostrClient:
|
||||||
f"Subscribed to events for: {len(public_keys)} keys. New subscription id: {self.subscription_id}"
|
f"Subscribed to events for: {len(public_keys)} keys. New subscription id: {self.subscription_id}"
|
||||||
)
|
)
|
||||||
|
|
||||||
async def merchant_temp_subscription(self, pk, duration=5):
|
async def merchant_temp_subscription(self, pk, duration=10):
|
||||||
dm_filters = self._filters_for_direct_messages([pk], 0)
|
dm_filters = self._filters_for_direct_messages([pk], 0)
|
||||||
stall_filters = self._filters_for_stall_events([pk], 0)
|
stall_filters = self._filters_for_stall_events([pk], 0)
|
||||||
product_filters = self._filters_for_product_events([pk], 0)
|
product_filters = self._filters_for_product_events([pk], 0)
|
||||||
|
|
@ -125,7 +125,7 @@ class NostrClient:
|
||||||
|
|
||||||
asyncio.create_task(unsubscribe_with_delay(subscription_id, duration))
|
asyncio.create_task(unsubscribe_with_delay(subscription_id, duration))
|
||||||
|
|
||||||
async def user_profile_temp_subscribe(self, public_key: str, duration=30) -> List:
|
async def user_profile_temp_subscribe(self, public_key: str, duration=5) -> List:
|
||||||
try:
|
try:
|
||||||
profile_filter = [{"kinds": [0], "authors": [public_key]}]
|
profile_filter = [{"kinds": [0], "authors": [public_key]}]
|
||||||
subscription_id = "profile-" + urlsafe_short_hash()[:32]
|
subscription_id = "profile-" + urlsafe_short_hash()[:32]
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,14 @@
|
||||||
>
|
>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
|
<q-item @click="requeryMerchantData" clickable v-close-popup>
|
||||||
|
<q-item-section>
|
||||||
|
<q-item-label>Refresh from Nostr</q-item-label>
|
||||||
|
<q-item-label caption
|
||||||
|
>Requery all stalls, products and orders from Nostr</q-item-label
|
||||||
|
>
|
||||||
|
</q-item-section>
|
||||||
|
</q-item>
|
||||||
<q-item @click="republishMerchantData" clickable v-close-popup>
|
<q-item @click="republishMerchantData" clickable v-close-popup>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
<q-item-label>Republish to Nostr</q-item-label>
|
<q-item-label>Republish to Nostr</q-item-label>
|
||||||
|
|
@ -32,6 +40,7 @@
|
||||||
>
|
>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
|
|
||||||
<q-item @click="deleteMerchantTables" clickable v-close-popup>
|
<q-item @click="deleteMerchantTables" clickable v-close-popup>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
<q-item-label>Delete from DB</q-item-label>
|
<q-item-label>Delete from DB</q-item-label>
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,23 @@ async function merchantDetails(path) {
|
||||||
LNbits.utils.notifyApiError(error)
|
LNbits.utils.notifyApiError(error)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
requeryMerchantData: async function () {
|
||||||
|
try {
|
||||||
|
await LNbits.api.request(
|
||||||
|
'GET',
|
||||||
|
`/nostrmarket/api/v1/merchant/${this.merchantId}/nostr`,
|
||||||
|
this.adminkey
|
||||||
|
)
|
||||||
|
this.$q.notify({
|
||||||
|
type: 'positive',
|
||||||
|
message: 'Merchant data refreshed from Nostr',
|
||||||
|
timeout: 5000
|
||||||
|
})
|
||||||
|
} catch (error) {
|
||||||
|
console.warn(error)
|
||||||
|
LNbits.utils.notifyApiError(error)
|
||||||
|
}
|
||||||
|
},
|
||||||
deleteMerchantTables: function () {
|
deleteMerchantTables: function () {
|
||||||
LNbits.utils
|
LNbits.utils
|
||||||
.confirmDialog(
|
.confirmDialog(
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
<div class="col-md-4 col-sm-6">
|
<div class="col-md-4 col-sm-6">
|
||||||
|
|
||||||
<q-btn-dropdown @click="getOrders()" :disable="search.restoring" outline unelevated split
|
<q-btn-dropdown @click="getOrders()" :disable="search.restoring" outline unelevated split
|
||||||
class="q-pt-md float-right" :label="search.restoring ? 'Restoring Orders...' : 'Search Orders'">
|
class="q-pt-md float-right" :label="search.restoring ? 'Restoring Orders...' : 'Load Orders'">
|
||||||
<q-spinner v-if="search.restoring" color="primary" size="2.55em" class="q-pt-md float-right"></q-spinner>
|
<q-spinner v-if="search.restoring" color="primary" size="2.55em" class="q-pt-md float-right"></q-spinner>
|
||||||
<q-item @click="restoreOrders" clickable v-close-popup>
|
<q-item @click="restoreOrders" clickable v-close-popup>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
|
|
|
||||||
26
views_api.py
26
views_api.py
|
|
@ -219,7 +219,31 @@ async def api_republish_merchant(
|
||||||
logger.warning(ex)
|
logger.warning(ex)
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=HTTPStatus.INTERNAL_SERVER_ERROR,
|
status_code=HTTPStatus.INTERNAL_SERVER_ERROR,
|
||||||
detail="Cannot get merchant",
|
detail="Cannot republish to nostr",
|
||||||
|
)
|
||||||
|
|
||||||
|
@nostrmarket_ext.get("/api/v1/merchant/{merchant_id}/nostr")
|
||||||
|
async def api_refresh_merchant(
|
||||||
|
merchant_id: str,
|
||||||
|
wallet: WalletTypeInfo = Depends(require_admin_key),
|
||||||
|
):
|
||||||
|
try:
|
||||||
|
merchant = await get_merchant_for_user(wallet.wallet.user)
|
||||||
|
assert merchant, "Merchant cannot be found"
|
||||||
|
assert merchant.id == merchant_id, "Wrong merchant ID"
|
||||||
|
|
||||||
|
await nostr_client.merchant_temp_subscription(merchant.public_key)
|
||||||
|
|
||||||
|
except AssertionError as ex:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=HTTPStatus.BAD_REQUEST,
|
||||||
|
detail=str(ex),
|
||||||
|
)
|
||||||
|
except Exception as ex:
|
||||||
|
logger.warning(ex)
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=HTTPStatus.INTERNAL_SERVER_ERROR,
|
||||||
|
detail="Cannot refresh from nostr",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue