Add Mellat e-payment, videos/instructions CMS, and legacy domain lookup.

Store gateway credentials per business, initiate/verify Mellat at checkout, and resolve old CMS ids from domains in the migrate modal.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-08-13 09:51:17 +03:30
co-authored by Cursor
parent 513673a7da
commit d5e502cf77
44 changed files with 9303 additions and 996 deletions
@@ -767,6 +767,113 @@
}
]
},
{
"name": "Videos",
"item": [
{
"name": "List published videos (website)",
"event": [
{
"listen": "test",
"script": {
"exec": [
"if (pm.response.code === 200) {",
" const json = pm.response.json();",
" if (json.items?.[0]?.id) pm.collectionVariables.set('videoId', json.items[0].id);",
" if (json.items?.[0]?.slug) pm.collectionVariables.set('videoSlug', json.items[0].slug);",
"}"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"url": {
"raw": "{{baseUrl}}/tenants/{{domain}}/videos?page=1&pageSize=12",
"host": [
"{{baseUrl}}"
],
"path": [
"tenants",
"{{domain}}",
"videos"
],
"query": [
{
"key": "page",
"value": "1"
},
{
"key": "pageSize",
"value": "12"
},
{
"key": "provider",
"value": "",
"disabled": true
},
{
"key": "categoryId",
"value": "",
"disabled": true
},
{
"key": "title",
"value": "",
"disabled": true
}
]
}
}
},
{
"name": "Get published video by slug (website)",
"request": {
"method": "GET",
"url": "{{baseUrl}}/tenants/{{domain}}/videos/{{videoSlug}}"
}
},
{
"name": "List video comments (website)",
"request": {
"method": "GET",
"url": "{{baseUrl}}/tenants/{{domain}}/videos/{{videoId}}/comments"
}
},
{
"name": "Submit video comment (website)",
"event": [
{
"listen": "test",
"script": {
"exec": [
"if (pm.response.code === 200 || pm.response.code === 201) {",
" const json = pm.response.json();",
" if (json.comment?.id) pm.collectionVariables.set('commentId', json.comment.id);",
"}"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"authorName\": \"Video Viewer\",\n \"authorEmail\": \"viewer@example.com\",\n \"text\": \"Great video!\"\n}"
},
"url": "{{baseUrl}}/tenants/{{domain}}/videos/{{videoId}}/comments"
}
}
]
},
{
"name": "Portfolios",
"item": [
@@ -1526,7 +1633,7 @@
}
},
{
"name": "Checkout cart (saved address)",
"name": "Checkout cart (e-payment / Mellat)",
"event": [
{
"listen": "test",
@@ -1555,9 +1662,59 @@
],
"body": {
"mode": "raw",
"raw": "{\n \"addressId\": \"{{addressId}}\",\n \"customerNotes\": \"Deliver after 5pm\",\n \"payment\": {\n \"type\": \"e_payment_gate\",\n \"gatewayType\": \"zarinpal\"\n }\n}"
"raw": "{\n \"addressId\": \"{{addressId}}\",\n \"customerNotes\": \"Deliver after 5pm\",\n \"returnUrl\": \"https://YOUR_WEBSITE_DOMAIN/checkout/result\",\n \"payment\": {\n \"type\": \"e_payment_gate\",\n \"gatewayType\": \"mellat\"\n }\n}"
},
"url": "{{baseUrl}}/businesses/{{businessId}}/cart/checkout"
"url": "{{baseUrl}}/businesses/{{businessId}}/cart/checkout",
"description": "Creates a pending order + transaction, calls the gateway, and returns payment.redirect { method, url, fields }. Website must POST/redirect the shopper to the bank. After payment, bank hits /payments/{gateway}/callback which redirects to returnUrl?status=success|failed."
}
}
]
},
{
"name": "Payments",
"item": [
{
"name": "List payment methods",
"request": {
"method": "GET",
"header": [],
"url": "{{baseUrl}}/businesses/{{businessId}}/payments/methods",
"description": "Public. Returns enabled gateways (no secrets). Also available on GET /tenants/{host} as ePayment."
}
},
{
"name": "Mellat callback (bank → API)",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/x-www-form-urlencoded"
}
],
"body": {
"mode": "urlencoded",
"urlencoded": [
{
"key": "ResCode",
"value": "0"
},
{
"key": "SaleOrderId",
"value": "{{transactionId}}"
},
{
"key": "SaleReferenceId",
"value": "123456789"
},
{
"key": "RefId",
"value": "{{refId}}"
}
]
},
"url": "{{baseUrl}}/businesses/{{businessId}}/payments/mellat/callback",
"description": "Called by Mellat (not by the website). Verifies+settles, then 303 redirect to returnUrl."
}
}
]