Доброго времени суток! В связи с болезнью, начало работы над проектом было перенесено на среду. Ниже представлены ключевые детали проекта, включая инструкции по запуску, использованные технологии и структуру проекта.
Для запуска проекта используйте команду:
make dc
Токен можно получить, отправив GET-запрос на один из следующих эндпойнтов:
- Для получения токена администратора:
http://localhost:8080/user_token?isAdmin=true
- Для получения обычного токена:
Явное указание пользователя как не админа:
http://localhost:8080/user_token?isAdmin=false
Без указания статуса администратора:
http://localhost:8080/user_token
Несмотря на то, что в исходных требованиях было указано делать параметры tag_id и future_id обязательными, я решил сделать обязательным наличие хотя бы одного из этих полей в запросах. Я так решил, потому-что мне показалось это более логично и удобнее, предоставляя гибкость в выборе параметров фильтрации данных.
Команда запустит необходимые сервисы через docker-compose, описанные в файле docker-compose.yml.
Тестирование производительности сервиса проведено с использованием инструмента k6. Настройки тестирования включали 95% запросов на чтение и 5% на запись. Сценарий тестирования расположен в файле:
tests/k6/read_and_random_write.js
Ниже представлены результаты тестирования:
В проекте использовался GitHub Copilot для генерации бойлерплейт кода.
- Язык программирования: Go
- База данных: PostgreSQL
- Основные библиотеки и фреймворки:
- Роутер: Fiber
- Кэширование: GoCache
- Логгирование: Slog
- Драйвер PostgreSQL: Pgx
В проекте использовался линтер golangci-lint и форматтер gofmt. Конфигурация линтера стандартная, которую предлагает golint для goland:
exportloopref
interfacer
staticcheck
govet
dupl
funlen
errorlint
gocritic
goconst
gocognit
ineffassign
bodyclose
gosec
maligned
revive
stylecheck
whitespace
goprintffuncname
gosimple
prealloc
gocyclo
Также использовал qodana от jetbrains для анализа кода.
В рамках текущего задания не были реализованы дополнительные задачи. Отсутствие попыток реализации дополнительных задач обусловлено ограниченным временем, вызванным задержкой начала работы над проектом.