module
0.0.0-20240417155756-9ba641757bdc
Repository: https://github.com/alladan04/avito_test.git
Documentation: pkg.go.dev
# README
Инструкция по запуску приложения
- Убедитесь, что порты 6379 и 5432 ничем не заняты. Если заняты - освободить.
- В корне проекта создайте файл .env, пример содержания:
POSTGRES_USER = postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=testdb
REDIS_PASSWORD=1111
DATABASE_URL=postgres://postgres:postgres@postgres:5432/testdb
REDIS_URL=redis://default:1111@redis:6379/0?protocol=3
JWT_USER_SECRET=134
JWT_ADMIN_SECRET=5432
3. Из корня проекта выполните команду
make -f MakeFile start чтобы запустить контейнеры
4. Сервис будет запущен на порту 8080
5. По завершении работы с сервисом выполните команду
make -f MakeFile stop чтобы остановить контейнеры
Инструкция по запуску теста (сложно назвать это полноценным тестом, скорее набросок)
- Убедитесь, что порты 6379 и 5432 ничем не заняты. Если заняты - освободить.
- В корне проекта создайте файл .env, пример содержания:
POSTGRES_USER = postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=testdb
REDIS_PASSWORD=1111
TEST_DB = postgres://postgres:postgres@postgres:5432/testdb
TEST_REDIS = redis://default:1111@redis:6379/0?protocol=31
3. Из корня проекта выполните команду
make -f MakeFile test
Вопросы
Вопросов было много, но зафиксировала лишь малую часть, например:
- Писать ли авторизацию? В сваггере эндпоинтов для логина и прочих пользовательских действий не обозначено, но решила все равно их сделать. В зависимости от переданного при регистрации флага в теле запроса пользователь может быть зарегистрирован в качестве админа или просто пользователя.
- Что делать, если при добавлении баннера тега или фичи не существует. Будем полагать, что тэги и фичи - некоторое заранее определенное множество значений, которое не меняется при работе с баннерами.
- Как реализовать кеширование? Решила использовать redis, так как знакома с ним, это показалось оптимальным решением.
TODO
- Сделать более точную обработку ошибок
- Сделать нормальные тесты
- Сделать валидацию полей при дообавлении/изменении заметки
- Убрать ID юзера в некоторых местах
- Сделать логирование
- Сделать конфиг
- Метрики
Что выполнено:
- Работает кеширование ответов с использованием редис
- Рабочий конфиг для запуска приложения в докере
- Реализовано регулирование доступа к ресурсам с использованием двух типов токенов: админского и пользовательского
- Написан небольшой пример интеграционного теста, который можно запустить в контейнере
- Реализовано АПИ, указанное в задании
- Написана конфигурация запуска линтеров