moonstream-to / api

Building blocks for your blockchain economy
https://moonstream.to
Apache License 2.0
135 stars 49 forks source link

Leaderboard metadata simplify. #1008

Closed Andrei-Dolgolev closed 7 months ago

Andrei-Dolgolev commented 7 months ago

Leaderboards db model was extended by additional fields

blockchain_ids - array of ids which blockchain that leaderboard include wallet_connect - show metamask connect on leaderboard (in case if address field is wallet address) columns_names - dict of mapping for column names if it not empty then will use LeaderboardUnformattedPosition reponse model.

Testing requests.

GET leaderboards Authorized Endpoints

GET http://127.0.0.1:7191/leaderboard/leaderboards
Authorization: Bearer <token>

Create Leaderboard Authorized Endpoints

POST http://127.0.0.1:7191/leaderboard/
Authorization: Bearer <token>

{
  "title": "Test columnnames",
  "description": "U2NvcmluZzoKKiBVcGdyYWRlLCBkZXBlbmRpbmcgb24gcmFyaXR5ICh1bmNvbW1vbiB1cGdyYWRlcyB3b3J0aCA2NSBwb2ludHMsIHJhcmUgOTUsIGVwaWMgMTU1LCBsZWdlbmRhcnkgMzAwKQoqIE9wZW5pbmcgY2hlc3QKICAgICogR29sZCA9IDFwCiAgICAqIE1hZ2ljYWwgPSAxMHAKICAgICogTGVnZW5kYXJ5IFJveWFsID0gMzVwCiAgICAqIFVsdHJhIFN1cHJlbWUgPSAxMjBwCiogR2V0dGluZyBhIHNoYXJkLCAyIHBvaW50IGZvciB1bmNvbW1vbiwgMyBwb2ludCBmb3IgcmFyZSwgNSBwb2ludCBmb3IgZXBpYywgMTAgcG9pbnQgZm9yIGxlZ2VuZGFyeS4KKiBHZXR0aW5nIGVxdWlwbWVudCwgNzAgcG9pbnQgZm9yIHVuY29tbW9uLCAxMDAgcG9pbnQgZm9yIHJhcmUsIDE4MCBwb2ludCBmb3IgZXBpYywgMzUwIHBvaW50IGZvciBsZWdlbmRhcnkuCiogR2V0dGluZyBhbiBhcnRpZmFjdCwgMzAgcG9pbnQgZm9yIHVuY29tbW9uLCA0MCBwb2ludCBmb3IgcmFyZSwgODAgcG9pbnQgZm9yIGVwaWMsIDE2MCBwb2ludCBmb3IgbGVnZW5kYXJ5Lg==",
  "columns_names": {
    "address": "token_id"
  }
}

Get scores

404 not found public is False
GET http://127.0.0.1:7191/leaderboard/?leaderboard_id=<leaderboard_id>

Update leaderboard endpoint

Name points_data as quests list keys which available in points_data as points_data_fields keys as key of points_data value human readable name.


PUT http://127.0.0.1:7191/leaderboard/<leaderboard_id>
Authorization: Bearer <token>
Content-Type: application/json

{ "columns_names": { "points_data": "quests", "points_data_fields": {"real_name":"quest_2"}, } }


###   Get scores
```http
GET http://127.0.0.1:7191/leaderboard/?leaderboard_id=<leaderboard_id>

Push scores

PUT http://127.0.0.1:7191/leaderboard/<leaderboard_id>/scores?overwrite=true
Authorization: Bearer <token>
Content-Type: application/json

[
  {
            "address": "0x0000000000000000000000000000000000000000",
            "score": 200000000,
            "points_data": {
                "breeding": 100000000,
                "hatchingEggs": 100000000
        }
   }
]

Get scores

must see column_1 and etc because column_names not empty

GET http://127.0.0.1:7191/leaderboard/?leaderboard_id=<leaderboard_id>

Quartiles

GET http://127.0.0.1:7191/leaderboard/quartiles?leaderboard_id=<leaderboard_id>

Position

GET http://127.0.0.1:7191/leaderboard/position?leaderboard_id=<leaderboard_id>&address=0x0000000000000000000000000000000000000000

Rank

GET http://127.0.0.1:7191/leaderboard/rank?leaderboard_id=<leaderboard_id>&rank=1

Ranks

GET http://127.0.0.1:7191/leaderboard/ranks?leaderboard_id=<leaderboard_id>

Migration plan

./alembic.sh -c alembic.prod-conf.ini upgrade head