softpro-junior-assignment

command module
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Aug 18, 2020 License: MIT Imports: 19 Imported by: 0

README

softpro-junior-assignment

Деплой руками (как только разберусь до конца с Docker + CI обязательно пофиксю это):

  1. Скомпилируйте приложение с помощью инструмента go.
  2. Установите PostgreSQL Server и создайте базу данных с именем "sja_dev" или с вашим кастомным именем, но нужно чтоб оно было таким же, как и в конфиге, про который будет рассказано далее.
  3. Составьте конфиг приложения и положите его рядом с исполняемым файлом. Этот шаг можно пропустить, тогда приложение запустится с дефолтной конфигурацией.
  4. Один раз запустите приложение с флагом -setschema, это создаст таблицы в базе данных (но уничтожит существующие данные!).
  5. Приложение готово к работе. Также у приложения есть еще один флаг: -prod. Этот флаг не позволяет запустить приложение без конфига. Также если предоставлен этот флаг, то флаг -setschema будет проигнорирован.
    Еще можно запустить приложение с флагом -help который выведет сводную информацию по имеющимся у приложения флагам.
  6. Для корректного останова сервиса нажмите enter (это завершит воркеры и закроет соединение с db).

Конфиг

Если конфиг не предоставлен (файл .config), то приложение запустится с дефолтной конфигурацией, указанной ниже. Конфиг должен находится в той же папке, что и исполняемый файл. Данные в нем указываются в формате JSON.
Пример конфигурационного файла с настройками по умолчанию:

{
"http_port": 9000,
"http_ip": "localhost",
"grpc_port": 9001,
"grpc_ip": "localhost",
"lines_provider_port": 8000,
"lines_provider_ip": "localhost",
"log_mode": false, // если включено, то будет производиться логирование запросов к бд в файл log.log рядом с исполняемым файлом
"first_sync_num_of_attempts": 3, // кол-во попыток подключения к LinesProvider
"first_sync_interval_bw_attempts": 1, // интервал м/д попытками в секундах
"intervals": {
"baseball": 1,
"football": 1,
"soccer": 1
},
"database": {
"host": "localhost",
"port": 5432,
"user": "postgres",
"password": "123",
"name": "sja_dev"
}
}

О реализации:

  • Прошу прежде всего заметить, что в силу того, что мне выдали задание на неделю позже, я успел разобраться только с gRPC+protobufs, но не с Docker-ом и CI, поэтому высылаю то, что есть, а именно: полностью реализованный в соответствии с требованиями задания сервис.
  • Не знаю, как организовывать правильно код в MVC паттерне с gRPC и вообще, подходит ли он здесь, поэтому никакой паттерн не использовал, только разбиение на исходники.
  • Если логирование отключено (параметр "log_mode" в конфиге), то будут только ошибки от db в stdout логироваться + любые сообщения (включая ошибки) от приложения.
  • По ходу реализации возникало множество вопросов, некоторые неразрешенные из них остались в виде "todo" в коде.
  • В директории /client располагается тестовый gRPC клиент. Все остальные файлы и директории относятся к gRPC серверу.
  • protobuf определения сервиса и сообщений находятся в /pb/softpro-junior-assignment.proto

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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