feat: refresh merchant from nostr (#85)

This commit is contained in:
Vlad Stan 2023-09-20 12:06:36 +03:00 committed by GitHub
parent 656723ed5e
commit 2dc5c5479f
6 changed files with 55 additions and 5 deletions

View file

@ -205,7 +205,7 @@ async def create_stall(merchant_id: str, data: PartialStall) -> Stall:
)
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

View file

@ -103,7 +103,7 @@ class NostrClient:
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)
stall_filters = self._filters_for_stall_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))
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:
profile_filter = [{"kinds": [0], "authors": [public_key]}]
subscription_id = "profile-" + urlsafe_short_hash()[:32]

View file

@ -24,6 +24,14 @@
>
</q-item-section>
</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-section>
<q-item-label>Republish to Nostr</q-item-label>
@ -32,6 +40,7 @@
>
</q-item-section>
</q-item>
<q-item @click="deleteMerchantTables" clickable v-close-popup>
<q-item-section>
<q-item-label>Delete from DB</q-item-label>

View file

@ -33,6 +33,23 @@ async function merchantDetails(path) {
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 () {
LNbits.utils
.confirmDialog(

View file

@ -15,7 +15,7 @@
<div class="col-md-4 col-sm-6">
<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-item @click="restoreOrders" clickable v-close-popup>
<q-item-section>

View file

@ -219,7 +219,31 @@ async def api_republish_merchant(
logger.warning(ex)
raise HTTPException(
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",
)