Skip to content

Instantly share code, notes, and snippets.

@galkin
Created February 27, 2018 06:23
Show Gist options
  • Save galkin/5dfdf151a1dd11a7288756a0505e48d4 to your computer and use it in GitHub Desktop.
Save galkin/5dfdf151a1dd11a7288756a0505e48d4 to your computer and use it in GitHub Desktop.
Feedback Yuri Predborskiy

Highlevel

REST API

  • Endpoints. Реализованы все кроме put. File-storage завязан на имена файлов, а не на asset id.
  • Payloads. Реализованы не правильно. Структура payload-а имеет status для определения успешности операции. Для этого используют http коды. Asset size не передается.
  • Headers. Не реализованы. Заявленный в контракте Location отсутвует.

Streaming

  • Read. Реализовано.
  • Write. Реализовано через временую дирректорию с использованием koa-body вместо стриминга сразу в FileStorage.

Asset meta storage

  • Выбран Postgres и knex.
  • Миграции реализованы.
  • Структура данных для хранения asset реализована не правильно. Отсутвует size и contentType, но есть filename.
  • После разрывы соединение с базой данных не востанавливается.

File storage

  • Выбрана локальная файловая система. Ни какой обертке для перехода на другой вариант (S3/remote file system/etc) не реализовано.
  • Asset хранятся не под uuid, а под именем файла переданным при его загрузке.

Best practises

  • Logging реализован с помощью console.log. Абстракции или winston/bunyan нет.
  • Error handling реализован лишь как перехватчик ошибок в контроллерах. Присутвуют явно ошибочные комментарии, видимо копипаста.
  • Gracefull shatdown не реализован.
  • Tests. Написаны с использованием DB seeds. Что хорошо. Содержат много излишних комментариев. Использован chai вместо более простого supertest. Зачем-то копи-паст примеров из интернета.
  • Linting. Используется с eslint:recommended. Папка test игнорируется?!
  • Configuration. Реализован через dotenv. Примеры для локальной разработки отсутвуют.

Code

Read documentation

const router = new Router();
const BASE_URL = '/api/v0/assets';
...
router.get(BASE_URL, async (ctx) => {
...

Проще же

const router = new Router({prefix: '/api/v0/assets'});

exports VS module.exports

Экспорт в любом месте файла с любой нотацией. А консистентость кода? Еще и последня строка то есть то нету.

package.json

scripts

"test": "node ./node_modules/mocha/bin/_mocha" => "test": "mocha"

files

После создания артефакта файл knex.js используемый для коннекта к базе данных будет потерян.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment