forked from Yara724/api
YARA-1136
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
import { Injectable } from "@nestjs/common";
|
||||
import { InjectModel } from "@nestjs/mongoose";
|
||||
import { FilterQuery, Model, Types } from "mongoose";
|
||||
import { CallCenterAgentModel } from "../schema/call-center-agent.schema";
|
||||
|
||||
@Injectable()
|
||||
export class CallCenterAgentDbService {
|
||||
constructor(
|
||||
@InjectModel(CallCenterAgentModel.name)
|
||||
private readonly model: Model<CallCenterAgentModel>,
|
||||
) {}
|
||||
|
||||
async create(
|
||||
data: Partial<CallCenterAgentModel> & { password: string },
|
||||
): Promise<CallCenterAgentModel> {
|
||||
return this.model.create(data);
|
||||
}
|
||||
|
||||
async findOne(
|
||||
filter: FilterQuery<CallCenterAgentModel>,
|
||||
): Promise<CallCenterAgentModel | null> {
|
||||
return this.model.findOne(filter);
|
||||
}
|
||||
|
||||
async findById(id: string): Promise<CallCenterAgentModel | null> {
|
||||
return this.model.findOne({ _id: new Types.ObjectId(id) });
|
||||
}
|
||||
|
||||
async findByLoginIdentifier(
|
||||
identifier: string,
|
||||
): Promise<CallCenterAgentModel | null> {
|
||||
const id = identifier.trim();
|
||||
const or: FilterQuery<CallCenterAgentModel>[] = [
|
||||
{ email: id },
|
||||
{ username: id },
|
||||
];
|
||||
if (/^\d{10}$/.test(id)) {
|
||||
or.push({ nationalCode: id });
|
||||
}
|
||||
return this.model.findOne({ $or: or });
|
||||
}
|
||||
|
||||
async findAll(
|
||||
filter: FilterQuery<CallCenterAgentModel>,
|
||||
): Promise<(CallCenterAgentModel & { _id: Types.ObjectId })[]> {
|
||||
return this.model.find(filter).lean() as Promise<
|
||||
(CallCenterAgentModel & { _id: Types.ObjectId })[]
|
||||
>;
|
||||
}
|
||||
}
|
||||
61
src/users/entities/schema/call-center-agent.schema.ts
Normal file
61
src/users/entities/schema/call-center-agent.schema.ts
Normal file
@@ -0,0 +1,61 @@
|
||||
import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose";
|
||||
import { Types } from "mongoose";
|
||||
import { RoleEnum } from "src/Types&Enums/role.enum";
|
||||
|
||||
/**
|
||||
* Call-center agent actor. Works under an insurance company (clientKey) and
|
||||
* can start V6 LINK blame files on behalf of callers.
|
||||
*/
|
||||
@Schema({
|
||||
collection: "call-center-agents",
|
||||
versionKey: false,
|
||||
timestamps: true,
|
||||
})
|
||||
export class CallCenterAgentModel {
|
||||
_id?: Types.ObjectId;
|
||||
|
||||
@Prop({ required: true })
|
||||
firstName: string;
|
||||
|
||||
@Prop({ required: true })
|
||||
lastName: string;
|
||||
|
||||
@Prop({ type: String, unique: true, sparse: true, required: false })
|
||||
email?: string;
|
||||
|
||||
@Prop({ type: String })
|
||||
username?: string;
|
||||
|
||||
@Prop({ type: String, index: true, sparse: true })
|
||||
nationalCode?: string;
|
||||
|
||||
@Prop({ type: Types.ObjectId, index: true })
|
||||
clientKey?: Types.ObjectId;
|
||||
|
||||
@Prop({ required: true })
|
||||
password: string;
|
||||
|
||||
@Prop({ required: false })
|
||||
mobile?: string;
|
||||
|
||||
@Prop({ required: false })
|
||||
phone?: string;
|
||||
|
||||
@Prop({ default: RoleEnum.CALL_CENTER })
|
||||
role: RoleEnum;
|
||||
|
||||
@Prop({ type: "string", default: "" })
|
||||
otp: string;
|
||||
|
||||
createdAt: Date;
|
||||
}
|
||||
|
||||
export const CallCenterAgentDbSchema =
|
||||
SchemaFactory.createForClass(CallCenterAgentModel);
|
||||
|
||||
CallCenterAgentDbSchema.pre("save", function (next) {
|
||||
if (!this.username) {
|
||||
this.username = (this as any).email || (this as any).nationalCode;
|
||||
}
|
||||
next();
|
||||
});
|
||||
@@ -11,6 +11,7 @@ import { UserDbService } from "./entities/db-service/user.db.service";
|
||||
import { ExpertFileActivityDbService } from "./entities/db-service/expert-file-activity.db.service";
|
||||
import { FileMakerDbService } from "./entities/db-service/file-maker.db.service";
|
||||
import { FileReviewerDbService } from "./entities/db-service/file-reviewer.db.service";
|
||||
import { CallCenterAgentDbService } from "./entities/db-service/call-center-agent.db.service";
|
||||
import {
|
||||
DamageExpertDbSchema,
|
||||
DamageExpertModel,
|
||||
@@ -41,6 +42,10 @@ import {
|
||||
FileReviewerDbSchema,
|
||||
FileReviewerModel,
|
||||
} from "./entities/schema/file-reviewer.schema";
|
||||
import {
|
||||
CallCenterAgentDbSchema,
|
||||
CallCenterAgentModel,
|
||||
} from "./entities/schema/call-center-agent.schema";
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
@@ -54,6 +59,7 @@ import {
|
||||
{ name: ExpertFileActivity.name, schema: ExpertFileActivitySchema },
|
||||
{ name: FileMakerModel.name, schema: FileMakerDbSchema },
|
||||
{ name: FileReviewerModel.name, schema: FileReviewerDbSchema },
|
||||
{ name: CallCenterAgentModel.name, schema: CallCenterAgentDbSchema },
|
||||
]),
|
||||
HashModule,
|
||||
],
|
||||
@@ -68,6 +74,7 @@ import {
|
||||
ExpertFileActivityDbService,
|
||||
FileMakerDbService,
|
||||
FileReviewerDbService,
|
||||
CallCenterAgentDbService,
|
||||
],
|
||||
exports: [
|
||||
UserDbService,
|
||||
@@ -79,6 +86,7 @@ import {
|
||||
ExpertFileActivityDbService,
|
||||
FileMakerDbService,
|
||||
FileReviewerDbService,
|
||||
CallCenterAgentDbService,
|
||||
],
|
||||
})
|
||||
export class UsersModule {}
|
||||
|
||||
Reference in New Issue
Block a user