forked from Yara724/api
64 lines
1.7 KiB
TypeScript
64 lines
1.7 KiB
TypeScript
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<FileMakerModel>,
|
|
) {}
|
|
|
|
async create(
|
|
user: Partial<FileMakerModel> & { password: string },
|
|
): Promise<FileMakerModel> {
|
|
return await this.fileMakerModel.create(user);
|
|
}
|
|
|
|
async findOne(
|
|
filter: FilterQuery<FileMakerModel>,
|
|
): Promise<FileMakerModel | null> {
|
|
return await this.fileMakerModel.findOne(filter);
|
|
}
|
|
|
|
async findByLoginIdentifier(
|
|
identifier: string,
|
|
): Promise<FileMakerModel | null> {
|
|
const id = identifier.trim();
|
|
const or: FilterQuery<FileMakerModel>[] = [
|
|
{ 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<FileMakerModel | null> {
|
|
return await this.fileMakerModel.findOne({
|
|
_id: new Types.ObjectId(userId),
|
|
});
|
|
}
|
|
|
|
async findOneAndUpdate(
|
|
filter: FilterQuery<FileMakerModel>,
|
|
update: FilterQuery<FileMakerModel>,
|
|
) {
|
|
return await this.fileMakerModel.findOneAndUpdate(filter, update, {
|
|
new: true,
|
|
});
|
|
}
|
|
|
|
async findAll(
|
|
filter: FilterQuery<FileMakerModel>,
|
|
): Promise<(FileMakerModel & { _id: Types.ObjectId })[]> {
|
|
return await this.fileMakerModel.find(filter).lean();
|
|
}
|
|
|
|
async updateOne(filter: FilterQuery<FileMakerModel>, update: any) {
|
|
return this.fileMakerModel.updateOne(filter, update);
|
|
}
|
|
}
|