time-tracker

module
v0.0.0-...-44a2381 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 18, 2024 License: MIT

README

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

Directories

Path Synopsis
cmd
Package docs Code generated by swaggo/swag.
Package docs Code generated by swaggo/swag.
internal
env
external_api/people_service
Code generated by ogen, DO NOT EDIT.
Code generated by ogen, DO NOT EDIT.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL