documentation/api-documentation.md
2020-04-14 13:49:10 +02:00

16 KiB

API Documentation


Values required in bold.

Accounts | account

field data type metadata
id unsigned integer primary key, auto-increment
username varchar required
email varchar required
password varchar required
timezone varchar
earliest_time varchar
latest_time varchar
created_at datetime generated by database

Add an account

POST /api/accounts

Request

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 AM",
  "latest_time":"10:00 PM"
}
Response

A json object for the registered account with id, username, email, timezone, earliest_time and latest_time.

{
  "status": 201,
  "data": {
    "id": 1,
    "username": "jean",
    "email": "jean@example.com",
    "timezone": "Europe/Brussels",
    "earliest_time":"09:30 AM",
    "latest_time":"10:00 PM"l
  }
}

Log in an account

POST /api/accounts/login

Request

A json object for the account to login with either email or username, and password .

{
  "username": "jean",
  "password": "super-strong-password"
}
Response

A json object for the registered account with id, username, email, timezone, earliest_time and latest_time.

{
  "status": 201,
  "data": {
    "id": 1,
    "username": "jean",
    "email": "jean@example.com",
    "timezone": "Europe/Brussels",
    "earliest_time":"09:30 AM",
    "latest_time":"10:00 PM"l
  }
}

Update an account

PUT /api/accounts/:id

Request

A json object for the account to register with id and any of username, email, password, timezone, earliest_time, latest_time.

{
  "id": 15,
  "earliest_time": "08:30 AM",
  "latest_time": "08:00 PM"
}
Response

A json object for the registered account with id, username, email, timezone, earliest_time and latest_time.

{
  "status": 200,
  "data": {
    "id": 1,
    "username": "jean",
    "email": "jean@example.com",
    "timezone": "Europe/Brussels",
    "earliest_time": "09:30 AM",
    "latest_time": "10:00 PM"
  }
}

Delete an account

DELETE /api/accounts/:id

Request

A json object for the account to delete with id.

{
  "id": 15
}
Response

A json object for the deleted account with status code, message, id, username and email.

{
  "status": 200,
  "message": " '`username`' account with email '`email`' has been successfully deleted."
  "data": {
    "id": 15,
    "username": "jean",
    "email": "jean@example.com"
  }
}

Get a list of meetings for an account

GET /api/accounts/:account_id/meetings

Request

A json object with an account_id.

{
  "id": 5
}
Response

A json object for the specified account with an array of meeting.

{
	"status": 200,
	"data": [{
			"id": "worldwide-strategy-meeting-for-11059",
			"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",
			"timezone": "Europe/Brussels",
			"duration": 60,
			"status": 1
		},
		{
			"id": "follow-up-with-tech-team-21850",
			"title": "Follow up with tech team",
			"duration": 120,
			"status": 0
		}
	]
}

Meetings | meeting

field data type metadata
id varchar primary key, first 30 chars of title with words separated by - + 5 random int
title varchar required
description varchar
start_time datetime
timezone varchar
duration int required
status boolean required: 0 (proposed) or 1 (confirmed)
password varchar
created_at datetime generated by database

Add a meeting

POST /api/meetings

Request

A json object for the meeting to add with id, title, description, start_time, duration and password.

{
  "id": "worldwide-strategy-meeting-for-11059",
  "title": "Worldwide strategy meeting for growth",
  "description": "Let's find the best ethical growth hacking technics together. Yeah, fun.",
  "duration": 90,
  "password": "generic-password"
}
Response

A json object for the added meeting with id, title, description, start_time, duration, status and password.

{
  "status": 201,
  "data": {
    "id": "worldwide-strategy-meeting-for-11059",
    "title": "Worldwide strategy meeting for growth",
    "description": "Let's find the best ethical growth hacking technics together. Yeah, fun.",
    "duration": 90,
    "status": 0
  }
}

Update a meeting

PUT /api/meetings/:id

Request

A json object for the meeting to update with id, acount_id and any of title, description, start_time, timezone, duration, status and password.

{
  "id": "worldwide-strategy-meeting-for-11059",
  "account_id": 5,
  "start_time": "2022-02-16 20:00:00",
  "timezone": "Europe/Brussels",
  "status": 1
}
Response

A json object for the updated meeting with id, title, description, start_time, timezone, duration and status.

{
  "status": 200,
  "data": {
    "id": "worldwide-strategy-meeting-for-11059",
    "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",
    "timezone": "Europe/Brussels",
    "duration: 90,
    "status": 1
  }
}

Delete a meeting

DELETE /api/meetings/:id

Request

A json object for the meeting to delete with id and account_id.

{
  "id": "worldwide-strategy-meeting-for-11059",
  "account_id": 5
}
Response

A json object for the deleted meeting with status code and message.

{
  "status": 200,
  "message": "Meeting '`meeting_title`' has been successfully deleted."
}

Get a list of all participants for a meeting

GET /api/meetings/:id/participants

Request

A json object with an account_id.

{
  "id": "worldwide-strategy-meeting-for-11059",
  "account_id": 5
}
Response

A json object for the specified meeting with an array of participant.

{
	"status": 200,
	"data": [{
			"id": 23,
			"account_id": 5,
			"meeting_id": "worldwide-strategy-meeting-for-11059",
			"earliest_time": "09:30 AM",
			"latest_time": "05:00 PM",
			"quorum": 1,
			"mandatory": 1,
			"host": 1,
			"answered": 1,
			"timezone": "Europe/Brussels"
		},
		{
			"id": 28,
			"account_id": 11,
			"meeting_id": "worldwide-strategy-meeting-for-11059",
			"earliest_time": "10:00 AM",
			"latest_time": "09:00 PM",
			"quorum": 0,
			"mandatory": 1,
			"host": 0,
			"answered": 1,
			"timezone": "Europe/Brussels"
		}
	]
}

Get a list of complete availibility for a meeting

GET /api/meetings/:id/availibility

Request

A json object with a meeting_id.

{
  "id": "worldwide-strategy-meeting-for-11059"
}
Response

A json object for the specified meeting with an array of participant.

{
	"status": 200,
	"data": {
		"meeting_id": "worldwide-strategy-meeting-for-11059",
		"availibility": [{
				"participant_id": 5,
				"possible_date_id": 21,
				"intervals": [{
						"preference": 0,
						"start_time": "2021-06-25 09:00:00",
						"end_time": "2021-06-25 13:00:00",
						"timezone": "Europe/Brussels"
					},
					{
						"preference": 1,
						"start_time": "2021-06-25 15:00:00",
						"end_time": "2021-06-25 20:00:00",
						"timezone": "Europe/Brussels"
					}]
			},
			{
				"participant_id": 56,
				"possible_date_id": 21,
				"intervals": [{
					"preference": 0,
					"start_time": "2021-06-25 08:00:00",
					"end_time": "2021-06-25 10:30:00",
					"timezone": "Europe/Brussels"
				}]
			}
    ]
	}
}

Possible Dates | possible_date

field data type metadata
id int primary key, auto-increment
meeting_id varchar foreign key, required
possible_date date foreign key, required

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": "worldwide-strategy-meeting-for-11059",
  "possible_date": "2020-02-18"
}
Response

A json object for the added meeting with id, meeting_id and possible_date.

{
  "status": 201,
  "data": {
    "id": 5,
    "meeting_id": "worldwide-strategy-meeting-for-11059",
    "possible_date": "2020-02-18"
  }
}

Delete a possible date

DELETE /api/possible-dates/:id

Request

A json object for the possible date to delete with id and account_id.

{
  "id": 12,
  "account_id": 5
}
Response

A json object for the deleted possible date with status code and message.

{
  "status": 200,
  "message": "Date '`possible_date`' has been successfully removed for the '`meeting_title`'."
}

Participants | participant

field data type metadata
account_id int primary key, auto-increment
meeting_id varchar required
earliest_time datetime
latest_time datetime
quorum boolean 0 (no) or 1 (yes)
mandatory boolean 0 (no) or 1 (yes)
host boolean 0 (no) or 1 (yes)
answered boolean 0 (no) or 1 (yes)
timezone varchar required
created_at datetime generated by database

Invite a participant

POST /api/participants

Request

A json object for the participant to add with account_id, meeting_id, earliest_time, latest_time, quorum, mandatory, host, answered and timezone.

{
  "account_id": 5,
  "meeting_id": "worldwide-strategy-meeting-for-11059",
  "earliest_time": "08:30 AM",
  "latest_time": "08:00 PM",
  "quorum": 0,
  "mandatory": 1,
  "host": 0,
  "answered": 0,
  "timezone": "Europe/Brussels"
}
Response

A json object for the participant with id, account_id, meeting_id, earliest_time, latest_time, quorum, mandatory, host, answered and timezone.

{
  "status": 201,
  "data": {
    "id": 23,
    "account_id": 5,
    "meeting_id": "worldwide-strategy-meeting-for-11059",
    "earliest_time": "08:30 AM",
    "latest_time": "08:00 PM",
    "quorum": 0,
    "mandatory": 1,
    "host": 0,
    "answered": 0,
    "timezone": "Europe/Brussels"
  }
}

Update a participant

PUT /api/participants/:id

Request

A json object for the participant to invite with id and any of id, earliest_time, latest_time, quorum, mandatory, host, answered and timezone.

{
  "account_id": 5,
  "earliest_time": "09:30 AM",
  "latest_time": "05:00 PM",
  "quorum": 1,
  "host": 1,
  "answered": 1,
}
Response

A json object for the participant with id, account_id, meeting_id, earliest_time, latest_time, quorum, mandatory, host, answered and timezone.

{
  "status": 200,
  "data": {
    "id": 23,
    "account_id": 5,
    "meeting_id": "worldwide-strategy-meeting-for-11059",
    "earliest_time": "09:30 AM",
    "latest_time": "05:00 PM",
    "quorum": 1,
    "mandatory": 1,
    "host": 1,
    "answered": 1,
    "timezone": "Europe/Brussels"
  }
}

Delete a participant

DELETE /api/participants/:id

Request

A json object for the participant to delete with id.

{
  "id": 23
}
Response

A json object for the deleted participant with status code and message.

{
  "status": 200,
  "message": "The '`participant_username`' has been successfully removed from the meeting '`meeting_title`'."
}

Availibility | availibility

field data type metadata
id int primary key, auto-increment
participant_id int foreign key, required
possible_date_id int foreign key, required
preference boolean 0 (ideal) or 1 (yes), required
start_time timestamp required
end_time timestamp required
timezone varchar required
created_at datetime generated by database

GET / DELETE / UPDATE

Add an availibility for a possible date

POST /api/availibility

Request

A json object with the availibility to add with participant_id, possible_date_id and an array of intervals with preference, start_time, end_time and timezone.

{
	"participant_id": 5,
	"possible_date_id": 21,
	"intervals": [{
			"preference": 0,
			"start_time": "2021-06-25 09:00:00",
			"end_time": "2021-06-25 13:00:00",
			"timezone": "Europe/Brussels"
		},
		{
			"preference": 1,
			"start_time": "2021-06-25 15:00:00",
			"end_time": "2021-06-25 20:00:00",
			"timezone": "Europe/Brussels"
		}
	]
}

Response

A json object with the availibility to add with participant_id, possible_date_id and an array of intervals with id, preference, start_time, end_time and timezone.

{
	"status": 201,
	"data": {
		"participant_id": 5,
		"possible_date_id": 21,
		"intervals": [{
				"id": 45,
				"preference": 0,
				"start_time": "2021-06-25 09:00:00",
				"end_time": "2021-06-25 20:00:00",
				"timezone": "Europe/Brussels"
			},
			{
				"id": 46,
				"preference": 1,
				"start_time": "2021-06-25 09:00:00",
				"end_time": "2021-06-25 20:00:00",
				"timezone": "Europe/Brussels"
			}
		]
	}
}

Delete availibility for a possible date

DELETE /api/availibility/:id

Request

A json object for the availibility to delete with participant_id and possible_date_id.

{
  "participant_id": 5,
	"possible_date_id": 21
}
Response

A json object for the deleted availibility with status code and message.

{
  "status": 200,
  "message": "Availibility successfully deleted for `participant_username` on `possible_date`"
}