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, который необходимо использовать для хранения данных.
|
||||
|
||||
Приложение должно конфигурироваться через переменные окружения:
|
||||
Приложение конфигурируется через переменные окружения:
|
||||
|
||||
- `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).
|
||||
Пример: `user=postgres password=postgres host=localhost port=5432 dbname=pulse sslmode=verify-ca pool_max_conns=10`.
|
||||
- `POSTGRES_CONN` — URL-строка для подключения к PostgreSQL в формате `postgres://{username}:{password}@{host}:{5432}/{dbname}`.
|
||||
|
||||
- `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 контейнером, docker-compose определить не получится.
|
||||
|
||||
Список используемых зависимостей не ограничен, однако вы должны убедиться, что необходимые зависимости загружаются и подключаются в Dockerfile.
|
||||
**Список используемых зависимостей (и фреймворков) не ограничен** (любая версия языка программирования, без ограничений на библиотеки), однако вы должны убедиться, что необходимые зависимости загружаются и подключаются в Dockerfile. Вы сами в праве выбирать стек вашего приложения, от вас зависит успех всего проекта!
|
||||
|
||||
Описание API находится ниже, но если вы хотите ознакомиться с точными требованиями, не стесняйтесь использовать Swagger и предоставленную [Open API спецификацию](./tests/openapi.yml).
|
||||
|
||||
Тестирование решения происходит с помощью 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
|
||||
|
||||
@@ -126,7 +142,7 @@ INSERT INTO countries (name, alpha2, alpha3, region) VALUES
|
||||
|
||||
Данный токен в дальнейшем будет передаваться пользователем в заголовке `Authorization: Bearer {token}`, и приложение должно уметь понять, какой пользователь хочет сделать запрос.
|
||||
|
||||
Временно будем считать, что время действия токена ограничено одним часом.
|
||||
Временно будем считать, что время действия токена (TTL) должно составлять от 1 до 24 часов (на усмотрение разработчика).
|
||||
|
||||
### 05/me
|
||||
|
||||
@@ -150,14 +166,14 @@ INSERT INTO countries (name, alpha2, alpha3, region) VALUES
|
||||
|
||||
- Аутентификация со старым паролем становится невозможной.
|
||||
|
||||
- Все ранее выпущенные токены должны быть отозваны.
|
||||
- Все ранее выпущенные токены должны быть отозваны. Использование старых токенов становится равнозначным использованию некорректных токенов.
|
||||
|
||||
После успешной смены пароля при попытке получить свой профиль со старым токеном пользователь должен получать ошибку.
|
||||
|
||||
### 08/friends
|
||||
|
||||
В приложении появляется возможность добавлять и удалять других пользователей в друзья.
|
||||
И конечно же можно посмотреть список своих друзейЙ
|
||||
В приложении появляется возможность добавлять и удалять других пользователей из списка своих друзей.
|
||||
И конечно же можно посмотреть список своих друзей.
|
||||
|
||||
Чтобы не нагружать сервера и клиенты слишком сильно, в запросах на получение списка друзей используется пагинация.
|
||||
С помощью параметров `offset` и `limit` можно "постранично" получить весь список друзей, запрашивая данные порционно.
|
||||
@@ -167,6 +183,9 @@ INSERT INTO countries (name, alpha2, alpha3, region) VALUES
|
||||
### 09/posts/publish
|
||||
|
||||
В данной группе проверяется возможность создавать публикации со стороны пользователей.
|
||||
Затрагиваемые эндпоинты:
|
||||
- `/posts/new`
|
||||
- `/posts/{postId}`
|
||||
|
||||
Сервер должен генерировать уникальные идентификаторы и запоминать время создания публикаций.
|
||||
|
||||
@@ -176,7 +195,9 @@ INSERT INTO countries (name, alpha2, alpha3, region) VALUES
|
||||
|
||||
### 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
|
||||
|
||||
@@ -202,6 +224,8 @@ INSERT INTO countries (name, alpha2, alpha3, region) VALUES
|
||||
- Запуск тестов. Для каждой группы тестов
|
||||
- запускаются Docker контейнеры с вашим приложением и PostgreSQL;
|
||||
|
||||
- тестирующая система применяет нужные миграции к запущенному PostgreSQL;
|
||||
|
||||
- тестирующая система дожидается успешного (`200`) ответа на `GET /api/ping`, на это дается не более 10 секунд;
|
||||
|
||||
- приложение считается запущенным и начинается запуск HTTP тестов из тестируемой группы.
|
||||
@@ -235,4 +259,12 @@ 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
|
||||
version: "1.0"
|
||||
servers:
|
||||
- url: http://localhost:8080/v1/api
|
||||
- url: http://localhost:8080/api
|
||||
paths:
|
||||
/ping:
|
||||
get:
|
||||
|
||||
Reference in New Issue
Block a user