Update protected files

This commit is contained in:
cu-workflow-launcher[bot]
2024-02-27 20:42:24 +00:00
committed by GitHub
parent 5b632f903b
commit b97672d07c
2 changed files with 48 additions and 16 deletions
+46 -14
View File
@@ -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
View File
@@ -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: