import {Procedures, TPaginatedQuery, createTPaginatedQuery} from '@orion-js/trpc'
import {Inject} from '@orion-js/services'
import {UsersRepo} from 'app/users/repos/UsersRepo'
@Procedures()
export class UserProcedures {
@Inject(() => UsersRepo)
private usersRepo: UsersRepo
@TPaginatedQuery()
listUsers = createTPaginatedQuery({
params: {
search: {type: String, optional: true},
},
allowedSorts: ['name', 'createdAt'],
defaultSortBy: 'createdAt',
defaultSortType: 'desc',
getItems: async ({skip, limit, sort}, {search}, viewer) => {
const query = search ? {name: {$regex: search, $options: 'i'}} : {}
return this.usersRepo.find(query).skip(skip).limit(limit).sort(sort).toArray()
},
getCount: async ({search}, viewer) => {
const query = search ? {name: {$regex: search, $options: 'i'}} : {}
return this.usersRepo.countDocuments(query)
},
})
}