about api specification - N4SJAMK/teamboard-meta GitHub Wiki
This document is about the proposed API specification, that should be implemented after Q3. This is not final.
teamboard-auth
Authentication is a service that is used by users to generate access-tokens and authenticate into the system.
MongoDB users collection structure:
{
"_id": "ObjectId",
"email": "user_email",
"username": "user_username",
"password": "bcrypt(user_password)",
"created_at": "Time"
}MongoDB tokens collection structure:
{
"_id": "ObjectId",
"user_id": "ObjectId",
"created_at": "Time",
"secret": "access_token"
}It offers the following methods:
- POST /login
{
"email": "[email protected]",
"password": "meritaehti"
}Sets the x-access-token header.
- POST /register
{
"email": "[email protected]",
"password": "meritaehti"
}{
"_id": "ObjectId",
"email": "[email protected]",
"created_at": "Time"
}teamboard-api
API is a RESTful service that the client (currently) uses. In the future, API should be a separate service that is not necessarily used by the primary client but instead serves as a gateway for 3rd parties.
MongoDB boards collection structure:
{
"_id": "ObjectId",
"created_by": "ObjectId",
"created_at": "Time",
"name": "board_name",
"description": "board_description",
"size": {
"width": 8,
"height": 8,
},
"background": "background_id",
"members": [
{
"role": "admin|member",
"user_id": "ObjectId",
"member_since": "Time"
},
]
}MongoDB tickets collection structure:
{
"_id": "ObjectId",
"board_id": "ObjectId",
"created_by": "ObjectId",
"created_at": "Time",
"color": "#FFFFFF",
"heading": "kikkelis",
"content": "kokkelis",
"position": {
"x": 0,
"y": 0,
"z": 0
},
"linked_users": [
"ObjectId",
],
"linked_boards": [
"ObjectId",
],
"linked_tickets": [
"ObjectId",
]
}It offers the following methods:
- POST /boards
{
"name": "board_name",
"description": "board_description",
"size": {
"width": 8,
"height": 8,
}
}{
"_id": "ObjectId",
"created_by": "ObjectId",
"created_at": "Time",
"name": "board_name",
"description": "board_description",
"size": {
"width": 8,
"height": 8,
},
"background": "background_id"
}Creating a board sets the creating user as admin.
- GET /boards
- GET /boards/:board_id
[{
"_id": "ObjectId",
"created_by": "ObjectId",
"created_at": "Time",
"name": "board_name",
"description": "board_description",
"size": {
"width": 8,
"height": 8,
},
"background": "background_id"
}]- PUT /boards/:board_id
{
"name": "new_board_name",
"description": "new_board_description",
"background": "new_background_id"
}{
"_id": "ObjectId",
"created_by": "ObjectId",
"created_at": "Time",
"name": "new_board_name",
"description": "new_board_description",
"size": {
"width": 8,
"height": 8,
},
"background": "new_background_id"
}- PUT /boards/:board_id/size
{
"width": 9,
"height": 16
}{
"_id": "ObjectId",
"created_by": "ObjectId",
"created_at": "Time",
"name": "new_board_name",
"description": "new_board_description",
"size": {
"width": 9,
"height": 16,
},
"background": "new_background_id"
}- DELETE /boards/:board_id
{
"_id": "ObjectId",
"created_by": "ObjectId",
"created_at": "Time",
"name": "new_board_name",
"description": "new_board_description",
"size": {
"width": 9,
"height": 16,
},
"background": "new_background_id"
}- POST /boards/:board_id/members
{
"role": "member",
"user_id": "ObjectId"
}{
"role": "member",
"user_id": "ObjectId",
"member_since": "Time"
}- GET /boards/:board_id/members
- GET /boards/:board_id/members/:user_id
[{
"role": "member|admin",
"user_id": "ObjectId",
"member_since": "Time"
}]- PUT /boards/:board_id/members/:user_id
{
"role": "admin"
}{
"role": "admin",
"user_id": "ObjectId",
"member_since": "Time"
}- DELETE /boards/:board_id/members/:user_id
{
"role": "admin",
"user_id": "ObjectId",
"member_since": "Time"
}- POST /boards/:board_id/tickets
{
"color": "#FFFFFF",
"heading": "kikkelis",
"content": "kokkelis",
"position": {
"x": 0,
"y": 0,
"z": 0
},
}{
"_id": "ObjectId",
"created_by": "ObjectId",
"created_at": "Time",
"color": "#FFFFFF",
"heading": "kikkelis",
"content": "kokkelis",
"position": {
"x": 0,
"y": 0,
"z": 0
},
"linked_users": [ ],
"linked_boards": [ ],
"linked_tickets": [ ]
}- GET /boards/:board_id/tickets
- GET /boards/:board_id/tickets/:ticket_id
[{
"_id": "ObjectId",
"created_by": "ObjectId",
"created_at": "Time",
"color": "#FFFFFF",
"heading": "kikkelis",
"content": "kokkelis",
"position": {
"x": 0,
"y": 0,
"z": 0
},
"linked_users": [ ],
"linked_boards": [ ],
"linked_tickets": [ ]
}]- PUT /boards/:board_id/tickets/:ticket_id
{
"color": "#5FBFAA",
"heading": "muna",
"content": "koisoo"
}{
"_id": "ObjectId",
"created_by": "ObjectId",
"created_at": "Time",
"color": "#5FBFAA",
"heading": "muna",
"content": "koisoo",
"position": {
"x": 0,
"y": 0,
"z": 0
},
"linked_users": [ ],
"linked_boards": [ ],
"linked_tickets": [ ]
}- PUT /boards/:board_id/tickets/:ticket_id/position
{
"x": 23,
"y": 128,
"z": 3
}{
"_id": "ObjectId",
"created_by": "ObjectId",
"created_at": "Time",
"color": "#5FBFAA",
"heading": "muna",
"content": "koisoo",
"position": {
"x": 23,
"y": 128,
"z": 3
},
"linked_users": [ ],
"linked_boards": [ ],
"linked_tickets": [ ]
}- DELETE /boards/:board_id/tickets/:ticket_id
{
"_id": "ObjectId",
"created_by": "ObjectId",
"created_at": "Time",
"color": "#5FBFAA",
"heading": "muna",
"content": "koisoo",
"position": {
"x": 23,
"y": 128,
"z": 3
},
"linked_users": [ ],
"linked_boards": [ ],
"linked_tickets": [ ]
}- POST /boards/:board_id/tickets/:ticket_id/linked_(users|boards|tickets)
{
"user_id|board_id|ticket_id": "ObjectId"
}[
"ObjectId",
]Returns the modified linked_(users|boards|tickets) array
- DELETE /boards/:board_id/tickets/:ticket_id/linked_(users|boards|tickets)/:id
[ ]Returns the modified linked_(users|boards|tickets) array
- GET /users
- GET /users/:user_id
[{
"_id": "ObjectId",
"created_at": "Time",
"email": "user_email",
"username": "user_username"
}]