added client role and related code

This commit is contained in:
2025-05-03 17:02:37 +05:30
parent c84cd055d4
commit 5800069e6b
9 changed files with 229 additions and 185 deletions

View File

@@ -1,43 +1,50 @@
import mongoose from 'mongoose';
import { generateId, generateToken } from '../utils/id';
import { CreateUserInput, UpdateUserInput, userModel } from './user.schema';
import { sendMail } from '../utils/mail';
import { AuthenticatedUser } from '../auth';
import mongoose from "mongoose";
import { generateId, generateToken } from "../utils/id";
import { CreateUserInput, UpdateUserInput, userModel } from "./user.schema";
import { sendMail } from "../utils/mail";
import { AuthenticatedUser } from "../auth";
export const ErrOpNotValid = new Error('operation is not valid');
export const ErrOpNotValid = new Error("operation is not valid");
export const ErrMissingOrdId = new Error(
"orgId is required when role is client"
);
export async function createUser(
input: CreateUserInput,
user: AuthenticatedUser
) {
if (input.role == 'admin' && user.role != 'superAdmin') {
if (input.role == "admin" && user.role != "superAdmin") {
throw ErrOpNotValid;
}
if (input.role == "client" && !input.orgId) {
throw ErrMissingOrdId;
}
const token = await generateToken();
const newUser = await userModel.create({
tenantId: user.tenantId,
pid: generateId(),
name: input.firstName + ' ' + input.lastName,
name: input.firstName + " " + input.lastName,
createdAt: new Date(),
createdBy: user.userId,
token: {
value: token,
expiry: new Date(Date.now() + 3600 * 48 * 1000),
},
status: 'invited',
status: "invited",
...input,
});
const sent = await sendMail(
input.email,
'You have been invited to Quicker Permtis.',
"You have been invited to Quicker Permtis.",
`Click <a href="${
process.env.SERVER_DOMAIN +
'/auth/webauthn/register?token=' +
"/auth/webauthn/register?token=" +
token +
'&email=' +
"&email=" +
newUser.email
}">here</a> to register.`
);
@@ -56,7 +63,7 @@ export async function getUser(userId: string) {
}
export async function getUserByToken(token: string) {
return await userModel.findOne({ 'token.value': token });
return await userModel.findOne({ "token.value": token });
}
export async function getUserByEmail(email: string) {
@@ -67,7 +74,7 @@ export async function listUsers(tenantId: string) {
return await userModel
.find({ $and: [{ tenantId: tenantId }, { dev: { $ne: true } }] })
.select(
'_id pid orgId firstName lastName name email role avatar status createdAt createdBy lastLogin'
"_id pid orgId firstName lastName name email role avatar status createdAt createdBy lastLogin"
);
}
@@ -77,7 +84,7 @@ export async function updateUser(userId: string, input: UpdateUserInput) {
new: true,
})
.select(
'_id pid orgId firstName lastName name email role avatar status createdAt createdBy lastLogin'
"_id pid orgId firstName lastName name email role avatar status createdAt createdBy lastLogin"
);
}