Skip to content

Сервис баннеров для управления пользовательским контентом

Notifications You must be signed in to change notification settings

JustForWorld/banner-shift

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

76 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Запус сервиса

1. Локальный запуск

1.1 Если необходимо запустить сервис с пользователем авторизованным как администратор, тогда в директории с проектом запустите команду:

make banner-admin-build

1.2 Если необходимо запустить сервис с авторизованным обычным пользователем, тогда в директории с проектом запустите команду:

make banner-user-build

Так же реализована проверка получения информации о баннере (пара полей - фича и тег) и принадлежности пользователя к тегу (ограничение просмотра). При необхомости можно поменять у пользователя тег в файле user.yaml (./config/mock/user.yaml)


1.3 Для получения JWT токен (каждый раз создается новый) необходимо в логах сервиса после сообщения starting banner-shift и до сообщения starting server найти и сохранить значение для дальнейшего использования в http запросах.

Пример JWT токена в логах сервиса:

level=DEBUG msg="current jwt token" jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYWRtaW4iLCJ0YWciOjUsInVzZXJuYW1lIjoibi5uZXNtZXlhbm92YSJ9.ZHR4E2PlZhc1xeApNJGVtw7CV0zUxDm7B9tOfZs0vD4

1.4 Перейдите в postgres контейнер с помощью команды:

sudo docker exec -it postgres psql -U postgres -d postgres

1.5 Из директории ./scripts скопируйте из файла init.sql код (или из сниппета ниже) и добавьте в psql для добавления значений по умолчанию в таблицы tag и feature:

DO $$
DECLARE
    i INT := 1;
BEGIN
    WHILE i <= 10 LOOP
        INSERT INTO feature DEFAULT VALUES;
        INSERT INTO tag DEFAULT VALUES;
        i := i + 1;
    END LOOP;
END $$;

2. Docker-compose

Убедитесь, что у вас не подняты контейнеры redis и postgresql после локальной сборки!

2.1 Запуск просиходит администратора, если необходимо запустить от пользователя поменяйте в Dockerfile:

  • CMD ["/banner-shift", "--config", "./config/docker.yaml", "--user", "./config/mock/admin.yaml"]
  • CMD ["/banner-shift", "--config", "./config/docker.yaml", "--user", "./config/mock/user.yaml"]

2.2 Запустить сервис с помощью команды и дождитесь когда контейнер banner-shift будет доступен:

sudo docker compose up --build -d

2.3 Для получения JWT токена пользовател зайдите в логи контейнера banner-shift с помощью команды:

sudo docker logs -f banner-shift

2.4 Перейдите в postgres контейнер с помощью команды:

sudo docker exec -it postgres psql -U postgres -d postgres

2.5 Из директории ./scripts скопируйте из файла init.sql код (или из сниппета ниже) и добавьте в psql для добавления значений по умолчанию в таблицы tag и feature:

DO $$
DECLARE
    i INT := 1;
BEGIN
    WHILE i <= 10 LOOP
        INSERT INTO feature DEFAULT VALUES;
        INSERT INTO tag DEFAULT VALUES;
        i := i + 1;
    END LOOP;
END $$;

2.6 Остановить работу сервиса можно с помощью команды:

sudo docker compose down

Работа с сервисом

1. Curl

1.1 GET /user_banner — получение баннера для пользователя:

curl -X GET "http://localhost:8080/user_banner?tag_id=7&feature_id=1&use_last_revision=true" \
-H "Authorization: Bearer {ВАШ_ТОКЕН_УБРАТЬ_CURLE_СКОБКИ}" 

1.2 GET /banner — получение всех баннеров c фильтрацией по фиче и/или тегу:

curl -X GET "http://localhost:8080/banner?feature_id=1&tag_id=7&limit=10&offset=10" \
-H "Authorization: Bearer {ВАШ_ТОКЕН_УБРАТЬ_CURLE_СКОБКИ}" 

1.3 POST /banner — создание нового баннера:

curl -X POST http://localhost:8080/banner \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ВАШ_ТОКЕН_УБРАТЬ_CURLE_СКОБКИ}" \
-d '{
    "tag_ids": [5, 6, 8],
    "feature_id": 2,
    "content": {
        "title": "some_title",
        "text": "some_text",
        "url": "some_url"
    },
    "is_active": true
}'

1.4 PATCH /banner/{id} — обновление содержимого баннера:

curl -X PATCH 'http://localhost:8080/banner/1' \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer {ВАШ_ТОКЕН_УБРАТЬ_CURLE_СКОБКИ}" \
-d '{
    "tag_ids": [6, 8, 9],
    "feature_id": 2,
    "content": {
        "title": "some_title7",
        "text": "some_text7",
        "url": "some_url7"
    },
    "is_active": false
}'

1.5 DELETE /banner/{id} — удаление баннера по идентификатору::

curl -X DELETE "http://localhost:8080/banner/1" \
-H "Authorization: Bearer {ВАШ_ТОКЕН_УБРАТЬ_CURLE_СКОБКИ}"

2. Ход решения

Все возникшие проблемы (а лучше сказать задачи) и их решения описаны в каждом pull request:

About

Сервис баннеров для управления пользовательским контентом

Resources

Stars

Watchers

Forks

Packages

No packages published