46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
import { Injectable } from '@nestjs/common'
|
|
import { Args, Context, Int, Query } from '@nestjs/graphql'
|
|
import { Roles } from '../../decorator/roles.decorator'
|
|
import { User } from '../../decorator/user.decorator'
|
|
import { FormModel } from '../../dto/form/form.model'
|
|
import { FormPagerModel } from '../../dto/form/form.pager.model'
|
|
import { FormEntity } from '../../entity/form.entity'
|
|
import { UserEntity } from '../../entity/user.entity'
|
|
import { FormService } from '../../service/form/form.service'
|
|
import { IdService } from '../../service/id.service'
|
|
import { ContextCache } from '../context.cache'
|
|
|
|
@Injectable()
|
|
export class FormListQuery {
|
|
constructor(
|
|
private readonly formService: FormService,
|
|
private readonly idService: IdService,
|
|
) {
|
|
}
|
|
|
|
@Query(() => FormPagerModel)
|
|
@Roles('user')
|
|
async listForms(
|
|
@User() user: UserEntity,
|
|
@Args('start', {type: () => Int, defaultValue: 0, nullable: true}) start: number,
|
|
@Args('limit', {type: () => Int, defaultValue: 50, nullable: true}) limit: number,
|
|
@Context('cache') cache: ContextCache,
|
|
): Promise<FormPagerModel> {
|
|
const [forms, total] = await this.formService.find(
|
|
start,
|
|
limit,
|
|
{},
|
|
user.roles.includes('superuser') ? null : user,
|
|
)
|
|
|
|
forms.forEach(form => cache.add(cache.getCacheKey(FormEntity.name, form.id), form))
|
|
|
|
return new FormPagerModel(
|
|
forms.map(form => new FormModel(this.idService.encode(form.id), form)),
|
|
total,
|
|
limit,
|
|
start,
|
|
)
|
|
}
|
|
}
|