Особенности
Декораторы
- me - Декоратор возвращает
jwt
пользователя - rels - Декоратор разбирает запрос и возвращает массив зависимостей, необходимый для передачи в
typeorm
RequestContext
В связи с особенностями реализации DI
и их несовместимостью, в typeorm
и nestjs
, в проекте используется cls-hooked
для сихранения контекста запроса и использования его в методах typeorm
. Пример такого использования - computed
поля моделей, чтобы пометить посты которые пользователь поставил лайк.
Для синхронизации контекста, приходится оборачивать в RequestContext все методы резолверов.
@UseGuards(GqlAuthGuard)
@Query(() => [UsersModel], { description: 'Возвращает пользователей' })
users(@Me() me: UsersModel, @Relations('users') rels: string[]): Promise<UsersModel[]> {
return RequestContext.session(me, async () => {
return this.usersService.findAll(rels);
});
}
Pretypeorm
В проекте создан pretypeorm
скрипт, который генерирует конфиг для typeorm
, в результате можно использовать команды cli
от typeorm
.
Так же в package.json
объявлены скрипты запуска:
- typeorm: "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js",
- typeorm:migration:generate: "npm run typeorm -- migration:generate -n",
- typeorm:migration:run: "npm run typeorm -- migration:run"