Update protected files
This commit is contained in:
committed by
GitHub
parent
5b632f903b
commit
b97672d07c
@@ -10,24 +10,38 @@
|
|||||||
|
|
||||||
Приложение должно представлять из себя HTTP сервер, реализующий необходимое [API](./tests/openapi.yml). В наследие от предыдущей команды вам достался инстанс PostgreSQL, который необходимо использовать для хранения данных.
|
Приложение должно представлять из себя HTTP сервер, реализующий необходимое [API](./tests/openapi.yml). В наследие от предыдущей команды вам достался инстанс PostgreSQL, который необходимо использовать для хранения данных.
|
||||||
|
|
||||||
Приложение должно конфигурироваться через переменные окружения:
|
Приложение конфигурируется через переменные окружения:
|
||||||
|
|
||||||
- `SERVER_ADDRESS` — хост и порт, которые будет _слушать_ запущенный HTTP сервер. Например, `0.0.0.0:8080`.
|
- `SERVER_ADDRESS` — хост и порт, которые будет _слушать_ запущенный HTTP сервер. Например, `0.0.0.0:8080`.
|
||||||
|
|
||||||
- `SERVER_PORT` — содержит порт; запущенный сервер должен слушать IP `0.0.0.0` и указанный порт. Используйте эту переменную, если вам не подошел формат данных в переменной `SERVER_ADDRESS` (переданный параметры равнозначны).
|
- `SERVER_PORT` — содержит порт; запущенный сервер должен слушать IP `0.0.0.0` и указанный порт. Используйте эту переменную, если вам не подошел формат данных в переменной `SERVER_ADDRESS` (переданные параметры равнозначны).
|
||||||
|
|
||||||
- `POSTGRES_CONN` — DSN- **или** URL-строка для подключения к PostgreSQL. С форматами можно ознакомиться [здесь](https://pkg.go.dev/github.com/jackc/pgx/v4/pgxpool@v4.11.0#ParseConfig).
|
- `POSTGRES_CONN` — URL-строка для подключения к PostgreSQL в формате `postgres://{username}:{password}@{host}:{5432}/{dbname}`.
|
||||||
Пример: `user=postgres password=postgres host=localhost port=5432 dbname=pulse sslmode=verify-ca pool_max_conns=10`.
|
|
||||||
|
- `POSTGRES_JDBC_URL` — JDBC-строка для подключения к PostgreSQL в формате `jdbc:postgresql://{host}:{port}/{dbname}`.
|
||||||
|
|
||||||
|
- `POSTGRES_USERNAME` — имя пользователя для подключения к PostgreSQL.
|
||||||
|
|
||||||
|
- `POSTGRES_PASSWORD` — пароль для подключения к PostgreSQL.
|
||||||
|
|
||||||
|
- `POSTGRES_HOST` — хост для подключения к PostgreSQL (например, `localhost`).
|
||||||
|
|
||||||
|
- `POSTGRES_PORT` — порт для подключения к PostgreSQL (например, `5432`).
|
||||||
|
|
||||||
|
- `POSTGRES_DATABASE` — имя базы данных PostgreSQL, с которой должно работать приложение.
|
||||||
|
|
||||||
|
Автор приложения сам выбирает, с какими из переменных окружения ему комфортно работать.
|
||||||
|
|
||||||
Учитывая современные реалии, приложение будет запускаться через Docker контейнер. В репозитории присутствует Dockerfile, с помощью которого будет собираться образ приложения.
|
Учитывая современные реалии, приложение будет запускаться через Docker контейнер. В репозитории присутствует Dockerfile, с помощью которого будет собираться образ приложения.
|
||||||
|
Так как приложение совсем небольшое, мы обойдемся одним Docker контейнером, docker-compose определить не получится.
|
||||||
|
|
||||||
Список используемых зависимостей не ограничен, однако вы должны убедиться, что необходимые зависимости загружаются и подключаются в Dockerfile.
|
**Список используемых зависимостей (и фреймворков) не ограничен** (любая версия языка программирования, без ограничений на библиотеки), однако вы должны убедиться, что необходимые зависимости загружаются и подключаются в Dockerfile. Вы сами в праве выбирать стек вашего приложения, от вас зависит успех всего проекта!
|
||||||
|
|
||||||
Описание API находится ниже, но если вы хотите ознакомиться с точными требованиями, не стесняйтесь использовать Swagger и предоставленную [Open API спецификацию](./tests/openapi.yml).
|
Описание API находится ниже, но если вы хотите ознакомиться с точными требованиями, не стесняйтесь использовать Swagger и предоставленную [Open API спецификацию](./tests/openapi.yml).
|
||||||
|
|
||||||
Тестирование решения происходит с помощью Github CI. Для отправки решения на тестирование необходимо обновить исходный код вашего репозитория на Github (git commit & git push).
|
Тестирование решения происходит с помощью Github CI. Для отправки решения на тестирование необходимо обновить исходный код вашего репозитория на Github (git commit & git push).
|
||||||
|
|
||||||
**Вы можете редактировать файлы в директории `solution`. Если в репозитории содержатся изменения в других файлах, решение не будет принято.**
|
**Вы можете редактировать файлы в директории `solution` (и `.gitignore` в корне). Если в репозитории содержатся изменения в других файлах, решение не будет принято.**
|
||||||
|
|
||||||
## Оценивание
|
## Оценивание
|
||||||
|
|
||||||
@@ -107,7 +121,9 @@ INSERT INTO countries (name, alpha2, alpha3, region) VALUES
|
|||||||
...;
|
...;
|
||||||
```
|
```
|
||||||
|
|
||||||
При тестировании в Github CI база данных уже будет содержать нужный набор данных. Обратите внимание, данные в публичном и закрытом наборе тестов могут отличаться.
|
При тестировании в Github CI база данных уже будет содержать нужный набор данных. Обратите внимание, данные в публичном и закрытом наборе тестов могут отличаться. **Приложение должно опираться на данные в СУБД, чтобы успешно пройти закрытые тесты.**
|
||||||
|
|
||||||
|
Приложение вправе менять содержимое СУБД. Если вам требуются дополнительные таблицы, создавайте их самостоятельно при старте приложения (не забудьте про `IF NOT EXISTS`).
|
||||||
|
|
||||||
### 03/auth/register
|
### 03/auth/register
|
||||||
|
|
||||||
@@ -126,7 +142,7 @@ INSERT INTO countries (name, alpha2, alpha3, region) VALUES
|
|||||||
|
|
||||||
Данный токен в дальнейшем будет передаваться пользователем в заголовке `Authorization: Bearer {token}`, и приложение должно уметь понять, какой пользователь хочет сделать запрос.
|
Данный токен в дальнейшем будет передаваться пользователем в заголовке `Authorization: Bearer {token}`, и приложение должно уметь понять, какой пользователь хочет сделать запрос.
|
||||||
|
|
||||||
Временно будем считать, что время действия токена ограничено одним часом.
|
Временно будем считать, что время действия токена (TTL) должно составлять от 1 до 24 часов (на усмотрение разработчика).
|
||||||
|
|
||||||
### 05/me
|
### 05/me
|
||||||
|
|
||||||
@@ -150,14 +166,14 @@ INSERT INTO countries (name, alpha2, alpha3, region) VALUES
|
|||||||
|
|
||||||
- Аутентификация со старым паролем становится невозможной.
|
- Аутентификация со старым паролем становится невозможной.
|
||||||
|
|
||||||
- Все ранее выпущенные токены должны быть отозваны.
|
- Все ранее выпущенные токены должны быть отозваны. Использование старых токенов становится равнозначным использованию некорректных токенов.
|
||||||
|
|
||||||
После успешной смены пароля при попытке получить свой профиль со старым токеном пользователь должен получать ошибку.
|
После успешной смены пароля при попытке получить свой профиль со старым токеном пользователь должен получать ошибку.
|
||||||
|
|
||||||
### 08/friends
|
### 08/friends
|
||||||
|
|
||||||
В приложении появляется возможность добавлять и удалять других пользователей в друзья.
|
В приложении появляется возможность добавлять и удалять других пользователей из списка своих друзей.
|
||||||
И конечно же можно посмотреть список своих друзейЙ
|
И конечно же можно посмотреть список своих друзей.
|
||||||
|
|
||||||
Чтобы не нагружать сервера и клиенты слишком сильно, в запросах на получение списка друзей используется пагинация.
|
Чтобы не нагружать сервера и клиенты слишком сильно, в запросах на получение списка друзей используется пагинация.
|
||||||
С помощью параметров `offset` и `limit` можно "постранично" получить весь список друзей, запрашивая данные порционно.
|
С помощью параметров `offset` и `limit` можно "постранично" получить весь список друзей, запрашивая данные порционно.
|
||||||
@@ -167,6 +183,9 @@ INSERT INTO countries (name, alpha2, alpha3, region) VALUES
|
|||||||
### 09/posts/publish
|
### 09/posts/publish
|
||||||
|
|
||||||
В данной группе проверяется возможность создавать публикации со стороны пользователей.
|
В данной группе проверяется возможность создавать публикации со стороны пользователей.
|
||||||
|
Затрагиваемые эндпоинты:
|
||||||
|
- `/posts/new`
|
||||||
|
- `/posts/{postId}`
|
||||||
|
|
||||||
Сервер должен генерировать уникальные идентификаторы и запоминать время создания публикаций.
|
Сервер должен генерировать уникальные идентификаторы и запоминать время создания публикаций.
|
||||||
|
|
||||||
@@ -176,7 +195,9 @@ INSERT INTO countries (name, alpha2, alpha3, region) VALUES
|
|||||||
|
|
||||||
### 10/posts/feed
|
### 10/posts/feed
|
||||||
|
|
||||||
У пользователей появилась возможность смотреть новостную ленту со своими и чужими постами. Вместе с пагинацией.
|
У пользователей появилась возможность смотреть новостную ленту со своими и чужими постами. Используя пагинацию :)
|
||||||
|
|
||||||
|
Появляются запросы на `/posts/feed/my` и `/posts/feed/{login}` (значение `my` не может являться логином).
|
||||||
|
|
||||||
В данной группе не проверяются поля с лайками и дизлайками.
|
В данной группе не проверяются поля с лайками и дизлайками.
|
||||||
|
|
||||||
@@ -185,12 +206,13 @@ INSERT INTO countries (name, alpha2, alpha3, region) VALUES
|
|||||||
Самое интересное: пользователи могут поставить лайк и дизлайк публикации, к которой у них есть доступ.
|
Самое интересное: пользователи могут поставить лайк и дизлайк публикации, к которой у них есть доступ.
|
||||||
|
|
||||||
Всегда запоминается последняя реакция пользователя. Если пользователь поставил лайк два раза подряд, эффект лайка остается.
|
Всегда запоминается последняя реакция пользователя. Если пользователь поставил лайк два раза подряд, эффект лайка остается.
|
||||||
|
Если пользователь поставил лайк, а потом дизлайк, остается реакция дизлайка.
|
||||||
|
|
||||||
В полях `likesCount` и `dislikesCount` необходимо отразить уникальное число лайков и дизлайков.`
|
В полях `likesCount` и `dislikesCount` необходимо отразить уникальное число лайков и дизлайков.
|
||||||
|
|
||||||
## Тестирование
|
## Тестирование
|
||||||
|
|
||||||
Для тестирования решения отразите ваши изменения в Github репозитории. Разрешено изменять только директорию `solution`, иначе тесты не будут запущены.
|
Для тестирования решения отразите ваши изменения в Github репозитории. Разрешено изменять только директорию `solution` и `.gitignore`, иначе тесты не будут запущены.
|
||||||
|
|
||||||
### Тестирование в CI
|
### Тестирование в CI
|
||||||
|
|
||||||
@@ -202,6 +224,8 @@ INSERT INTO countries (name, alpha2, alpha3, region) VALUES
|
|||||||
- Запуск тестов. Для каждой группы тестов
|
- Запуск тестов. Для каждой группы тестов
|
||||||
- запускаются Docker контейнеры с вашим приложением и PostgreSQL;
|
- запускаются Docker контейнеры с вашим приложением и PostgreSQL;
|
||||||
|
|
||||||
|
- тестирующая система применяет нужные миграции к запущенному PostgreSQL;
|
||||||
|
|
||||||
- тестирующая система дожидается успешного (`200`) ответа на `GET /api/ping`, на это дается не более 10 секунд;
|
- тестирующая система дожидается успешного (`200`) ответа на `GET /api/ping`, на это дается не более 10 секунд;
|
||||||
|
|
||||||
- приложение считается запущенным и начинается запуск HTTP тестов из тестируемой группы.
|
- приложение считается запущенным и начинается запуск HTTP тестов из тестируемой группы.
|
||||||
@@ -236,3 +260,11 @@ INSERT INTO countries (name, alpha2, alpha3, region) VALUES
|
|||||||
Ваших коллег ждала та же участь... Заказчики просили передать, что они будут стараться делать как можно меньше изменений.
|
Ваших коллег ждала та же участь... Заказчики просили передать, что они будут стараться делать как можно меньше изменений.
|
||||||
|
|
||||||
Но удача на нашей стороне! Коллеги будут фиксировать все правки в данном документе и вести ченджлог изменений.
|
Но удача на нашей стороне! Коллеги будут фиксировать все правки в данном документе и вести ченджлог изменений.
|
||||||
|
|
||||||
|
Не забывайте делать `git pull --rebase`, чтобы загрузить актуальные требования в локальную версию репозитория.
|
||||||
|
|
||||||
|
### 27.02.2023
|
||||||
|
|
||||||
|
Коллеги, привет! Ничего критичного... Уговорили нашего Devops-инженера расширить список переменных с информацией для подключения к PostgreSQL. Смотрите секцию с описанием ENV переменных. Надеемся, теперь станет проще!
|
||||||
|
|
||||||
|
Также подсветим, что приложение должно опираться на данные в СУБД, сохранить словарь в коде приложения не получится, так как список стран может меняться! Наши QA-специалисты любят проверять работу приложения в выдуманных странах...
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@ info:
|
|||||||
title: Pulse API
|
title: Pulse API
|
||||||
version: "1.0"
|
version: "1.0"
|
||||||
servers:
|
servers:
|
||||||
- url: http://localhost:8080/v1/api
|
- url: http://localhost:8080/api
|
||||||
paths:
|
paths:
|
||||||
/ping:
|
/ping:
|
||||||
get:
|
get:
|
||||||
|
|||||||
Reference in New Issue
Block a user