enrollment
Реализация тестового задания.
Запуск и настройка
- Для запуска без выполнения миграций базы данных выполните команду
make run
.
- Для запуска с выполнением миграций базы данных выполните команду
make runm
.
- Для сборки приложения в файл server.out -
make
Конфигурирование приложения происходит через переменные окружения.
BIND_ADDR
- адрес, на котором будет запущено приложение (изначально стоит localhost:8080
)
POSTGRES_USER
- имя пользователя postgres (изначально postgres
)
POSTGRES_PASS
- пароль от пользователя postgres (изначально postgres
)
POSTGRES_PORT
- порт, на котором запущена база postgres (изначально 5432
)
POSTGRES_HOST
- адрес, на котором запущена база postgres (изначально localhost
)
POSTGRES_NAME
- имя базы данных postgres приложения (изначально postgres
)
Доступные эндпоинты.
Пользователю доступна swagger документация в папке docs данного репозитория, а так же
в самом приложении по адресу <адрес на котором запущено приложение>/swagger/index.html
Пользователю доступны следующие эндпоинты
- создание записей
POST /api/records
- получение записи по идентификатору
GET /api/records/{record_id}
- получение всех записей пользователя
GET /api/user/{user}/records
- получение всех записей в системе
GET /api/records
Создание записи
Хэндлер: POST /api/records
.
Создание записи производится по паре msg_type/user. Ограничений на данные поля нет.
Данный хэндлер принимает данные в форматах JSON/XML/form values.
Формат запроса:
POST /api/user/register HTTP/1.1
Content-Type: application/json
...
{
"msg_type": "<msg_type>",
"user": "<user>"
}
Возможные коды ответа:
201
- успешная обработка ответа
Формат ответа:
201 Created HTTP/1.1
Content-Type: application/json
...
{
"id": 123,
"msg_type": "post",
"user": "marlo",
"created_at": "2022-12-31T19:00:00.000000Z"
}
400
- неверный формат запроса
Получение записи по идентификатору
Хэндлер: GET /api/records/{id}
.
Получение происходит по идентификатору в URL.
Формат запроса:
GET /api/records/123 HTTP/1.1
Content-Length: 0
Возможные коды ответа:
200
- успешная обработка ответа.
Формат ответа:
200 OK HTTP/1.1
Content-Type: application/json
...
{
"id": 123,
"msg_type": "post",
"user": "marlo",
"created_at": "2022-12-31T19:00:00.000000Z"
}
500
- внутренняя ошибка сервера
Получение записи по пользователю
Хэндлер: GET /api/users/{user}/records
.
Получение происходит по идентификатору в URL. В ответе записи отсортированы от новых к старым.
Формат запроса:
GET /api/users/marlo/records HTTP/1.1
Content-Length: 0
Возможные коды ответа:
200
- успешная обработка ответа.
Формат ответа:
200 OK HTTP/1.1
Content-Type: application/json
...
{
"records_stored": 2,
"user": "marlo",
"records": [
{
"id": 2,
"msg_type": "post",
"created_at": "2023-07-14T19:30:00.000000Z"
},
{
"id": 1,
"msg_type": "get",
"created_at": "2023-07-14T19:00:00.000000Z"
}
]
}
500
- внутренняя ошибка сервера
Получение всех записей
Хэндлер: GET /api/records
.
В ответе записи отсортированы от новых к старым. В ответе также имеется информация по количеству записей и уникальных
пользователей в системе.
Формат запроса:
GET /api/records HTTP/1.1
Content-Length: 0
Возможные коды ответа:
200
- успешная обработка ответа.
Формат ответа:
200 OK HTTP/1.1
Content-Type: application/json
...
{
"records_stored": 3,
"users_registered": 2,
"users": {
"marlo": [
{
"id": 2,
"msg_type": "post",
"created_at": "2023-07-14T19:30:00.000000Z"
},
{
"id": 1,
"msg_type": "get",
"created_at": "2023-07-14T19:00:00.000000Z"
}
],
"user": [
{
"id": 3,
"msg_type": "other",
"created_at": "2023-07-14T19:40:00.000000Z"
}
]
}
}
500
- внутренняя ошибка сервера