documentation/api-documentation.md

673 lines
15 KiB
Markdown
Raw Normal View History

2020-04-14 11:49:10 +00:00
## API Documentation
---
2020-06-17 11:10:11 +00:00
**URL** https://meeting-planner-backend.herokuapp.com/
---
2020-04-14 11:49:10 +00:00
> Values required in **`bold`**.
### **Accounts** | `account`
| field | data type | metadata |
| :------------ | :--------------- | :-------------------------- |
| id | unsigned integer | primary key, auto-increment |
| username | string | required |
| email | string | required, unique |
| password | string | required |
| timezone | string | |
| earliest_time | string | |
| latest_time | string | |
| created_at | datetime | generated by database |
2020-05-02 19:08:24 +00:00
| updated_at | datetime | generated by database |
2020-04-14 11:49:10 +00:00
#### Add an account
2020-04-14 11:49:10 +00:00
**`POST /api/accounts`**
##### Request
2020-04-14 11:49:10 +00:00
A json object for the account to register with **`username`**, **`email`**, **`password`**, `timezone`, `earliest_time` and `latest_time`.
```
{
"username": "jean",
"email": "jean@example.com",
"password": "really-strong-password",
"timezone": "Europe/Brussels",
"earliest_time":"09:30",
"latest_time":"22:00"
2020-04-14 11:49:10 +00:00
}
```
##### Response `201`
2020-04-14 11:49:10 +00:00
A json object for the registered account with `id`, `username`, `email`, `timezone`, `earliest_time` and `latest_time`.
```
{
2020-05-04 13:14:28 +00:00
"id": 1,
"username": "jean",
"email": "jean@example.com",
"timezone": "Europe/Brussels",
"earliest_time":"09:30",
"latest_time":"22:00"
2020-04-14 11:49:10 +00:00
}
```
#### Log in an account
2020-04-14 11:49:10 +00:00
**`POST /api/accounts/login`**
##### Request
2020-04-14 11:49:10 +00:00
A json object for the account to login with either **`email`** or **`username`**, and **`password`** .
```
{
"username": "jean",
"password": "super-strong-password"
}
```
##### Response `201`
2020-04-14 11:49:10 +00:00
A json object for the registered account with `id`, `username`, `email`, `timezone`, `earliest_time` and `latest_time`.
```
{
2020-05-04 13:14:28 +00:00
"id": 1,
"username": "jean",
"email": "jean@example.com",
"timezone": "Europe/Brussels",
"earliest_time":"09:30",
"latest_time":"22:00"l
2020-04-14 11:49:10 +00:00
}
```
#### Update an account
2020-04-14 11:49:10 +00:00
**`PUT /api/accounts/:id`**
##### Request
2020-04-14 11:49:10 +00:00
A json object for the account to register with `id` and any of `username`, `email`, `password`, `timezone`, `earliest_time`, `latest_time`.
```
{
2020-05-04 16:19:35 +00:00
"earliest_time": "08:30",
"latest_time": "20:00"
2020-04-14 11:49:10 +00:00
}
```
##### Response `200`
2020-04-14 11:49:10 +00:00
A json object for the registered account with `id`, `username`, `email`, `timezone`, `earliest_time` and `latest_time`.
```
{
2020-05-04 13:14:28 +00:00
"id": 1,
"username": "jean",
"email": "jean@example.com",
"timezone": "Europe/Brussels",
"earliest_time": "09:30",
"latest_time": "22:00"
2020-04-14 11:49:10 +00:00
}
```
#### Delete an account
2020-04-14 11:49:10 +00:00
**`DELETE /api/accounts/:id`**
##### Request
2020-05-04 13:36:16 +00:00
A json object for the account to delete with `token`.
2020-04-14 11:49:10 +00:00
```
{
2020-05-04 13:36:16 +00:00
"token": "dsdfs-sdfsf-fefzefz-fzef"
2020-04-14 11:49:10 +00:00
}
```
##### Response `200`
2020-05-04 13:14:28 +00:00
A json object for the deleted account with confirmation message.
2020-04-14 11:49:10 +00:00
```
{
2020-05-04 13:14:28 +00:00
"message": "Account with id 15 successfully deleted."
2020-04-14 11:49:10 +00:00
}
```
#### Get a list of meetings for an account
**`GET /api/accounts/:id/meetings`**
2020-04-14 11:49:10 +00:00
##### Request
2020-05-04 13:36:16 +00:00
A json object with an `token`.
2020-04-14 11:49:10 +00:00
```
{
2020-05-04 13:36:16 +00:00
"token": "qsd-qsdqd-dfsdfsfsd-sdfsdfs"
2020-04-14 11:49:10 +00:00
}
```
##### Response `200`
2020-04-14 11:49:10 +00:00
A json object for the specified account with an array of `meeting`.
```
[
{
"id": "03ac7a10-316f-46e8-bb55-8611e7e5b31c",
"title": "Worldwide meeting I",
"description": "Let's find the best ethical growth hacking technics together. Yeah, fun.",
"start_time": "10:30:00",
"timezone": "Europe/Brussels",
"duration": 90,
"status": false
},
{
"id": "2e8f3748-ea5a-4d20-b9a8-683ac65f5634",
"title": "Worldwide meeting II",
"description": "Let's find the best ethical growth hacking technics together. Yeah, fun.",
"start_time": "08:00:00",
"timezone": "America/New_York",
"duration": 90,
"status": false
},
{
"id": "a8344a68-7961-4bff-bb3b-b288f3abcf1c",
"title": "Worldwide meeting III",
"description": "Let's find the best ethical growth hacking technics together. Yeah, fun.",
"start_time": "14:30:00",
"timezone": "Asia/Kolkata",
"duration": 90,
"status": false
}
2020-05-04 13:14:28 +00:00
]
2020-04-14 11:49:10 +00:00
```
### **Meetings** | `meeting`
| field | data type | metadata |
| :---------- | :-------- | :------------------------------------------ |
| id | uuid | primary key, auto-generated |
| title | string | required |
| description | string | |
| start_time | datetime | |
| duration | int | required |
| status | boolean | required: `0` (proposed) or `1` (confirmed) |
| password | string | |
| created_at | datetime | generated by database |
2020-05-02 19:08:24 +00:00
| updated_at | datetime | generated by database |
2020-04-14 11:49:10 +00:00
#### Add a meeting
2020-04-14 11:49:10 +00:00
**`POST /api/meetings`**
##### Request
A json object for the meeting to add with **`title`**, `description`, `start_time`, **`duration`**, **status** and `password`.
2020-04-14 11:49:10 +00:00
```
{
"title": "Worldwide strategy meeting for growth",
"description": "Let's find the best ethical growth hacking technics together. Yeah, fun.",
2020-05-04 13:36:16 +00:00
"start_time": "10:00",
2020-04-14 11:49:10 +00:00
"duration": 90,
2020-05-04 13:36:16 +00:00
"status": 0,
2020-05-04 14:03:39 +00:00
"password": "simple-meeting-password"
2020-04-14 11:49:10 +00:00
}
```
##### Response `201`
2020-04-14 11:49:10 +00:00
A json object for the added meeting with `id`, `title`, `description`, `start_time`, `duration`, `status` and `password`.
```
{
2020-05-04 13:36:16 +00:00
"id": "f86983db-955e-43b8-be3e-bc92bbeb9b43",
"title": "Worldwide strategy meeting for growth",
"description": "Let's find the best ethical growth hacking technics together. Yeah, fun.",
"start_time": "10:00",
"duration": 90,
"status": 0,
"password" "simple-meeting-password"
2020-04-14 11:49:10 +00:00
}
```
#### Update a meeting
2020-04-14 11:49:10 +00:00
**`PUT /api/meetings/:id`**
##### Request
2020-05-04 14:03:39 +00:00
A json object for the meeting to update with any of `title`, `description`, `start_time`, `timezone`, `duration`, `status` and `password`.
2020-04-14 11:49:10 +00:00
```
{
"start_time": "2022-02-16 20:00:00",
"status": 1
}
```
##### Response `200`
2020-04-14 11:49:10 +00:00
A json object for the updated meeting with `id`, `title`, `description`, `start_time`, `timezone`, `duration` and `status`.
```
{
2020-05-04 14:03:39 +00:00
"id": "f86983db-955e-43b8-be3e-bc92bbeb9b43",
"title": "Worldwide strategy meeting for growth",
"description": "Let's find the best ethical growth hacking technics together.Yeah, fun.",
"start_time": "2022-02-16 20:00:00",
"duration: 90,
"status": 1
2020-04-14 11:49:10 +00:00
}
```
#### Delete a meeting
2020-04-14 11:49:10 +00:00
**`DELETE /api/meetings/:id`**
##### Request
A json object for the meeting to delete with `id`.
2020-04-14 11:49:10 +00:00
```
{
"id": "f86983db-955e-43b8-be3e-bc92bbeb9b43",
2020-04-14 11:49:10 +00:00
}
```
##### Response `200`
A json object for the deleted meeting with `message`.
2020-04-14 11:49:10 +00:00
```
{
2020-05-05 14:13:12 +00:00
"message": "Meeting with id f86983db-955e-43b8-be3e-bc92bbeb9b43 was successfully deleted."
2020-04-14 11:49:10 +00:00
}
```
#### Get a list of all participants for a meeting
2020-04-14 11:49:10 +00:00
**`GET /api/meetings/:id/participants`**
##### Request
A json object with a `meeting_id`.
2020-04-14 11:49:10 +00:00
```
{
"id": "03ac7a10-316f-46e8-bb55-8611e7e5b31c"
2020-04-14 11:49:10 +00:00
}
```
##### Response `200`
2020-04-14 11:49:10 +00:00
A json object for the specified meeting with an array of `participant`.
```
[
{
"account_id": 1,
"meeting_id": "03ac7a10-316f-46e8-bb55-8611e7e5b31c",
"earliest_time": "09:30:00",
"latest_time": "22:00:00",
"quorum": false,
"mandatory": false,
"host": false,
"answered": false,
"timezone": "Europe/Brussels"
},
{
"account_id": 2,
"meeting_id": "03ac7a10-316f-46e8-bb55-8611e7e5b31c",
"earliest_time": "09:00:00",
"latest_time": "20:00:00",
"quorum": false,
"mandatory": false,
"host": false,
"answered": false,
"timezone": "America/New_York"
}
]
```
#### Get a list of all possible dates for a meeting
**`GET /api/meetings/:id/possible-dates`**
##### Request
A json object with a `meeting_id`.
2020-04-14 11:49:10 +00:00
```
{
"id": "f86983db-955e-43b8-be3e-bc92bbeb9b43"
2020-04-14 11:49:10 +00:00
}
```
##### Response `200`
A json object for the specified meeting with an array of `possible_date`.
```
[
{
"id": 12,
"meeting_id": "f86983db-955e-43b8-be3e-bc92bbeb9b43",
"possible_date": "2020-02-18"
},
{
"id": 13,
"meeting_id": "f86983db-955e-43b8-be3e-bc92bbeb9b43",
"possible_date": "2020-02-19"
},
{
"id": 14,
"meeting_id": "f86983db-955e-43b8-be3e-bc92bbeb9b43",
"possible_date": "2020-02-22"
}
]
```
#### Get a list of all availability for a meeting
**`GET /api/meetings/:id/availability`**
2020-04-14 11:49:10 +00:00
##### Request
2020-04-14 11:49:10 +00:00
A json object with a `meeting_id`.
```
{
"id": "f86983db-955e-43b8-be3e-bc92bbeb9b43"
2020-04-14 11:49:10 +00:00
}
```
##### Response `200`
A json object for the specified meeting with `meeting_id` and an array of `availability`.
2020-04-14 11:49:10 +00:00
```
[
{
"id": 1,
"meeting_id": "03ac7a10-316f-46e8-bb55-8611e7e5b31c",
"account_id": 1,
"possible_date_id": 1,
"preference": false,
"start_time": "09:00",
"end_time": "22:00",
},
{
"id": 2,
"meeting_id": "03ac7a10-316f-46e8-bb55-8611e7e5b31c",
"account_id": 2,
"possible_date_id": 1,
"preference": false,
"start_time": "10:00:00",
"end_time": "20:00:00",
},
{
"id": 3,
"meeting_id": "03ac7a10-316f-46e8-bb55-8611e7e5b31c",
"account_id": 1,
"possible_date_id": 2,
"preference": false,
"start_time": "10:00:00",
"end_time": "14:00:00",
}
]
2020-04-14 11:49:10 +00:00
```
### **Participants** | `participant`
| field | data type | metadata |
| :------------ | :-------- | :------------------------------------------- |
| account_id | string | required, foreign key, composite primary key |
| meeting_id | string | required, foreign key, composite primary key |
| quorum | boolean | `0` (no) or `1` (yes) |
| mandatory | boolean | `0` (no) or `1` (yes) |
| host | boolean | required, `0` (no) or `1` (yes) |
| answered | boolean | required, `0` (no) or `1` (yes) |
| created_at | datetime | generated by database |
| updated_at | datetime | generated by database |
2020-04-14 11:49:10 +00:00
#### Invite a participant
2020-04-14 11:49:10 +00:00
**`POST /api/participants`**
##### Request
A json object for the participant to add with **`account_id`**, **`meeting_id`**, **`quorum`**, **`mandatory`**, **`host`** and **`answered`**.
2020-04-14 11:49:10 +00:00
```
{
"account_id": 5,
"meeting_id": "f86983db-955e-43b8-be3e-bc92bbeb9b43",
2020-04-14 11:49:10 +00:00
"quorum": 0,
"mandatory": 1,
"host": 0,
"answered": 0,
}
```
##### Response `201`
A json object for the participant with `id`, `account_id`, `meeting_id`, `quorum`, `mandatory`, `host`, `answered` and `timezone`.
2020-04-14 11:49:10 +00:00
```
{
2020-05-04 16:19:35 +00:00
"account_id": 5,
"meeting_id": "f86983db-955e-43b8-be3e-bc92bbeb9b43",
"quorum": 0,
"mandatory": 1,
"host": 0,
"answered": 0,
"timezone": "Europe/Brussels"
2020-04-14 11:49:10 +00:00
}
```
#### Update a participant
**`PUT /api/participants/:account_id-:meeting_id`**
2020-04-14 11:49:10 +00:00
##### Request
A json object for the participant to invite with any of `quorum`, `mandatory`, `host`, `answered` and `timezone`.
2020-04-14 11:49:10 +00:00
```
{
"quorum": 1,
"host": 1,
"answered": 1,
}
```
##### Response `200`
A json object for the participant with `account_id`, `meeting_id`, `quorum`, `mandatory`, `host`, `answered` and `timezone`.
2020-04-14 11:49:10 +00:00
```
{
"account_id": 5,
"meeting_id": "f86983db-955e-43b8-be3e-bc92bbeb9b43",
"quorum": 1,
"mandatory": 1,
"host": 1,
"answered": 1,
"timezone": "Europe/Brussels"
2020-04-14 11:49:10 +00:00
}
```
#### Delete a participant
**`DELETE /api/participants/:account_id-:meeting_id`**
2020-04-14 11:49:10 +00:00
##### Request
A json object for the participant to delete with `token`.
2020-04-14 11:49:10 +00:00
```
{
"token": "lknlkj-kjbkbj-kbjkbj-jkjh"
2020-04-14 11:49:10 +00:00
}
```
##### Response
A json object for the deleted participant with `message`.
2020-04-14 11:49:10 +00:00
```
{
2020-05-05 14:13:12 +00:00
"message": "Meeting with id 1-f86983db-955e-43b8-be3e-bc92bbeb9b43 was successfully deleted."
2020-04-14 11:49:10 +00:00
}
```
2020-05-02 19:08:24 +00:00
### **Possible Dates** | `possible_date`
| field | data type | metadata |
| :------------ | :-------- | :-------------------------- |
| id | int | primary key, auto-increment |
| meeting_id | string | foreign key, required |
2020-08-23 14:16:35 +00:00
| possible_date | string | required |
2020-05-02 19:08:24 +00:00
| created_at | datetime | generated by database |
| updated_at | datetime | generated by database |
#### Add a possible date
**`POST /api/possible-dates`**
##### Request
A json object for the meeting to add with **`meeting_id`** and **`possible_date`**.
```
{
"meeting_id": "03ac7a10-316f-46e8-bb55-8611e7e5b31c",
"possible_date": "2025-02-27"
2020-05-02 19:08:24 +00:00
}
```
##### Response `201`
A json object for the added meeting with `id`, `meeting_id` and `possible_date`.
```
{
"id": 20,
"meeting_id": "03ac7a10-316f-46e8-bb55-8611e7e5b31c",
2020-08-23 14:17:08 +00:00
"possible_date": "2025-02-26"
2020-05-02 19:08:24 +00:00
}
```
#### Delete a possible date
**`DELETE /api/possible-dates/:id`**
##### Request
A json object for the possible date to delete with `token`.
2020-05-02 19:08:24 +00:00
```
{
"token": "fsdfsdf-sdfsgdfg-dfgdfg-dfgd"
2020-05-02 19:08:24 +00:00
}
```
##### Response `200`
2020-05-05 14:13:12 +00:00
A json object for the deleted possible date with `message`.
2020-05-02 19:08:24 +00:00
```
{
2020-05-05 14:13:12 +00:00
"message": "Possible date with id 12 was successfully deleted."
2020-05-02 19:08:24 +00:00
}
```
### **Availability** | `availability`
| field | data type | metadata |
| :--------------- | :-------- | :-------------------------------------------- |
| id | int | primary key, auto-increment |
| account_id | int | foreign composite key (participant), required |
| meeting_id | uuid | foreign composite key (participant), required |
| possible_date_id | int | foreign key, required |
| preference | boolean | `0` (ideal) or `1` (yes), required |
2020-08-26 15:19:46 +00:00
| start_time | datetime | required |
| end_time | datetime | required |
| timezone | string | required |
| created_at | datetime | generated by database |
| updated_at | datetime | generated by database |
2020-04-14 11:49:10 +00:00
#### Add an availability
**`POST /api/availability`**
2020-04-14 11:49:10 +00:00
##### Request
A json object with the availability to add with **`participant_id`**, **`possible_date_id`** and an array of intervals with **`preference`**, **`start_time`**, **`end_time`** and **`timezone`**.
2020-04-14 11:49:10 +00:00
```
{
"meeting_id": "03ac7a10-316f-46e8-bb55-8611e7e5b31c",
"account_id": 1,
"possible_date_id": 1,
"preference": false,
"start_time": "23:00:00",
"end_time": "23:59:00",
2020-05-05 14:15:25 +00:00
"timezone": "Europe/Brussels"
2020-04-14 11:49:10 +00:00
}
```
##### Response `201`
A json object with the availability added with **`id`**, **`account_id`**, **`meeting_id`**, **`possible_date_id`** and an array of intervals with **`id`**, **`preference`**, **`start_time`**, **`end_time`** and **`timezone`**.
2020-04-14 11:49:10 +00:00
```
{
"id": 30,
"account_id": 1,
"meeting_id": "03ac7a10-316f-46e8-bb55-8611e7e5b31c",
"possible_date_id": 1,
"preference": false,
"start_time": "23:00:00",
"end_time": "23:59:00",
2020-05-05 14:15:25 +00:00
"timezone": "Europe/Brussels"
2020-04-14 11:49:10 +00:00
}
```
#### Delete an availability
**`DELETE /api/availability/:id`**
2020-04-14 11:49:10 +00:00
##### Request
A json object for the availability to delete with **`token`**.
2020-04-14 11:49:10 +00:00
```
{
2020-05-05 14:13:12 +00:00
"token": "bbeb9b43-fzefzef-zefdhffg-zgze"
2020-04-14 11:49:10 +00:00
}
```
##### Response `200`
A json object for the deleted availability with `message`.
2020-04-14 11:49:10 +00:00
```
{
"message": "Availability with id 30 was successfully deleted."
2020-04-14 11:49:10 +00:00
}
2020-04-14 12:03:55 +00:00
```