Skip to content

thanglq1/nestjs-leaderboard-redis

Repository files navigation

Installation

$ npm install

Running the app

docker compose up

Database

Database design just for testing

Users - Mongodb

Redis

Redis - One User

Redis - Leaderboard

Endpoints

POST - Create User (Signup)

http://localhost:3000/users

Parameters

{
    "email": "john@gmail.com",
    "password": "123456",
    "username": "John"
}

Response

{
    "username": "John",
    "email": "john@gmail.com",
    "score": 0,
    "_id": "63e658ce51a9bd1f5b48e4ba"
}

PATCH - Update User's Score

http://localhost:3000/users

Parameters

{
    "userId": "63e658ce51a9bd1f5b48e4ba",
    "score": 100
}

Response

{
    "_id": "63e658ce51a9bd1f5b48e4ba",
    "username": "John",
    "email": "john@gmail.com",
    "score": 100,
    "__v": 0
}

GET - Leaderboard

http://localhost:3000/users/leaderboard?page=1&perPage=10

Response

[
    {
        "username": "John",
        "email": "john@gmail.com",
        "score": "1000"
    },
    {
        "username": "Hary",
        "email": "hary@gmail.com",
        "score": "900"
    },
    {
        "username": "Henry",
        "email": "henry@gmail.com",
        "score": "800"
    },
    {
        "username": "Maria",
        "email": "maria@gmail.com",
        "score": "700"
    },
    {
        "username": "Tony",
        "email": "tony@gmail.com",
        "score": "600"
    },
    {
        "username": "Tom",
        "email": "tom@gmail.com",
        "score": "500"
    },
    {
        "username": "Susan",
        "email": "susan@gmail.com",
        "score": "400"
    },
    {
        "username": "Jack",
        "email": "jack@gmail.com",
        "score": "300"
    },
    {
        "username": "Linda",
        "email": "linda@gmail.com",
        "score": "200"
    }
]