- Endpoints. Реализованы все кроме put. File-storage завязан на имена файлов, а не на asset id.
- Payloads. Реализованы не правильно. Структура payload-а имеет
status
для определения успешности операции. Для этого используют http коды. Asset size не передается. - Headers. Не реализованы. Заявленный в контракте Location отсутвует.
- Read. Реализовано.
- Write. Реализовано через временую дирректорию с использованием koa-body вместо стриминга сразу в FileStorage.
- Выбран Postgres и knex.
- Миграции реализованы.
- Структура данных для хранения asset реализована не правильно. Отсутвует size и contentType, но есть filename.
- После разрывы соединение с базой данных не востанавливается.
- Выбрана локальная файловая система. Ни какой обертке для перехода на другой вариант (S3/remote file system/etc) не реализовано.
- Asset хранятся не под uuid, а под именем файла переданным при его загрузке.
- Logging реализован с помощью
console.log
. Абстракции или winston/bunyan нет. - Error handling реализован лишь как перехватчик ошибок в контроллерах. Присутвуют явно ошибочные комментарии, видимо копипаста.
- Gracefull shatdown не реализован.
- Tests. Написаны с использованием DB seeds. Что хорошо. Содержат много излишних комментариев. Использован chai вместо более простого supertest. Зачем-то копи-паст примеров из интернета.
- Linting. Используется с
eslint:recommended
. Папка test игнорируется?! - Configuration. Реализован через dotenv. Примеры для локальной разработки отсутвуют.
const router = new Router();
const BASE_URL = '/api/v0/assets';
...
router.get(BASE_URL, async (ctx) => {
...
Проще же
const router = new Router({prefix: '/api/v0/assets'});
Экспорт в любом месте файла с любой нотацией. А консистентость кода? Еще и последня строка то есть то нету.
"test": "node ./node_modules/mocha/bin/_mocha"
=> "test": "mocha"
После создания артефакта файл knex.js используемый для коннекта к базе данных будет потерян.