5.3 KiB
Table of contents
1. Description of custom types
AccessToken
_id: ObjectId // (MongoDB)
type: "A" | "S" | "X" // Auth, Spy, Master
user: ObjectId | null // master token has this field empty
entropy: string // random bytes
createdAt: Date
expiresAt: Date | null // null for "never expires"
createdFrom: string
Building
id: string
level: number
Planet
_id: ObjectId,
owner: User,
name: string,
fields: number,
resources: Array<Resource>,
buildings: Array<Building>,
ships: Array<Ship>,
Research
id: string
level: number
Resource
name: string
amount: number
lastUpdated: Date
perHourMiningRate: number
User
_id: ObjectId
username: string
email: string
password: string // hashed with argon2
lastLogin: Date
research: Array<Research>
planets: { // getting user planets requires second call to DB
partial: boolean; // so by default "partial" is true, and "data" is empty
data: Array<Planet> // unless specified otherwise in code
}
createdAt: Date
updatedAt: Date
2. API endpoints
/generateAccessToken
URL: POST /generateAccessToken
DESCRIPTION: Used for generating new access tokens. Type X access token required via Authorization header
BODY:
{
"username": "string"
}
OUTPUT:
{
"code": 200,
"message": "OK",
"accessToken": "A.MTcxODcxNDg2MTg5Mw.NjUzZTk2NzdlNWMzZDM2YjE1YmE3NGVi.QilYuiOT_svRX2iN7f7-jw"
}
/testAccessToken
URL: GET /testAccessToken
DESCRIPTION: Used for testing access token validity. Type A access token required via Authorization header
BODY: N/A
OUTPUT:
{
"code": 200,
"message": "OK",
"data": "Access token valid for user gargamel"
}
/planets/getPlanet
URL: GET /planets/getPlanet/:planetId
DESCRIPTION: Used to get data about specific planet with ID provided in URL. Type A access token required via Authorization header
BODY: N/A
OUTPUT:
{
"code": 200,
"message": "OK",
"data": {
"id": "661d1163567111a5b4be8829",
"owner": "653e9677e5c3d36b15ba74eb",
"name": "Lyoko",
"fields": 20,
"resources": [],
"buildings": [],
"fleet": [],
}
}
/planets/getAllPlanets
URL: GET /planets/getAllPlanets/
DESCRIPTION: Limited view of all planets of all players
BODY: N/A
OUTPUT:
{
"code": 200,
"message": "OK",
"data": [
{
"planetId": "661d1163567111a5b4be8829",
"ownerId": "653e9677e5c3d36b15ba74eb",
"name": "Lyoko"
},
{
"planetId": "666af607f0ae1e11d2d03544",
"ownerId": "653e9677e5c3d36b15ba74eb",
"name": "Cortex"
}
]
}
/research/getResearch
URL: GET /research/getResearch
DESCRIPTION: Used to get data about user research (which technologies are unlocked and on which level). Type A access token required via Authorization header
BODY: N/A
OUTPUT:
{
"code": 200,
"message": "OK",
"data": [
{
"id": "basic-engine",
"level": 7
},
{
"id": "advanced-engine",
"level": 1
}
]
}
/research/performResearch
URL: POST /research/performResearch
DESCRIPTION: Used to send request to start researching. Required buildings and resources are checked on planet provided in body. Type A access token required via Authorization header
BODY:
{
"research": "string",
"planetId": "string"
}
OUTPUT:
{
"code": 200,
"message": "OK"
}
/build/createBuilding
URL: POST /build/createBuilding
DESCRIPTION: Used to send request to build or upgrade building on planet. Required buildings and resources are checked on planet provided in body. Type A access token required via Authorization header
BODY:
{
"building": "string",
"planetId": "string"
}
OUTPUT:
{
"code": 200,
"message": "OK"
}
/auth/changeUserData
URL: PATCH /auth/changeUserData/:type
DESCRIPTION: Used to change user username, email or password. Type A access token required via Authorization header in addition to current password in body
Type can be one of (anything other will throw 400 Bad Request):
- username
- password
BODY:
{
"password": "string",
"newUsername": "string",
"newEmail": "string",
"newPassword": "string"
}
OUTPUT:
{
"code": 200,
"message": "OK"
}