import { Injectable } from "@nestjs/common"; import { InjectModel } from "@nestjs/mongoose"; import { FilterQuery, Model, Types } from "mongoose"; import { FileMakerModel } from "../schema/file-maker.schema"; @Injectable() export class FileMakerDbService { constructor( @InjectModel(FileMakerModel.name) private readonly fileMakerModel: Model, ) {} async create( user: Partial & { password: string }, ): Promise { return await this.fileMakerModel.create(user); } async findOne( filter: FilterQuery, ): Promise { return await this.fileMakerModel.findOne(filter); } async findByLoginIdentifier( identifier: string, ): Promise { const id = identifier.trim(); const or: FilterQuery[] = [ { email: id }, { username: id }, ]; if (/^\d{10}$/.test(id)) { or.push({ nationalCode: id }); } return await this.fileMakerModel.findOne({ $or: or }); } async findById(userId: string): Promise { return await this.fileMakerModel.findOne({ _id: new Types.ObjectId(userId), }); } async findOneAndUpdate( filter: FilterQuery, update: FilterQuery, ) { return await this.fileMakerModel.findOneAndUpdate(filter, update, { new: true, }); } async findAll( filter: FilterQuery, ): Promise<(FileMakerModel & { _id: Types.ObjectId })[]> { return await this.fileMakerModel.find(filter).lean(); } async updateOne(filter: FilterQuery, update: any) { return this.fileMakerModel.updateOne(filter, update); } }