import { Injectable } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; import { Types, Model } from 'mongoose'; import { User, UserDocument } from '@/models/user.model'; import { CreateUserInput } from './dto/create-user.input'; @Injectable() export class UsersService { constructor( @InjectModel(User.name) private readonly userModel: Model ) { } async findAll(projection?: any): Promise { return this.userModel.find({}, projection, { lean: false }).populate({ path: 'person', select: projection?.person }).exec(); } async findById(id: Types.ObjectId, projection?: any): Promise { return this.userModel.findById(id, projection, { lean: false }).populate({ path: 'person', select: projection?.person }).exec(); } async create(input: CreateUserInput): Promise { const user = new this.userModel(input); return user.save(); } buildProjection(fields: Record): any { const projection: any = {}; for (const key in fields) { if (key === 'person' && typeof fields[key] === 'object') { for (const subField of Object.keys(fields[key])) { projection[`person.${subField}`] = 1 } } else { projection[key] = 1 } } return projection; } }