Project

General

Profile

Actions

Marketplace » History » Revision 33

« Previous | Revision 33/36 (diff) | Next »
Ryan Supawarapong, 02/23/2026 02:11 AM


Marketplace

There are the following API:

  1. Lists
  2. Posted
  3. Interested
  4. Get Interested

Diagram


title Market Place

actor "customer" as c
actor "owner" as o
actor "admin" as a
participant "frontend" as fe
participant "admin" as adm
participant "backend" as be
database "database" as db
participant "notification" as n

o->fe: post sell asset
fe->be: verify asset and quantities
be<->db: query database
be->fe: true/false
fe->c: true: dispaly new post
c->fe: click "interest" button
fe->be: update status and count down 15 minutes
be<->db: update database
be->fe: true/false
fe->c: show status "locked"
be->n: update payment notification
n->c: email bank account info and payment noti within 15 minutes
c->n: click confirm payment
c->fe: totp to confirm payment
fe->be: update payment
fe->fe: update status to "pending payment confirm"
be<->db: update database
be->n: update payment confirmation
n->o: email payment acknowledge confirmation and pay service fees
o->n: click confirm service fees
o->fe: totp to confirm service fees
fe->be: update service fees transaction
fe->fe: update status to "pending service fees confirm"
be<->db: update database
be->n: send service fees notification
n->a: get noti for new service fees
adm<->be: get new service fees
a->adm: verify service fees
adm<->be: show service fees
a->adm: approved service fees
adm->be: update service fees status
be<->db: update database
be->n: send notification
n->o: get noti service fees approved
fe->fe: update status to "complete"

API route

Lists

Type Value
API Path /api/v1/customer/marketplace/lists
Request Type GET
Content-Type application/json
Authorization bearer ...

Request Body

Key Type Example Required
- - - no body

Success Response (200)

JSON Path Type Example Required
status string "success" yes
data object {"transactions":[...]} yes
data.transactions array [{"id":1,"transactionId":"TXN_123",...}] yes
data.transactions[].id number 1 no (omitempty)
data.transactions[].sellerCode string "90000005" no
data.transactions[].sellerName string "First Last" no
data.transactions[].assetCode string "ASSET001" no
data.transactions[].assetName string "Asset 001" no
data.transactions[].assetShortName string "A001" no
data.transactions[].quantity number 10 no
data.transactions[].price number 10.01 no
data.transactions[].totalAmount number 100.10 no
data.transactions[].currency string "THB" no
data.transactions[].status number 1 no

Error Response

Internal Server Error (500)

JSON Path Type Example Required
status string "error" yes
message string "database error" yes

Posted

Type Value
API Path /api/v1/customer/marketplace/posted
Request Type POST
Content-Type application/json
Authorization bearer ...

Request Body

customerCode and customerName are injected from auth token by handler, not required from client body.

Key Type Example Required
assetCode string "ASSET001" yes
assetName string "Asset 001" yes
assetShortName string "A001" yes
quantity number 5 yes (> 0)
price number 10 yes (> 0)
totalAmount number 50 yes (> 0)

Success Response (200)

JSON Path Type Example Required
status string "success" yes

Error Response

Bad Request (400) - bind error

JSON Path Type Example Required
status string "failed" yes
data object {"error":"...bind error..."} yes
data.error string "code=400, message=..." yes

Unauthorized (401) - token missing/invalid

JSON Path Type Example Required
status string "failed" yes
data object {"error":"invalid token claims"} yes
data.error string "invalid token claims" yes

Bad Request (400) - validation error

JSON Path Type Example Required
status string "failed" yes
data object {"errors":{"assetCode":"required"}} yes
data.errors object {"field":"message"} yes

Internal Server Error (500)

JSON Path Type Example Required
status string "error" yes
message string "internal error" yes

Interested

Type Value
API Path /api/v1/customer/marketplace/interested
Request Type POST
Content-Type application/json
Authorization bearer ...

Request Body

Key Type Example Required
assetCode string "ASSET001" yes
assetName string "Asset 001" yes
assetShortName string "A001" yes
quantity number 5 yes (> 0)
price number 10 yes (> 0)
totalAmount number 50 yes (> 0)
transactionId string "TXN_123" yes

Success Response (200)

JSON Path Type Example Required
status string "success" yes
data object {"emailID":"emailID"} yes
data.emailID string "emailID" yes

Error Response

Bad Request (400) - bind error

JSON Path Type Example Required
status string "failed" yes
data object {"error":"...bind error..."} yes
data.error string "code=400, message=..." yes

Unauthorized (401) - token missing/invalid

JSON Path Type Example Required
status string "failed" yes
data object {"error":"invalid token claims"} yes
data.error string "invalid token claims" yes

Bad Request (400) - validation error

JSON Path Type Example Required
status string "failed" yes
data object {"errors":{"transactionId":"required"}} yes
data.errors object {"field":"message"} yes

Internal Server Error (500)

JSON Path Type Example Required
status string "error" yes
message string "internal error" yes

Get Interested

Type Value
API Path /api/v1/customer/marketplace/interested/lists
Request Type GET
Content-Type application/json
Authorization bearer ...

Success Response (200)

JSON Path Type Example Required
status string "success" yes
data object {"interestedList":[...]} yes
data.interestedList array [{"id":"TXN_123",...}] yes
data.interestedList[].id number 1 no (omitempty)
data.interestedList[].sellerCode string "90000005" no
data.interestedList[].sellerName string "First Last" no
data.interestedList[].buyerCode string "90000004" no
data.interestedList[].buyerName string "First Last2" no
data.interestedList[].assetCode string "ASSET001" no
data.interestedList[].assetName string "Asset 001" no
data.interestedList[].assetShortName string "A001" no
data.interestedList[].quantity number 10 no
data.interestedList[].price number 10.01 no
data.interestedList[].totalAmount number 100.10 no
data.interestedList[].currency string "THB" no
data.interestedList[].status number 1 no

Error Response

Unauthorized (401) - token missing/invalid

JSON Path Type Example Required
status string "failed" yes
data object {"error":"invalid token claims"} yes
data.error string "invalid token claims" yes

Internal Server Error (500)

JSON Path Type Example Required
status string "error" yes
message string "internal error" yes

Updated by Ryan Supawarapong about 2 months ago · 36 revisions