Time Tracker
Описание
Тестовое задание. Сервис для отслеживания времени, потраченного на выполнение задачи.
Используемые технологии
- Go (1.22.4)
- Postgres v14
- Make - для автоматизации управления проектом
- Docker и Docker compose - как основное средство запуска проекта
- Migrate v4 - для миграций базы данных
- Swag - для генерации swagger/openapi документации
- Ogen - для генерации swagger/openapi клиента
- JS и Express - для тестового сервиса по получению информации о пользователях
Конфигурация
Основное
- Основной способ настройки приложения Env Vars
- Есть только два флага командной строки:
-cfg
(опционально) - путь до файла конфигурации (по умолчанию пустая строка)
-prettyLog
(опционально) - отформатированные логи (по умолчанию false
)
true
при локальном запуске
false
при stage (docker) запуске
- Есть три файлы конфигурации:
.env
- для stage (docker) запуска
.local.env
- для локального запуска
.debug.env
- для отладки
Переменные окружения
-
Основные переменные окружения:
HTTP_HOST
- адрес хоста (по умолчанию localhost
или 0.0.0.0
, но есть некоторые проблемы с указанием хоста в docker из-под WSL)
HTTP_PORT
- порт (по умолчанию 8080
)
*
DB_DSN
- строка подключения к базе данных, без указыния протокола (<user>:<password>@<host>:<port>/<db>?<options>
)
DB_AUTOMIGRATE
- автоматическая миграция базы данных (по умолчанию true
)
*
PEOPLE_SERVICE_URL
- URL сервиса для получения информации о пользователях
-
В файлах конфигурации можно найти дополнительные переменные, но они используются, либо для удобства, либо конфигурации других служб, к примеру docker compose
-
*
- обязательная переменная
Запуск
Клонирование
git clone https://github.com/protomem/time-tracker.git
cd time-tracker
Docker и Docker compose(рекомендуется)
- Настройки по умолчанию
- Приложение доступно по
localhost:8080
или 0.0.0.0:8080
- База данных доступна по
localhost:5432
- Mock People Service доступен по
localhost:8081
- Логи в формате JSON
- Автоматическая миграция
make run/stage
# или
docker compose up -d
# для остановки
make stop/stage
# или
docker compose down
Локальный запуск(для разработки)
- Запускает только приложение по адресу
localhost:8080
или 0.0.0.0:8080
make run/local
# or (live reload)
make run/local/live
Отдельные сервисы
- Запуск базы данных в контейнере:
make run/stage/db
- Запуск mock-people-service в контейнере:
make run/stage/mock-people-service
- Запуск mock-people-service в локальном режиме:
make run/local/mock-people-service
Миграции
- По умолчанию, включена автоматическая миграция. Но можно запустить (или откатить) ее вручную:
DB_DSN="<db_dsn>" make migrations/up # запустить миграции
DB_DSN="<db_dsn>" make migrations/down # откатить миграции
- Ести и другие команды для миграции:
DB_DSN="<db_dsn>" make migrations/new name=<name> # создать новую миграцию
DB_DSN="<db_dsn>" make migrations/goto version=<version> # перейти на версию миграции
DB_DSN="<db_dsn>" make migrations/force version=<version> # применить миграцию версии
Mock People Service
Простая реализация Swagger/OpenAPI спецификации c использованием JS и Express и предназначенная для тестирования приложения.
- Данные о пользователях хранятся в файле
db.js
, в виде массива объектов components.schemas.People
.
- Имеет одну переменную окружения:
PORT
- порт, по умолчанию 3000
, но все скрипты настроены на 8081
.
Endpoints
/
или /swagger/
- Swagger UI
/api/v1
/status
- статус сервиса
/users
GET /
- получение всех пользователей
GET /{userId}/stats
- трудозатраты пользователя
POST /
- добавление пользователя
PUT /{userId}
- обновление пользователя
DELETE /{userId}
- удаление пользователя
/sessions
GET /{userId}
- получение всех cессий пользователя
POST /{userId}/{taskId}
- старт сессии
DELETE /{userId}/{taskId}
- завершение сессии
Примечания
- Для указания периода используйте формат
<год>-<месяц>-<день> <часы>:<минуты>
- Пример: 2024-06-02 08:03 или 2006-07-25 17:00