j3k0 / ganomede-invitations

Ganomede Invitations
0 stars 0 forks source link

Invitations

This module allows player to invite each other to play a game.

Relations

Configuration

Variables available for service configuration.

InvitationDB

See #4 for details.

AuthDB

UsermetaDB

It contains the list of users that "userA" has blocked. Invitations from users in this list won't be sent to "userA".

Note, this database contains metadata for all users.

Background Jobs

API

Invitations [/invitations/v1/auth/:authToken/invitations]

+ Parameters
    + authToken (string, required) ... Authentication token

Create an invitation [POST]

body (application/json)

{
    "gameId": "0123456789abcdef012345",
    "type": "triominos/v1"
    "to": "some_username",
}

response [200] OK

{
    "id": "0123456789abcdef012345"
}

response [401] Unauthorized

If authToken is invalid.

response [423] Blocked

If the user is not allowed to send this invitation (for example she/he has been blocked).

Note: Error code would better be 403, but the game using this module will show a login screen when 403 is returned. That's why we chose code 423.

List user's invitations [GET]

response [200] OK

[
    {
        "id": "0123456789abcdef012345",
        "from": "some_username",
        "to": "my_username",
        "gameId": "0123456789abcdef012345",
        "type": "triominos/v1"
    },
    {
        "id": "0123456789abcdef012345",
        "from": "my_username",
        "to": "some_username",
        "gameId": "0123456789abcdef012345",
        "type": "triominos/v1"
    },
    {
        "id": "0123456789abcdef012345",
        "from": "my_username",
        "to": "some_username",
        "gameId": "0123456789abcdef012345",
        "type": "wordsearch/v1"
    }
]

response [401] Unauthorized

Single Invitation [/invitations/v1/auth/:authToken/invitations/:id]

+ Parameters

    + authToken (string, required) ... Authentication token
    + id (string, required) ... ID of the invitation

Delete an invitation [DELETE]

An invitation can only be deleted by one of the two players concerned bt the invitation.

"from" player can DELETE it only with reason: "cancel"

"to" player can DELETE it only with reasons: "accept" or "refuse"

After deletion is successful, the invitation is removed from database (for the two players).

body (application/json)

{
    "reason": "accept"
}

response [204] No content

{
    "ok": true
}

response [401] Unauthorized

Alternative endpoint

Deleting an invitation can also be done using POST at the following endpoint:

/invitations/v1/auth/:authToken/invitations/:id/delete

This endpoint has the exact same behaviour as the above documented DELETE.. It's useful for platforms that do not support the DELETE method.