Обзор Проекта

Доброго времени суток! В связи с болезнью, начало работы над проектом было перенесено на среду. Ниже представлены ключевые детали проекта, включая инструкции по запуску, использованные технологии и структуру проекта.

Запуск проекта

Для запуска проекта используйте команду:

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

Ниже представлены результаты тестирования:

k6

Использованные инструменты

Нейросети

В проекте использовался 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 для анализа кода.

Пропущенные задания

В рамках текущего задания не были реализованы дополнительные задачи. Отсутствие попыток реализации дополнительных задач обусловлено ограниченным временем, вызванным задержкой начала работы над проектом.