Skip to content

Latest commit

 

History

History
294 lines (248 loc) · 5.44 KB

specification.md

File metadata and controls

294 lines (248 loc) · 5.44 KB

API Specification

Для всех эндпоинтов кроме регистрации и входа нужен токен.

User

  • POST /user - добавить пользователя.

Request body:

{
	"email": "[email protected]",
	"name": "Фамилия Имя Отчество",
	"password": "deadinside69",
}

Response body:

{
	"id": 1,
	"token": "qwertyqwertyqwertyqwerty",
}
  • GET /user/{id} - получить информацию о пользователе.

Response body:

{
	"id": 1,
	"name": "Фамилия Имя Отчество",
	"email": "[email protected]",
	"groups": [
		{
			"id": 1,
			"name": "Преподаватели",
		},
		// ...
	],
}
  • POST /user/login - войти в аккаунт.

Request body:

{
	"email": "[email protected]",
	"password": "deadinside69",
}

Response body:

{
	"id": 1,
	"token": "qwertyqwertyqwertyqwerty",
}
  • PATCH /user - обновить информацию о пользователе.

Request body:

{
	"name": "Фамилия Имя Отчество",
	"email": "[email protected]",
	"password": "newPassword",
}
  • DELETE /user - удалить пользователя.

Pool

  • POST /pool - создать новый опрос.

Request body:

{
	"name": "Название опроса",
	"description": "Описание опроса",
	"group_id": 1,
	"is_anonymous": false,
	"options": [
		"Вариант 1",
		"Вариант 2",
		// ...
	],
	"open_for": 24,
}

Response body:

{
	"id": 1,
}
  • GET /pool - получить доступные голосования.

Response body:

[
	{
		"id": 1,
		"name": "Название опроса",
		"description": "Описание опроса",
		"user": {
			"id": 1,
			"email": "[email protected]",
			"name": "Фамилия Имя Отчество",
		},
		"is_anonymous": false,
		"options": [
			{"id": 1, "text": "Вариант 1", "count": 0},
			{"id": 2, "text": "Вариант 2", "count": 0},
		],
		"created_at": "2023-11-23T13:19:46Z",
		"expires_at": "2023-11-23T13:19:46Z",
	},
	// ...
]
  • GET /pool/{id} - получить информацию о голосовании.

Response body:

{
	"id": 1,
	"name": "Название опроса",
	"description": "Описание опроса",
	"user": {
		"id": 1,
		"email": "[email protected]",
		"name": "Фамилия Имя Отчество",
	},
	"is_anonymous": false,
	"options": [
		{"id": 1, "text": "Вариант 1", "count": 0},
		{"id": 2, "text": "Вариант 2", "count": 0},
		// ...
	],
	"created_at": "2023-11-23T13:19:46Z",
	"expires_at": "2023-11-23T13:19:46Z",
}
  • DELETE /pool/{id} - удалить голосование.

  • POST /pool/{id}/vote - проголосовать.

Request body:

{
	"id": 1,
}
  • DELETE /pool/{id}/vote - отменить голос.

  • GET /pool/{pool_id}/vote/{option_id} - получить пользователей, проголосовавших за вариант.

Response body:

[
	{
		"id": 1,
		"name": "Фамилия Имя Отчество",
		"email": "[email protected]",
	},
	// ...
]

Group

-- GET /group - получить все существующие группы.

Response body:

[
	{
		"id": 1,
		"name": "Преподаватели",
	},
	{
		"id": 2,
		"name": "Все пользователи",
	},
	{
		"id": 3,
		"name": "Группа 1",
	},
	// ...
]

-- POST /group - создать новую группу. Доступно только администраторам.

Request body:

{
	"name": "Группа 2",
}

Response body:

{
	"id": 4,
}

-- PATCH /group/{id} - изменить группу. Доступно только администраторам.

Request body:

{
	"name": "Группа 69",
}

-- DELETE /group/{id} - удалить группу. Доступно только администраторам.

-- GET /group/{id}/user - получить всех пользователей в группе.

Response body:

[
	{
		"id": 1,
		"name": "Фамилия Имя Отчество",
		"email": "[email protected]",
	},
	// ...
]

-- POST /group/{id}/user - добавить пользователя в группу. Доступно только администраторам.

Request body:

{
	"id": 1,
}

-- DELETE /group/{id}/user/{id} - удалить пользователя из группы. Доступно только администраторам.

Chat

  • POST /chat/{id} - отправить сообщение группе.

Request body:

{
	"text": "Текст сообщения",
}
  • GET /chat/{id}?count=25&offset=0 - получить последние сообщения группы.

Request body:

[
	{
		"text": "Текст сообщения",
		"user": {
			"id": 1,
			"email": "[email protected]",
			"name": "Фамилия Имя Отчество",
		},
		"created_at": "2023-11-23T13:19:46Z",
	},
	// ...
]
  • WS /chat/{id}/ws - подписаться на сообщения группы.

Message body:

{
	"text": "Текст сообщения",
	"user": {
		"id": 1,
		"email": "[email protected]",
		"name": "Фамилия Имя Отчество",
	},
	"created_at": "2023-11-23T13:19:46Z",
}